【发布时间】:2011-03-07 10:56:59
【问题描述】:
在我的 C++ MFC 应用程序中,我在表单上有一个 ActiveX 控件。在某个时候,我创建并显示了一个新对话框。我不希望用户能够在第二个对话框启动时单击 ActiveX 控件,因此我尝试将其创建为子对话框。但是,ActiveX 控件始终以 Z 顺序出现在子对话框上方。我尝试在创建时发送消息以更改 Z 顺序,但没有任何效果。
我尝试使用 Windows Hooks 来拦截鼠标点击,代码如下:
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);
}
这会阻止我想要的所有鼠标左键单击。然而,它在所有事情上都这样做,而不仅仅是在我的应用程序上。我尝试使用
设置线程 IDGetCurrentThreadId()
和
GetWindowThreadProcessId(this->m_hWnd, &threadId )
但是这些都不起作用。我应该用什么来让钩子在我的应用程序上运行?一旦这个工作正常,我计划使用点击的坐标来检查是否在新对话框中并从那里处理它。
谢谢
【问题讨论】:
-
通过
ShowDialog简单地显示对话框不起作用? -
@Thomas:完全同意。一个模态对话框应该可以解决这个问题。
-
我似乎没有将
ShowDialog作为对话框的方法。它肯定使用 CDialog 作为基类。有ShowWindow' andDoModal`。
标签: winforms visual-c++