Knowledge Base

FIX: CWindow::GetTopLevelWindow() Returns NULL

Article ID: 168123

Article Last Modified on 10/2/2003


APPLIES TO


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