웹을 많이 검색했지만 원하는 것을 정확히 찾을 수 없습니다.
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
이라는 세 개의 버튼을 넣고 싶습니다.
나는 가운데 버튼이 비활성화 및 왼쪽 버튼이 활성화 얻을 수 원하는 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
?
위의 코드를 가진 핸들러가 항상 활성화되어 있다는 것을 의미합니다 (사용자가 OpenGL 윈도우에있을 때마다). 가끔 비활성화 할 수 있습니까? – sepideh
클래스에 수동으로 이벤트 처리기를 추가하는 방법에 대해서도 생각했습니다. 관심이 있으시면 편집 한 부분을 참조하십시오. – sepideh
감사합니다 @datenwolf 당신이 대답 alittle 더 설명 할 수 있습니까? – sepideh