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しかし、私はこのイベント ハンドラーを常にまたは常ににしたくありませんenabledpanrotateおよびという名前のダイアログに 3 つのボタンを配置しますzoom
クリックすると中央のボタンだけがアクティブになり、 クリックすると中央のボタンが非アクティブになり、クリックすると左のボタンがアクティブ になり、左のボタンが非アクティブになり、右のボタンがアクティブになりますpan。そして最後に、など の別のボタンをクリックすると、openglウィンドウを使用していてもアクティブにならないようにイベントハンドラーを非アクティブにしたいですか? 内でも内でも、 このようなものをどのように実装できますか?OnMouseMove
rotate
zoom
Zoom extentselectOnMouseMoveMaya-style mouse
my customized COpenGLControl classMy 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か?

4

1 に答える 1

1

状態/モード メンバー変数をクラスに追加し、「モード」ごとに専用のハンドラー関数を追加します。モード変数を使用してイベント ハンドラーを決定し、イベント ハンドラーから呼び出すモード依存ハンドラーを決定し、すべてのパラメーターを渡します。

于 2013-08-25T14:36:32.090 に答える