Microsoft KB Archive/168123

From BetaArchive Wiki
Knowledge Base


FIX: CWindow::GetTopLevelWindow() Returns NULL

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