【发布时间】:2013-08-28 02:32:18
【问题描述】:
我在网上搜索了很多,但找不到我想要的东西!
假设我有一个派生自CWnd 的类。其实就是我为自己的目的定制的COpenGLControl here in codeguru类。WM_MOUSEMOVE 按钮的事件处理程序编写如下:
void COpenGLControl::OnMouseMove(UINT nFlags, CPoint point)
{
int diffX = (int)(point.x - m_fLastX);
int diffY = (int)(point.y - m_fLastY);
m_fLastX = (float)point.x;
m_fLastY = (float)point.y;
// Left mouse button
if (nFlags & MK_LBUTTON)
{
m_fRotX += (float)0.5f * diffY;
if ((m_fRotX > 360.0f) || (m_fRotX < -360.0f))
{
m_fRotX = 0.0f;
}
m_fRotY += (float)0.5f * diffX;
if ((m_fRotY > 360.0f) || (m_fRotY < -360.0f))
{
m_fRotY = 0.0f;
}
}
// Right mouse button
else if (nFlags & MK_RBUTTON)
{
m_fZoom -= (float)0.1f * diffY;
}
// Middle mouse button
else if (nFlags & MK_MBUTTON)
{
m_fPosX += (float)0.05f * diffX;
m_fPosY -= (float)0.05f * diffY;
}
OnDraw(NULL);
CWnd::OnMouseMove(nFlags, point);
}
但我不希望此事件处理程序始终为active 或enabled。我想在我的对话框上放置三个按钮,名为 pan、rotate 和 zoom。
当我点击 pan 我希望 OnMouseMove 只为中间按钮激活
当我单击rotate 时,我希望中间按钮处于非活动状态,而左按钮处于活动状态
当我单击zoom 时,我希望左按钮处于非活动状态,而右按钮处于活动状态等等。
最后,当我单击另一个按钮(如 Zoom extent、select 等)时,我希望 OnMouseMove 事件处理程序以这样的方式处于非活动状态,即使我在 opengl 窗口上 Maya-style mouse 也不会活跃吗?
无论是在my customized COpenGLControl class 还是My MFC dialog,我如何才能实现这样的功能?
请给我一些指示以开始我的搜索以了解更多信息。
----------------------------------- ------------------------------------------------------- 编辑了我的部分问题
我还考虑向我的类手动添加一个事件处理程序,就像COpenGLControl class 中的OnDraw 函数一样,所以做了这样的事情:
OpenGLContro.h
afx_msg void Pan(UINT nFlags, CPoint point);
OpenGLControl.cpp
void COpenGLControl::Pan(UINT nFlags, CPoint point)
{
int diffX = (int)(point.x - m_fLastX);
int diffY = (int)(point.y - m_fLastY);
if (nFlags & MK_MBUTTON)
{
m_fPosX += (float)0.05f * diffX;
m_fPosY -= (float)0.05f * diffY;
}
OnDraw(NULL);
}
每当单击按钮pan 时,我都会调用此函数,但我不在OpenGL Window 上,并且不知道将作为参数传递给函数Pan?
【问题讨论】:
标签: visual-studio-2010 mfc dialog event-handling