2013-08-25 2 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); 
} 

그러나 나는이 이벤트 핸들러는 항상 active 또는 enabled되고 싶지 않아. 내 대화 상자에 pan, rotatezoom이라는 세 개의 버튼을 넣고 싶습니다.
나는 가운데 버튼이 비활성화 및 왼쪽 버튼이 활성화 얻을 수 원하는 rotate을 클릭하면 내가 OnMouseMove 단지 가운데 버튼
활성 얻을 원하는 pan을 클릭
내가 왼쪽 버튼이 비활성화 및 올바른 활성화 얻을 수 원하는 zoom을 클릭하고 그래서.
그리고 마지막으로 Zoom extent, select 등의 다른 단추를 클릭하면 OnMouseMove 이벤트 처리기가 OpenGL 창에 있어도 비활성 상태가되도록하고 싶습니다. Maya-style mouse은 활성화되지 않습니까?
my customized COpenGLControl class 또는 My MFC dialog에 있는지 어떻게 구현할 수 있습니까?
자세한 내용을 보려면 검색을 시작하기 위해 몇 가지 지침을 제공하십시오.


------------------------------------------- ----------------------------------------------- 수정 된 부분

OpenGLContro.h

afx_msg void Pan(UINT nFlags, CPoint point); 
0,123,516 : 내 질문의

나는 또한 COpenGLControl class 그래서 이런 짓을에 바로 OnDraw 기능처럼 내 클래스에 수동으로 이벤트 처리기를 추가하는 방법에 대한 생각

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

상태/모드 멤버 변수를 클래스에 추가하고 각 "모드"마다 전용 처리기 함수를 추가합니다. 이벤트 처리기는 모드 변수를 사용하여 이벤트 핸들러에서 호출하는 모드 종속 핸들러 중 어떤 매개 변수를 전달 할지를 결정합니다.

+0

위의 코드를 가진 핸들러가 항상 활성화되어 있다는 것을 의미합니다 (사용자가 OpenGL 윈도우에있을 때마다). 가끔 비활성화 할 수 있습니까? – sepideh

+0

클래스에 수동으로 이벤트 처리기를 추가하는 방법에 대해서도 생각했습니다. 관심이 있으시면 편집 한 부분을 참조하십시오. – sepideh

+0

감사합니다 @datenwolf 당신이 대답 alittle 더 설명 할 수 있습니까? – sepideh

관련 문제