【发布时间】:2013-08-26 08:48:23
【问题描述】:
假设我有 the COpenGLControl class derived from CWnd,并且我正在为自己的目的对其进行自定义。
我想做这样的事情:
1- 在我的对话框顶部添加一个缩放工具工具栏按钮。
2- 按下提到的工具栏按钮后,下面解释的功能将启用。
3- 如果用户单击鼠标左键,我们将放大两倍并 glTranslate 到用户单击的位置。
4-如果用户单击鼠标右键,我们将缩小 0.5 倍并 glTranslate 到用户单击的位置。
5-如果用户单击另一个工具栏按钮,上述两个步骤中说明的功能将被禁用。
你知道我想在Global Mapper 中实现类似Zoom Tool 的东西。
我在实现glScale 或glTranslate 时没有问题。
只是 MFC 部分有问题。
搜索默认消息处理程序,我发现我们有 WM_LBUTTONDBLCLK,WM_LBUTTONDOWN,WM_LBUTTONUP,WM_RBUTTONDBLCLK,WM_RBUTTONDOWN,WM_RBUTTONUP 但不是 WM_LBUTTONCLK 或 WM_RBUTTONCLK?
即使我们有WM_LBUTTONCLK 或WM_RBUTTONCLK,这些事件处理程序也会在创建窗口后一直启用并处于活动状态,直到关闭它,但我希望它们仅在特定时间处于活动状态(在单击缩放工具之后和之前单击另一个工具)
我从here 知道,也许我需要在用户定义的消息处理程序中实现这些功能,但我不知道,因为我是 MFC 的新手。
你能帮我给出真正的想法吗?
【问题讨论】:
-
在您提供的link 中没有提到“用户定义的”消息处理程序。只需实现一个ON_LBUTTONDOWN 处理程序并在处理程序中根据您的软件状态决定您要做什么。
-
ok @Michael Walz 在发布问题后,我实现了 ON_LBUTTONDOWN 处理程序。它按我的预期工作。但问题是这个处理程序始终处于活动状态,每当我进入 opengl 窗口并左键单击 glScale 并运行 glTranslate 时。但我告诉过,我希望处理程序在某个时间处于活动状态(在单击对话框顶部的
zoom tool工具栏按钮之后以及在单击其他工具栏按钮之前)。事实上,我问过如何让鼠标事件处理程序在特定时间处于活动状态?我不知道! -
或者我怎样才能让鼠标 WM_LBUTTONDOWN 消息只在特定时间发送?
-
不知道是否需要实现用户自定义的消息处理程序,然后在我的程序的某些部分发送相应的消息?
-
请帮我提供任何合适的想法如何使默认的 MFC CWnd 事件处理程序在特定时间处于活动状态或如何实现用户定义的事件处理程序以在特定时间捕获相应的消息?
标签: visual-studio-2010 mfc event-handling mouseevent mouseclick-event