INFO: WindowFromPoint() Caveats

ID: Q65882


The information in this article applies to:


SUMMARY

When the coordinates passed to the WindowFromPoint() function correspond to a disabled, hidden, or transparent child window, the handle of that window's parent is returned.

To retrieve the handle of a disabled, hidden, or transparent child window, given a point, the ChildWindowFromPoint() function must be used.


MORE INFORMATION

The following code fragment demonstrates the use of the ChildWindowFromPoint() function during the processing of a WM_MOUSEMOVE message. This code finds the topmost child window at a given point, regardless of the current state of the window.

In this fragment, hWnd is the window receiving this message and is assumed to have captured the mouse via the SetCapture() function.


   HWND  hWndChild, hWndPoint;
   POINT pt;
    .
    .
    .
    case WM_MOUSEMOVE:
        pt.x = LOWORD(lParam);
        pt.y = HIWORD(lParam);
        /*
         * Convert point to screen coordinates. When the mouse is
         * captured, mouse coordinates are given in the client
         * coordinates of the window with the capture.
         */ 
        ClientToScreen(hWnd, &pt);
        /*
         * Get the handle of the window at this point. If the window
         * is a control that is disabled, hidden, or transparent, then
         * the parent's handle is returned.
         */ 
        hWndPoint = WindowFromPoint(pt);

        if (hWndPoint == NULL)
            break;
        /*
         * To look at the child windows of hWnd, screen coordinates
         * need to be converted to client coordinates.
         */ 
        ScreenToClient (hWndPoint, &pt);

        /*
         * Search through all child windows at this point. This
         * will continue until no child windows remain.
         */ 
        while (TRUE)
            {
            hWndChild = ChildWindowFromPoint(hWndPoint, pt);

            if (hWndChild && hWndChild != hWndPoint)
                hWndPoint = hWndChild;
            else
                break;
            }

        // Do whatever processing is desired on hWndPoint

        break; 

Additional query words: WIN16SDK


Keywords          : kbNTOS kbGrpUser kbWinOS kbWndw kbWndwProp 
Version           : 
Platform          : 
Issue type        : kbinfo 

Last Reviewed: March 5, 1999