0

我在网上搜索了很多,但找不到我想要的东西!
假设我有一个派生自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 extentselect等等)时,我希望OnMouseMove事件处理程序以这样的方式处于非活动状态,即使我在 opengl 窗口上Maya-style mouse也不会处于活动状态?无论是 in还是 in ,
我怎样才能实现这样的事情?my customized COpenGLControl classMy 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吗?

4

1 回答 1

1

向类添加一个状态/模式成员变量,并为每个“模式”添加一个专用的处理函数。您使用模式变量来决定事件处理程序,您从事件处理程序调用哪个模式相关的处理程序,并传递所有参数。

于 2013-08-25T14:36:32.090 回答