|
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
|
|
|
|
|
I'm using WTL 7.0 and I can't find a way of changing the default timeout for the treeviews custom tooltips that are displayed with the TVS_INFOTIP style.
As soon as you hover over the treeview, the tip is displayed.
I want it to come up after about 1/2 a second.
I've got a treeview created like this:
HWND tree = m_tree.Create(m_hWnd,NULL,NULL,
TVS_SHOWSELALWAYS | TVS_HASBUTTONS |
TVS_LINESATROOT | TVS_HASLINES |
TVS_DISABLEDRAGDROP | TVS_INFOTIP |
WS_CHILD | WS_VISIBLE);
and I have a MESSAGE_MAP that contains this:
NOTIFY_CODE_HANDLER(TVN_GETINFOTIP, OnTVNGetInfoTip);
and I have a function which sets the tool tip text, and the tooltip is displayed correctly when I hover over it.
If, after i create the treeview, i were to do this:
CToolTipCtrl pToolTip = m_tree.GetToolTips();
if (pToolTip)
{
pToolTip.Activate(TRUE);
int n;
n = pToolTip.GetDelayTime(TTDT_INITIAL);
n = pToolTip.GetDelayTime(TTDT_AUTOPOP);
n = pToolTip.GetDelayTime(TTDT_RESHOW);
}
n would be set to the following values:
500
4000
80
Which is right, but these values are not used.
Why not ? and how do i make them do what i want.
Note, that if I don't specify TVS_INFOTIP the tooltips are only displayed when the treeview item under the mouse pointer is not fully displayed, and even then my custom tool tip is NOT displayed (e.g. it doesn't call my "OnTVNGetInfoTip()" via the message map.)
|
|
|
|
|
Hi all.
Something strange is going on with my app. It runs fine, until I try to step through code. As soon as I step over or into an API call, it throws up an Unhandled Exception: 0xC0000005: Access Violation.
I guess this means I'm linking into the wrong libraries?
This is wierd cos it hasn't done anything like this in about 9 months, then all of a sudden - bang! I must have inadvertently changed something, but I can't figure out what.
Any ideas?
TIA,
Pete
|
|
|
|
|
I doubt that anybody can help you unless you provide some more information.
Best regards,
Alexandru Savescu
|
|
|
|