【发布时间】:2012-03-19 20:26:15
【问题描述】:
我有控制,从 CDialogBar 子类化,它有一些按钮(如工具栏上)。当我在 CDialogBar 类中捕获 WM_LBUTTONDOWN 时,是否可以通过一种简单的方法来了解是否在控件上的某个按钮上单击了鼠标?
【问题讨论】:
标签: winapi user-interface mfc mouseevent coordinates
我有控制,从 CDialogBar 子类化,它有一些按钮(如工具栏上)。当我在 CDialogBar 类中捕获 WM_LBUTTONDOWN 时,是否可以通过一种简单的方法来了解是否在控件上的某个按钮上单击了鼠标?
【问题讨论】:
标签: winapi user-interface mfc mouseevent coordinates
CDialogBar 类通常承载常规窗口控件,因此当在那里单击按钮时,WM_LBUTTONDOWN 消息将发送到此控件窗口,而不是对话框窗口类。所以如果你想拦截这些消息(如果你真的这样做的话),你需要子类化窗口并处理它们的消息,或者安装一个消息挂钩。
您还可以使用Spy++ 工具查看哪些消息有效地到达了您感兴趣的CDialogBar 窗口,看看处理它们是否可以解决您的挑战。
【讨论】:
WndProc 时,您绝对可以覆盖它们的行为,并且您可以转发消息或自己处理。按钮由对话框栏托管在这里甚至无关紧要 - 重要的是通过子类化您拦截消息处理。
SendMessage(或 PostMessage 以便它通过消息队列到达你的 PreTranslateMessage)它到你的CDialogBar。据你说,你已经拥有了一切。