WM_CLOSE while in CPropertySheet::DoModal results in crash
Mads_G._Houmann@olicom.dk
Thursday, December 12, 1996
Environment: VC++ 4.2b, Windows95
I have come across what I suspect is a bug in the CPropertySheet
DoModal implementation.
When my application is showing a modal CPropertySheet derived propertysheet
and it is closed down, the CPropertySheet code crashes.
The skeleton code is the following:
void CMyFrameWnd::OnMyMenuCommand()
{
CMyPropSheet sheet( "Title", this );
-> sheet.DoModal();
}
If the program receives a WM_CLOSE message from an outside source (in this
case the server program that spawned it) while in DoModal(), it results in
a failed ASSERT in dlgprop.cpp: line 739 (and a following crash if this is
ignored).
BOOL CPropertySheet::ContinueModal()
{
// allow CWnd::EndModalLoop to be used
if (!CWnd::ContinueModal())
return FALSE;
// when active page is NULL, the modal loop should end
-> ASSERT(::IsWindow(m_hWnd));
BOOL bResult = SendMessage(PSM_GETCURRENTPAGEHWND);
return bResult;
}
Nothing of this sort happens, if the same thing is tried with a normal
CDialog derived modal dialog.
-
Mads Houmann
Software Engineer
Olicom A/S, Denmark
Mads_G._Houmann@olicom.dk
Wednesday, January 29, 1997
[Moderator's note: For those of you paying attention, yes, this was
previously posted in December, by Mads, but it got no responses.]
Environment: VC++ 4.2b, Windows95
I have come across what I suspect is a bug in the CPropertySheet
DoModal implementation.
When my application is showing a modal CPropertySheet derived propertysheet
and it is closed down, the CPropertySheet code crashes.
The skeleton code is the following:
void CMyFrameWnd::OnMyMenuCommand()
{
CMyPropSheet sheet( "Title", this );
-> sheet.DoModal();
}
If the program receives a WM_CLOSE message from an outside source (in this
case the server program that spawned it) while in DoModal(), it results in
a failed ASSERT in dlgprop.cpp: line 739 (and a following crash if this is
ignored).
BOOL CPropertySheet::ContinueModal()
{
// allow CWnd::EndModalLoop to be used
if (!CWnd::ContinueModal())
return FALSE;
// when active page is NULL, the modal loop should end
-> ASSERT(::IsWindow(m_hWnd));
BOOL bResult = SendMessage(PSM_GETCURRENTPAGEHWND);
return bResult;
}
Nothing of this sort happens, if the same thing is tried with a normal
CDialog derived modal dialog.
-
Mads Houmann
Software Engineer
Olicom A/S, Denmark
| Вернуться в корень Архива
|