|
(I hope str is not empty... )
_T("No name") wrote: pDC->;DrawText( str, rText, DT_CENTER |DT_CALCRECT |DT_WORDBREAK);
Shouldn't be
pDC->DrawText( str, &rText, DT_CENTER |DT_CALCRECT |DT_WORDBREAK);
?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
no that i have checked already string is nt empty
|
|
|
|
|
Have you added the address of operator to your function call?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Isn't the problem that you are telling DrawText to break the lines with DT_WORDBREAK and you specify an empty rectangle, so how can DrawText know where to break the lines if it does not know the original width?
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
thanks it helped
|
|
|
|
|
Hai !
I have developed an application which downloads a binary file to a device.
If i download the binary at a baud rate of 115200, i can see all controls of my dialog box, but when i download at lower baud rates such as 9600 and press a mouse button or a key from key board while download is under process, all my controls like buttons, radio buttons disapppear only the frame of my dialog is visible. when download is compplete, i can again see all the controls.
why do these controls dissappear when a key is pressed during download at lower baud rates?
Is there any way to overcome this issue?
Thanks !
|
|
|
|
|
I guess by 'disappearing' you mean that your dialog becomes unresponsive (and probably not repainted, that's why your control 'disapear'). This is probably because your are downloading in the main thread, which completely blocks your application while you are processing the download (and your application is not able to process windows messages which makes it unresponsive). To solve your problem, one option would be to to your download stuff in a separate worker thread.
I suggest this article[^] to get started.
|
|
|
|
|
Sorry, by disappearing means the dialog box turns white in colour except at the borders, the application must be non resposive while downloading, but the controls present like progress bar, buttons , radio buttons must be visible.
|
|
|
|
|
Possibly you should use a worker thread for the serial communication, leaving the main thread free of updating the GUI .
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
In general, it is bad design to have your dialog not responding to windows messages. Instead what you could do when starting the download is to show a modal dialog (with eventually a progress control and a cancel button) that disappear when the download is complete (butyou still have to put your download code in a separate worker thread). This way you still keep a responsive UI and avoid that the user presses on all the buttons .
|
|
|
|
|
Hi All,
I have a query related to virtual methods and access specifiers in C++ class. I have a two classes and their definition is as shown below
class Base
{
public:
virtual void PrintMethod()
{
cout << "Base class method called";
}
};
class Derived : public Base
{
private:
virtual void PrintMethod()
{
cout << "Derived class method called";
}
};
in main method
int main()
{
Derived der;
Base *ptr = &der;
ptr->PrintMethod(); ------------ (1)
// der.PrintMethod(); ------------ (2)
return 0;
}
When I execute the program the output I get is "Derived class method called" and this confused me a bit. I could not figure out properly why the derived class method was called when it is private in class Derived?
My guess is that the public function in class Base is inherited in Derived class and when the call was made the through the pointer the linker could only find the private definition of the function PrintMethod and hence it called it through the pointer which is actually pointing to the Derived class object.
If I try to call the function through the derived class object (as shown in 2), I get compilation error saying the private method is not accessible which is true.
So overall I was not satisfied with the reasoning I arrived at for the derived class method being called.
Can someone give me more insight into what actually is happening here?
Thanks and Regards
|
|
|
|
|
When you have a virtual function, the compiler will create a virtual table (also called vtable) in your class which contains the address of all virtual functions (in this case, the address of the Derived::PrintMethod). At that point, it doesn't make any difference if the derived virtual function is private or not. You are calling the function on a base pointer, and there's no way for the compiler to know if the derived function is public or not (the compiler has no way to know what is the real type of your pointer at compile time). The compiler just access the virtual table and redirect the call to the derived method.
|
|
|
|
|
The compiler may do just a static check on your function calls, on the other hand, polymorphism is a dynamic feature of the language.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
|
Dear All,
I have an issue with floating point precision with Visual Studio 2005 (2008 as well)
See the sample code.
const float f = 0.2f * 3;
CString str;
str.Format(_T( "%f"), f );
When you check the watch window, the variable will be having value 0.60000002(I expected 0.6). To confirm this again, I tried running with WinDBG, it has given a value 0.6000000238 in it's watch window
I doubt this may affect my calculation which should be very precise. I tried different floating point models using /fp compiler option. But always it has the same output. But the formatted string below gives 0.600000 as the result.
What could be the reason for this issue? Any solutions?
-Sarath.
"Great hopes make everything great possible" - Benjamin Franklin
|
|
|
|
|
I don't understand where is your problem exactly: only with the precision or when formating the string ?
For the precision problem, you can use a double instead of a float, you'll gain much more precision.
For the formating, you can supply the number of decimal points you want to show in the format string (just add a number before the 'f').
|
|
|
|
|
OK
try this code. then things will be more clear.
float f = 0.2f 0.6f;
f -= 0.2f;
f -= 0.2f;
f -= 0.2f;
if( f == 0.0f )
{
}
In this case, after subtracting 0.2 three times, the value should reach to 0.0f. But it's fails. because of the trailing additional digits in the floating point representation. The same case exists for double type as well.
-Sarath.
"Great hopes make everything great possible" - Benjamin Franklin
modified on Tuesday, February 3, 2009 6:59 AM
|
|
|
|
|
When working with doubles or floats, you should never compare numbers directly. This won't work. Instead, you have to use precision range when comparing them (for instance if the value is between -0.000001 and 0.000001, then you can say it is equal to 0. That's the only way to work with floating point values, because they will never be 100% precise and you have to keep that in mind.
|
|
|
|
|
Cedric Moonen wrote: for instance if the value is between -0.000001 and 0.000001, then you can say it is equal to 0. That's the only way to work with floating point values, because they will never be 100% precise and you have to keep that in mind
Yeap the sign associated with it was the real issue. it may remain negative (even I expect 0.0f)
-Sarath.
"Great hopes make everything great possible" - Benjamin Franklin
|
|
|
|
|
Sarath. wrote: the sign associated with it was the real issue
Shouldn't be - the IEEE standard requires that positive or negative zeros compare equal.
|
|
|
|
|
With double data type you'll get a better approximation (you know you can't get exact values)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
It's because standard floats and doubles cannot exactly represent 0.6.
The representation of 0.6 as a float can be determined by working out what sum of binary fractions (1/2n) best approximates it - you can see it's going to be something like 0.5 + 0.0625 + 0.03125 + .... - SpeedCrunch[^] (a nice calculator) gives it as this:
0b0.1001100110011001100110011001100110011001100110011001100110011001101
Infinitely recurring binary time...
Read this document[^] for the full story.
|
|
|
|
|
See here and here. In short, not all floating-point numbers can be stored in binary without some rounding.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
Hello,
I am compling one of the sample projects which I got after installing WMSDK.
I am using VS2009 and I compiled the project from "C:\WMSDK\WMFSDK11\samples\Metadataedit" but getting error which tells that it's not getting declarations of some symbols/variables used in 'string.h'. I am confused thinking what setting am I missing ? can anybody please guide why I am getting those error ?
Thanks in Advance.
regards,
Supriya
|
|
|
|
|
Are you talking about std::string ? If yes, then you have to #include <string></string> and not #include <string.h></string.h> .
EDIT: BTW, it is in general usefull to provide the exact error message, and not your interpretation of the message.
|
|
|
|