|
Hi,
I get an error with this code when I try to delete the object (CWindowImpl)
LRESULT CWndNotify::OnTimer(UINT nMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled)
{
switch( nTimer )
{
case ...:
{
break;
}
case ...:
{
KillTimer( TIMER_COLLAPSE );
delete this;
break;
}
...
I get this assertion error:
pThis->m_pCurrentMsg == &msg
I tried Detatch() and DestroyWindow() before delete but it doesn't help. How should I destroy the window?
Thanks!
---------------
Concentrating on Ideas
http://www.edovia.com
|
|
|
|
|
Hello,
Use DestroyWindow and forget the "delete this". "Delete this" doesn't make any sense here.
-Dominik
|
|
|
|
|
I works with DestroyWindow() but I still have one question: I created the window like this:
<br />
CNotifyWnd* pWnd = new CNotifyWnd();<br />
does DestroyWindow() will also get rid of my pointer or am I leaking memory here?
thanks!
---------------
Concentrating on Ideas
http://www.edovia.com
|
|
|
|
|
In this case you need to delete the class...
delete pWnd;
pWnd = NULL;
First call DestroyWindow and then the code above. The code above automatically calls the class'es deconstructor.
|
|
|
|
|
I'd suggest overriding OnFinalMessage( ) and do the delete this; there.
Wenn ist das Nunstück git und Slotermeyer? Ja! Beierhund das oder die Flipperwaldt gersput!
|
|
|
|
|
Lookup WM_NCDESTROY in MSDN. It's sent when all windows belonging to your control has died. In that handler you may delete this; just right before return 0 . However, only do this override for heap-allocated window objects.
See MSDN docs for more info.
--
standing so tall, the ground behind
no trespassers, on every floor
a garden swing, and another door
she makes it clear, that everything is hers
A place of abode, not far from here, Ms. Van de Veer
|
|
|
|
|
On the other hand, you seem to be doing MFC stuff, so you may want to check out OnNcDestroy() and PostNcDestroy .
--
standing so tall, the ground behind
no trespassers, on every floor
a garden swing, and another door
she makes it clear, that everything is hers
A place of abode, not far from here, Ms. Van de Veer
|
|
|
|
|
Hello,
I have a a CTreeCtrl a need to retriev a speciphic item. But the tree is not deployed.
I put the items such as :
HTREEITEM id ;
id = tTree.InsertItem(sText, 0,1) ;
tTree.SetItemData(id,lKey) ;
And for search my curent item, i want to job like as baut that dont work, do you have an idea :
HTREEITEM item = tTree.GetRootItem() ;
for (int i=0 ; i < tTree.GetCount() ; i++)
{
long lId = tTree.GetItemData(item) ;
if (lTree == lId)
{
// current item Set current and focus
tTree.SelectItem(item) ;
tTree.Select(item, TVGN_CARET) ;
return TRUE ;
}
// Go to next !
item = tTree.GetNextItem(item,TVGN_NEXT) ;
}
|
|
|
|
|
How do we rotate the image inside a CBitmap object by a specified angle
|
|
|
|
|
Here[^] was a fun discussion on that topic.
|
|
|
|
|
Check out this article[^]. If it doesn't help you then you might want to check out commercially available class libraries like Stingray [^] - and Dundas[^] also has got a very rich class library. Of course these two are not free....
Wenn ist das Nunstück git und Slotermeyer? Ja! Beierhund das oder die Flipperwaldt gersput!
|
|
|
|
|
How can I show a child dialog (in a dialog based app) in the taskbar when it is minimized ??
Thanks,
Cris.
|
|
|
|
|
Hello, I'm changing a form background color using OnEraseBkgnd(CDC* pDC)
I'm also drawing texto and using a CFont for the propose.
The problem is when OnEraseBkgnd(CDC* pDC) is called the second time, i'm using the font like:
VERIFY(hFont.CreateFont(40, 15, 0, 0, FW_NORMAL,FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Arial Bold"));
pOldFont=pDC->SelectObject(&hFont);
pDC->SelectObject(hFont);
pDC->DrawText(sFormName, -1, CRect(15, 0, rc.Width(),80), DT_LEFT|DT_SINGLELINE|DT_VCENTER);
pDC->SelectObject(&pOldFont);
But, after it exits the function i get an error.
What am I doing wrong?
Thank you for your time
|
|
|
|
|
Hallo,
Don't create the font resource in the OnEraseBkgnd(...). Create the font in a function, which is called only once or try this:
if(hFont == NULL)
{
hFont.CreateFont(40, 15, 0, 0, FW_NORMAL,FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Arial Bold"));
}
But the way better method is to make the font resource global and create it once, for example in the class'es constructor.
And don't forget to release the font resource when exiting the program with DeleteObject.
-Dominik
|
|
|
|
|
Thank you Dominik for your advise,
Well, the '==' operator dosen't work, because hFont is not a pointer.
Is there a way to test if hFont was created?
Now its Working fine, thank you very much
|
|
|
|
|
Why does this code only set the background to black behind the text and not the whole control background area?
HBRUSH CIADDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if ( (pWnd->GetSafeHwnd() == GetDlgItem(IDC_SYS1->GetSafeHwnd())
{
pDC->SetTextColor(RGB(255,0,0));//red text
pDC->SetBkColor(RGB(0,0,0) ); //black background
}
return hbr;
}
|
|
|
|
|
u have to set hbr to the color u want the control background to be
"even if my world is weird it's my world" biz stuff about me
|
|
|
|
|
On my dialog is a CEdit control. While typing, pasting text, moving around with the arrow keys or mouse within the CEdit control, I have the need to show the current position within the text (something like a text editor would do). Rather than just the line/col information that editors such as the VC++ IDE show, I need the overall position within the text string. So, for example, if the CEdit control had 752 characters in it, I need to show the current position, be it 15 or 491. Make sense?
Thanks,
David
|
|
|
|
|
One solution is to simple store the data from the edit control to a string object and get the position based on the current character.
Kuphryn
|
|
|
|
|
Therein lies the crux of the problem: how to obtain the current character of a CEdit control? Whenever the CEdit control is updated, whether through typing, pasting, using the arrow keys or the mouse, I can't seem to find a method for knowing where the cursor currently is.
|
|
|
|
|
Good point. I do not think there is a get position via cursor for CEdit. One possible solution is to get the current is CEditCtrl GetCaretPos().
Kuphryn
|
|
|
|
|
Ahh, it never dawned on me to use a parent-class method. I had my blinders set on CEdit methods only. So, I was able to use something like:
pt = m_editText.GetCaretPos();<br />
x = m_editText.CharFromPos(pt);<br />
<br />
nCharIndex = LOWORD(x);<br />
TRACE("char index = %d, ", nCharIndex);
Thanks
|
|
|
|
|
I have an explorer like app which uses the system image list with
no problems ( attach/detach etc).
Now for some of the items displayed I need to display a Custom Icon.
I tried a class I found which create an imagelist from scratch, but that goes through ALL registry entries for file extensions it can find and calls SHGetFileInfo for each of them, and then in the end I can add my own custom icons. As you can imagine: It takes forever even in a Hi-Prio thread.
I want this to work on 98 as well as 2K/Xp, and the latter don't return a filled HImagelist to which I can simply add.
What is the best way I can achieve the desired effect?
|
|
|
|
|
Use ImageList_Duplicate() to make a copy of the system image list, and then use ImageList_Add() to add your custom images to the copy. Then use the copy in place of the system image list.
Software Zen: delete this;
|
|
|
|
|
Hello, I have an ATL object which loads a JPEG from database in a VARIANT now I need to save the variant to a file on disk. Any idea?
Thanks.
|
|
|
|
|