私はウェブをたくさん検索しましたが、私が欲しいものを正確に見つけることができませんでした!
から派生したクラスがあるとし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
およびという名前のダイアログに 3 つのボタンを配置しますzoom
。
クリックすると中央のボタンだけがアクティブになり、
クリックすると中央のボタンが非アクティブになり、クリックすると左のボタンがアクティブ
になり、左のボタンが非アクティブになり、右のボタンがアクティブになりますpan
。そして最後に、など
の別のボタンをクリックすると、openglウィンドウを使用していてもアクティブにならないようにイベントハンドラーを非アクティブにしたいですか? 内でも内でも、
このようなものをどのように実装できますか?OnMouseMove
rotate
zoom
Zoom extent
select
OnMouseMove
Maya-style mouse
my customized COpenGLControl class
My MFC dialog
詳細を調べるために検索を開始するための指示をいくつか教えてください。
-------------------------------------------------- ----------------------------------------質問の一部を編集
しました追加も考えましたCOpenGLControl クラスOnDraw
の関数と同じように、手動でクラスにイベント ハンドラーを追加したので、次のようにしました。
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
か?