我在网上搜索了很多,但找不到我想要的东西!
假设我有一个派生自CWnd
. 其实就是我自己为自己的目的定制的codeguru中的COpenGLControl类。
按钮的事件处理程序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
也不会处于活动状态?无论是 in还是 in ,
我怎样才能实现这样的事情?my customized COpenGLControl class
My MFC dialog
请给我一些指示以开始我的搜索以了解更多信息。
-------------------------------------------------- ----------------------------------------编辑了我的问题的一部分
我也考虑过添加一个事件处理程序手动到我的类,就像COpenGLControl 类OnDraw
中的函数一样,所以做了这样的事情:
OpenGL控制.h
afx_msg void Pan(UINT nFlags, CPoint point);
OpenGL控制.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
吗?