2013-08-25 73 views
0

我在網上搜索了很多,但找不到我想要的!
假設我有一個來自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); 
} 

但我不希望這個事件處理程序,在任何時候都activeenabled。我想在名爲panrotatezoom的對話框中放上三個按鈕。
當我點擊pan我想OnMouseMove活躍起來只是中間的按鈕
當我點擊rotate我想中間的按鈕獲取無效和左鍵活躍起來
當我點擊zoom我想左鍵獲取無效,右一個得到積極所以。
最後當我點擊另一個按鈕像Zoom extent,select等,我希望OnMouseMove事件處理程序處於非活動狀態,即使我在opengl窗口Maya-style mouse不會被激活?
如何在my customized COpenGLControl classMy 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

回答

1

向類中添加一個state/mode成員變量,併爲每個「mode」添加一個專用處理函數。事件處理程序使用模式變量來決定從事件處理程序中調用哪些模式相關處理程序,並傳遞所有參數。

+0

我的意思是上述代碼的處理程序總是處於活動狀態(無論何時在opengl窗口中)我是否可以使其處於非活動狀態? – sepideh

+0

我也想過爲這個類手動添加一個事件處理程序。如果您有興趣,請參閱我的問題的編輯部分。 – sepideh

+0

謝謝@datenwolf你能解釋一下你的答案嗎? – sepideh

相關問題