2012-10-18 34 views
1

我想在鼠標懸停的時候找到其他控件的句柄,但它只發現上面的控件(使用WindowFromPoint,ChildWindowFromPoint等不起作用)。如何在鼠標點找到mfc控件的句柄,但處於其他控制之下?

有什麼建議嗎?

+0

控件是否嵌套,即控件之間是否存在父子關係,還是隻是重疊且不相關? – Tony

+0

閱讀[通過迷宮的MFC消息和命令路由](http://www.microsoft.com/msj/0795/dilascia/dilascia.aspx),它可能會幫助您瞭解郵件路由的位置。或者發佈一些代碼來顯示問題。 – Tony

回答

2

您可以使用GetNextWindow Win32 API調用來檢索Z-Order下一個窗口,該窗口位於此窗口之下。

算法可能是這樣的:

  1. 通過HWND hwnd = ChildWindowFromPoint(hwndParent, point);
  2. 如果hwnd獲取初始窗口搶手的窗口,然後停止
  3. hwnd = GetNextWindow(hwnd, GW_HWNDNEXT);
  4. 如果hwnd包含point然後去2
  5. 否則轉到3.

另一種方法 - 只需枚舉對話框或視圖上的所有控件,將它們的矩形和句柄存儲在某個容器中,然後手動進行點檢查。

相關問題