|
If you only need to change the text font, size or color then you don't need to do any drawing.
Nish
Regards,
Nish
Native CPian.
Born and brought up on CP.
With the CP blood in him.
|
|
|
|
|
Hi All,
what seems to be the problem of this code:
#include <string>
#include <iostream.h>
int main()
{
std::string str1="Hello World";
std::str2=str1.substr(6,5);
return 0;
}
I get an error "error C2039: 'str2' : is not a member of 'std'"
Thansk/Regards
Sidney
Thanks/Regards
Sidney
|
|
|
|
|
Sidney wrote:
std::str2=str1.substr(6,5);
should be
std::string str2 = str1.substr(6,5);
|
|
|
|
|
Hey Rama!
Thanks
|
|
|
|
|
One more quick question...
why is it I can's directly output the str2 using cout ??
std::string str1="Hello World";
std::string str2=str1.substr(6,5);
cout << str2;
I get this error: "error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char="">,class std::allocator<char> >' (or there is no acc
Thanks/Regards
Sidney
|
|
|
|
|
You should use iostream not isotream.h
#include <iostream>
not
#include <iostream.h>
Then you need to prefix cout with std::
std::cout << str2;
Rama Krishna
When I am near, do not fear
|
|
|
|
|
Oh I see... can I store the value of str2 in a new variable? can you show me on how to do this... I'm sorry I'm new in C++ I'm still studying.
I really appreciate your help =)
Thanks/Regards
Sidney
|
|
|
|
|
Yiur original code is right just prefixe cout with std::cout. I will work. Try and see
|
|
|
|
|
Yes it did... It's working now One last question... after this I'll let you go How can I pass the value of str2 in a new variable? example:
int main(){
char var[100];
std::string str1="Hello World";
std::string str2=str1.substr(1,5);
std::cout << str2;
//how shoud I transfer it to var variable??
var = ???(str2);
}
Thanks/Regards
Sidney
|
|
|
|
|
Correct way to do this is,
str2.copy(var, 100);
|
|
|
|
|
Thanks Rama!! your the base
Thanks/Regards
Sidney
|
|
|
|
|
Hi Everyone,
I need some help!!!
I have been retrieving my messages from the message queue in my thread using the GetMessage().
I've placed the message inside the MSG structure and retrieve the messaage contents by referencing msg.wParam. msg.wParam is an UINT value that represents the address of msg content, in this case, a dynamically allocated char * pointer.
After using this string, I wanted to deallocate the memory for this char *ptr, doing this.
delete (char *) msg.wParam;
It compiles but didn't work. As suspected, msg.wParam isn't a ptr, it's an address! So I tried this.
char *tmp;
tmp = (char *) msg.wParam;
delete tmp;
It compiles Same problem. So what can I do?
Everytime a new msg comes, the information in msg.wParam is rewritten. But I'm pretty sure that the memory allocation remains!
Any help on this problem is greatly appreciated! Thanks!
wilche
|
|
|
|
|
try
delete [] reinterpret_cast<char*>(msg.wParam);
|
|
|
|
|
John M. Drescher wrote:
delete [] reinterpret_cast(msg.wParam);
Oops I missed that in my reply. Thanks
|
|
|
|
|
Thanks! that works!
uh could you explain why it works?
greatly appreciated!
wilche
|
|
|
|
|
delete (char *) msg.wParam;
This deletes only 1 char not an array of char. Add [] to delete arrays. The reinterpret_cast<> is a c++ way of casting.
John
|
|
|
|
|
I need to set the number of scroll lines under Win98
Below is my code. Why it does not work ?
int m_nCur; //the number of lines
SystemParametersInfo(SPI_SETWHEELSCROLLLINES, m_nCur, NULL, NULL);
SystemParametersInfo(SPI_SETWHEELSCROLLLINES, m_nCur, NULL, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
I set the forth parameter 'NULL' but it doesn't work.
If set it 'SPIF_SENDCHANGE | SPIF_UPDATEINIFILE', the system hanged.
Why???
Or could you show me sample code??
|
|
|
|
|
Anyone tried setting the window origin with memdc?
It did'nt work for me.
It just seems to have shrunk the size of the subclassed static control.
Anyone managed to get this problem or solved it?
Thanxs
|
|
|
|
|
The origin of a DC is usually relative to the client area of its subclassed static control, not the window on which the control is displayed.
|
|
|
|
|
Yup, i understand the point.
However i'm not sure why the control seems to have shrunk after i called the SetWindowOrg. Since calling SetWindowOrg should not affect the size of the control
The control was much bigger as i can see from the color painted for the background of the control when memdc.SetWindowOrg was commented out.
Even a very simple example did'nt work out.
|
|
|
|
|
Perhaps this relates to the autosize feature of static controls. If you draw text that is smaller than the original text into a static, the control will size down to the size of the new text. This applies to both height and width. So "abc" is a smaller static than "abc def" and a size 8 font is smaller than a size 12.
|
|
|
|
|
|
I have some funny behavior with a spin control on a dialog. I'm beginning to think I have a bad implementation for this type of control.
The behavior is that the values returned from GetPos() seem to lag what the user is doing. E.g., if the user presses the up arrow twice, then the down arrow twice, the user will see (maybe)3 ups followed by a down. This is what I see in the debugger also.
I am very suspicious of how I'm using the control. When I use the class wizard and select the spin control, there are only two messages I can react to: NM_OUTOFMEMORY and UDN_DELTAPOS. I chose to handle the DELTAPOS message. In that handler I have the following code:
void cTabGeneral::OnDeltaposSpinState(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
int val;
static bool FirstTime = true;
if (FirstTime)
{
FirstTime = false;
m_StateSpinner.SetRange(Initialization, TotalNumberOfStates-1);
}
val = ( 0x0000ffff & m_StateSpinner.GetPos() );
DisplaySimState(val); // display new text based on spin control
UpdateData(false); // cause refresh of display
*pResult = 0;
}
Also in the class wizard, I created a member variable (m_StateSpinner) of type CSpinButtonCtrl.
Any ideas on where I've gone astray? I don't like the DELTAPOS message, perhaps mainly because I don't understand what its doing.
|
|
|
|
|
Perhaps first thing you should do is to set the range of the control in your
OnInitDialog()
instead of here.
Nextto get the correct positition you will need to determine whether the which has is being pressed, the up or the down. This can be found in
pNMUpDown->iDelta
and the current position can be found in
pNMUpDown->iPos
So to determine the next position you can do something like this
current_pos = pNMUpDown->iDelta + pNMUpDown->iPos;
Hope this helps, and hope that i'm correct
|
|
|
|