|
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
|
|
|
|
|
Hi
I found code on codeproject "Implementing an autocompleting Combobox By Chris Maunder".I wanted to have droplist when users write text in combobox. Iam working in Win2K Prof and here is OK but in Win98 is some problem when you write e.g. "App". When you push letter "A" droplist is showed but wenn you write 2. letter ... and after you click outside its seleted first item which has first letter "A" and has smallest index. If you hide droplist each oven press and show each odd press its OK but is absurdity to do this in release version
I think that when is droplist visibled and you call SelectString etc. is not applied..
void CMyComboBox::OnEditupdate()
{
if (!m_bAutoComplete)
return;
CString str;
GetWindowText(str);
int nLength = str.GetLength();
ShowDropDown();
DWORD dwCurSel = GetEditSel();
WORD dStart = LOWORD(dwCurSel);
WORD dEnd = HIWORD(dwCurSel);
int found = SelectString(-1, str);
if (found == CB_ERR)
{
SetWindowText(m_strPrev); // select last valid string
SetEditSel(nLength, -1);
return;
}
else {
m_strPrev = str;
GetParent()->SendMessage(WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(), CBN_SELCHANGE), (LPARAM)m_hWnd);
}
if (dEnd < nLength && dwCurSel != CB_ERR)
SetEditSel(dStart, dEnd);
else
SetEditSel(nLength, -1);
}
I dont how to catch it
Could you help me ?
Thanx
LiborB.
|
|
|
|
|
Hi,
I using a OCX component ( AVPHone.ocx )
It have a function .. that function returns a VARIANT variable ..
this variable contains a pointer to a memory adress .. byte *
I need to send this memory data using a socket ... How can I know
the size of this memory area if I have only the pointer ..
The component doesn´t have any function that returns the size ..
obs: it is strange but If I use the same component ocx in VB ... it return a Object
do you have any suggestions ?
|
|
|
|
|
If you know what kind of data type that pointer points to, you can use sizeof() to obtain the memory allocated size.
|
|
|
|