Article ID: 168123
Article Last Modified on 10/2/2003
APPLIES TO
- Microsoft ActiveX Template Library 2.1
- Microsoft ActiveX Template Library 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
Additional query words: GetTopLevelWindow NULL kbatl210bug kbctrl kbvc600fix kbserver kbinternet
Keywords: kbbug kbfix kbinprocsvr kbvc600fix kbserver kbatl300fix kbatlwc KB168123