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