我在网上搜索了很多,但找不到我想要的!
假设我有一个来自CWnd
的类。事实上,这是我为我自己的目的而定制的课程COpenGLControl here in codeguru。
为WM_MOUSEMOVE
按钮事件处理程序编写如下:如何在MFC中启用或禁用事件处理程序?
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
中执行这样的操作?
请给我一些指示,开始我的搜索找出更多。
------------------------------------------- ----------------------------------------------- 已编辑部分我的问题的
我也想过手动添加一个事件处理程序上我的课就像OnDraw
功能在COpenGLControl class这样做了这样的事情:
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
?
我的意思是上述代码的处理程序总是处于活动状态(无论何时在opengl窗口中)我是否可以使其处于非活动状态? – sepideh
我也想过为这个类手动添加一个事件处理程序。如果您有兴趣,请参阅我的问题的编辑部分。 – sepideh
谢谢@datenwolf你能解释一下你的答案吗? – sepideh