|
Before calling CFileFolder , call GetFileAttributes() and check the return value for FILE_ATTRIBUTE_HIDDEN .
|
|
|
|
|
hi sir/ mam i am very new to MFC can any one explain how to use HitTest method and what are the uses of it. can we use it for selecting the particular client area.for example i had drawn the text in the client area . had taken two point from LButtonDown and LButtonUP and also the MouseMove and drawn the rectangle by this point. now i want to change the bkcolor of the rectangle .... note i did not taken the editview please any one help me ........
thanking in advance
sarfaraz
|
|
|
|
|
sarfaraznawaz wrote: how to use HitTest method and what are the uses of it
HitTest is normally used to test whether a point is with in the speciifed region or not. You didn't specify the exact context like whether it is windows WM_NCHITTEST or fucntion from any MFC class. Please do.
sarfaraznawaz wrote: had taken two point from LButtonDown and LButtonUP and also the MouseMove and drawn the rectangle by this point. now i want to change the bkcolor of the rectangle
I guess you want o fill the rectangle. Do it by selecting the brush with desired color and style into the DC that you are using to draw.
http://msdn.microsoft.com/en-us/library/dd145175%28v=vs.85%29.aspx
|
|
|
|
|
thanks
i am talking about the WM_NCHITTEST...........
this how i had drawn the rectangle with hollowbrush or NULL_BRUSH because one can see the text..
dc.Rectangle(start_pt.x, start_pt.y, end_pt.x, end_pt.y);
tis are the point which i get from the mouse message LButtonDown and LButtonUP and also the MouseMove....
and now i want to change the color
|
|
|
|
|
Get familiarized with msdn documentation..
WM_NCHITTEST Message
To set the border color of the rectangle you draw, select such a pen to the DC before you call Rectangle() function. To set the fill color do the same with brush. Doesn't it work with you? Have a look at the sample at the link in last post.
|
|
|
|
|
thanks when fill it the text that i have drawn will go hide
|
|
|
|
|
Draw your text after drawing and filling the rectangle. Remember to set a different color to distinguish.
|
|
|
|
|
sorry your not getting what i want to do ......
i am trying to select the particular text i.e should be high-lated background color of text should change
|
|
|
|
|
Did you try what I wrote here[^]?
|
|
|
|
|
thanks ....
but i am not using any one CDialog, OnDraw and doc/view architecture.
i am using app class & mainframe in SD i removed all other classes and what ever text is there i had display in paint only CMainFrame::OnPaint().............
trying to develop the editor kind of application without using editview ..
i have drawn the rectangle mouse event i want change the color what ever text comes under the rectangle should not hide text that is my problem .....
|
|
|
|
|
Hello I want to gt only one digit after point so that I can get proper result from calculation like 128 * (1/1.3) instead of 128* (1/1.333333).
|
|
|
|
|
Hi,
two ways:
1.
use a rounding function; your math package sure has at least one.
2.
for numbers that fit easily in an integer, convert to integer and back; to get multiples of one tenth, do:
double roundToOneTenth(double number) {
return 0.1*(int)(10.*number);
}
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
3. Use floor() : double d = floor(1.333333 * 10.) / 10.;
|
|
|
|
|
Thanks man, Your logic is really smart..
|
|
|
|
|
Hi,
The previous answers will not round correctly negative numbers and lack flexibility. Use the built-in facilities of the Standard C++ Library:
#include <sstream>
#include <iomanip>
double Round(double val, size_t decimal)
{
std::ostringstream oss;
oss << std::fixed << std::setprecision(decimal) << val << std::ends;
std::istringstream(oss.str()) >> val;
return val;
} cheers,
AR
When the wise (person) points at the moon the fool looks at the finger (Chinese proverb)
|
|
|
|
|
While this works, converting to a string, and then back to a float is a slow way of doing it. Check my other answer for alternatives that work.
|
|
|
|
|
Hi Andrew,
1 With a modern compiler implementing move semantics it is not that slow. You can also quicken it with a template for decimal.
2 It is safe, accurate and handles negative values.
3 It is flexible. You don't have to write a new one for each rounding you may need.
All in all this is an academic discussion Real world uses fixed point representations when needing rounded decimal values.
cheers,
AR
When the wise (person) points at the moon the fool looks at the finger (Chinese proverb)
|
|
|
|
|
Are you aware that floating points number have a rounding error ? You'll never be able to represent perfectly a float in memory. For more information google for "floating point precision".
|
|
|
|
|
My answer gets the nearest representation of the rounded value and produces corrrect string output.
cheers,
AR
When the wise (person) points at the moon the fool looks at the finger (Chinese proverb)
|
|
|
|
|
Yes sure, you can always print a floating point with the precision you want, but it doesn't mean that the float stored in memory is rounded properly. I simply wanted to make sure that he is aware of that.
|
|
|
|
|
Some of the suggested answers are ok, but are lacking correct rounding.
Luc Pattyn wrote:
double roundToOneTenth(double number) {
return 0.1*(int)(10.*number);
}
Should be:
double RoundToOneTenth(double nNumber) {
return (int)(10.0 * nNumber + 0.5) * 0.1;
}
While this solution works, it requires converting a floating point number to an integer and back to a floating point number. This is somewhat slow.
Hans Dietrich wrote:
double d = floor(1.333333 * 10.) / 10.;
Should be:
double RoundToOneTenth(double nNumber) {
return floor(nNumber * 10.0 + 0.5) * 0.1;
}
This is the solution I would recommend. Note that I changed /10 to *0.1 .
It is faster to multiply than to divide. In a simple case like this the compiler would make this change for you but I am just pointing this out.
Alain Rist wrote:
#include <sstream>
#include <iomanip>
double Round(double val, size_t decimal)
{
std::ostringstream oss;
oss << std::fixed << std::setprecision(decimal) << val << std::ends;
std::istringstream(oss.str()) >> val;
return val;
}
While this works and saves you from worrying about rounding errors, this is incredibly slow and uses much more memory (although still not much) than other solutions. There is no need for using strings for such a simple operation.
Having said that, it is good that people are posting alternatives to show just how many ways there are for doing this.
Cedric Moonen wrote: Are you aware that floating points number have a rounding error ? You'll never be able to represent perfectly a float in memory.
While this is absolutely true, it only affects really big numbers or numbers with a high precision.
For instance, 1.0 / 3.0 == 0.333333333333333314829616256247390992939472198486328125 (Wikipedia[^]).
If you are concerned about this, there are macros FLT_EPSILON (for float ) and DLB_EPSILON (for double ) which define the minimum perfect precision of a single operation.
|
|
|
|
|
..and in addition, there might be other interesting aspects of rounding. This[^] post on cplusplus.com brings a few of these up.
|
|
|
|
|
Andrew Brock wrote:
double RoundToOneTenth(double nNumber)
{
return floor(nNumber * 10.0 + 0.5) * 0.1;
} This is the solution I would recommend. Note that I changed /10 to *0.1.
-5.51 => -5.4
cheers,
AR
When the wise (person) points at the moon the fool looks at the finger (Chinese proverb)
|
|
|
|
|
Alain Rist wrote: -5.51 => -5.4
Not so bad, since we're talking round numbers.
|
|
|
|
|
That rounding calculation fails with negative numbers. This will work with positives, negatives, and zero :
int RoundValue( double value )
{
int result = 0;
if( value < 0 )
result = (int)( value - 0.5 );
else
result = (int)( value + 0.5 );
return result;
}
Also - yes, it is faster to mulitply than to divide but the percentage of difference is very small (around 10% in my tests) so that is not enough that I would worry about it. Actually, since it is so close I would refrain from changing to multiplies because occasionally it can result in a loss of clarity and the compiler will do it for us when it can.
modified on Wednesday, February 23, 2011 2:02 PM
|
|
|
|