在我的C++ MFC應用程序中,我有一個窗體上的ActiveX控件。在某個時候,我創建並顯示一個新的對話框。我不希望用戶能夠在第二個對話框啓動時單擊ActiveX控件,因此我試圖將其創建爲子對話框。但是,ActiveX控件總是以Z順序出現在子對話框上方。我試圖發送消息創建更改Z順序,但沒有任何工作。使用Windows掛鉤攔截鼠標點擊我的應用程序C++
我使用的是Windows鉤子使用下面的代碼攔截鼠標點擊嘗試:
GetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)CDWFDLG::ClickProc, GetModuleHandle(NULL), 0)
LRESULT CALLBACK CDWFDLG::ClickProc(int ncode, WPARAM wparam, LPARAM lparam)
{
if(wparam == WM_LBUTTONDOWN)
{
Beep(110, 30);
return TRUE;
}
return CallNextHookEx(0, ncode, wparam, lparam);
}
這將阻止所有鼠標左鍵點擊這是我想要的。然而,它在所有事情上都這樣做,而不僅僅是在我的應用程序上。我試過設置使用
GetCurrentThreadId()
和
GetWindowThreadProcessId(this->m_hWnd, &threadId)
然而這些都不工作的線程ID。我應該使用什麼來讓鉤子在我的應用程序上運行?一旦這個工作正常,我正在計劃使用點擊的座標來檢查是否在新對話框中並從那裏處理它。
感謝
只需通過ShowDialog模式顯示對話框不起作用? – Thomas 2011-03-07 12:11:53
@Thomas:完全同意。模態對話框應該解決這個問題。 – 0xC0000022L 2011-03-07 12:33:59
我沒有將'ShowDialog'作爲對話框的方法。它絕對使用CDialog作爲基類。有'ShowWindow'和'DoModal'。 – ADringer 2011-03-07 16:26:15