FIX: CWindow::GetTopLevelWindow() Returns NULL (168123)
The information in this article applies to:
- The Microsoft Active Template Library (ATL) 2.1
- The Microsoft Active Template Library (ATL) 3.0
This article was previously published under Q168123 SYMPTOMS
A call to CWindow::GetTopLevelWindow() always returns NULL.
CAUSE
This is due to a bug in the function.
RESOLUTION
Change the function in AtlWin.cpp from:
HWND CWindow::GetTopLevelWindow() const
{
...
while(hWndTmp != NULL)
{
hWndTmp = (::GetWindowLong(hWndParent, GWL_STYLE) & WS_CHILD) ?
::GetParent(hWndParent) :
::GetWindow(hWndParent, GW_OWNER);
hWndParent = hWndTmp;
}
return hWndParent;
}
to the following:
HWND CWindow::GetTopLevelWindow() const
{
...
while(hWndTmp != NULL)
{
// Modification
hWndParent = hWndTmp;
hWndTmp = (::GetWindowLong(hWndParent, GWL_STYLE) & WS_CHILD) ?
::GetParent(hWndParent) :
::GetWindow(hWndParent, GW_OWNER);
}
return hWndParent;
}
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article. This problem was corrected in Visual C++
version 6.0 for Windows.
(c) Microsoft Corporation 1997, All Rights Reserved.
Contributions by Sridhar Madhugiri, Microsoft Corporation
Modification Type: | Major | Last Reviewed: | 10/2/2003 |
---|
Keywords: | kbATL300fix kbATLWC kbBug kbfix kbInprocSvr kbServer kbVC600fix KB168123 |
---|
|