2010-08-31 51 views
2

我們知道Windows中的靜態控制無法獲得輸入焦點。但是由於Windows中的靜態控制只是一個子窗口,根據我目前瞭解的情況,當我們點擊它時,任何窗口都應該被賦予輸入焦點。那麼Static控件如何實現拒絕輸入焦點的效果呢?我懷疑它在其WM_SETFOCUS處理程序中有特殊的處理,將輸入焦點轉移到其父窗口。但是,我已經做了一些測試,看起來子窗口確實沒有收到任何WM_SETFOCUS,即Windows根本就沒有真正嘗試給靜態控件提供輸入焦點。Windows靜態控制如何防止輸入焦點

我讀過關於輸入焦點的msdn,並沒有任何與Windows如何爲靜態控制分配焦點相關。任何人都可以解釋如何使靜態控制沒有輸入焦點?

回答

4

靜態控件從其WM_NCHITTEST處理程序返回HTTRANSPARENT。這會導致點擊直接進入底層窗口(這是父級)。 WM_MOUSEACTIVATEWM_*BUTTONCLICK等魔法最終導致激活並且SetFocus