|
ilys4 님이 쓰신 글 :
: 하나의 폼이 있습니다. 그 안에 컴포넌트들이 있구요.
: 그중 하나는 opengl 화면으로 마우스로 내용을 조작하는겁니다.
:
: 마우스 up, down, move 이벤트를 사용하는데,
: 그 패널에 연관 시키면 커서가 패널밖으로 넘어가면 (당연히) up, down, move 가 듣질 않으니 제대로 작동을 안합니다.
: 그래서 패널 전체에 대해 이벤트를 걸고자 form 에다가 걸었더니
: 이번엔 폼의 보이는 부분에대해서만 작동을 하고 컴포넌트 위에서는 작동을 안합니다.
:
: 이거 어떻게 해야하나요?
: 간단한 힌트만이라도 주시면 찾아서 해보겠습니다.
: 왠지 간단하게 해결할 수 있을 것 같은데, 검색해봐도 뭘 해야하는지 모르겠네요.
:
: 답변 부탁드립니다.
OpenGL화면을 쓰신다면 GL화면에서 마우스를 누르고 드래그하면 스크롤이나 줌이 되는 이런기능일듯 한데요..맞는지... 이건 GL컴포넌트에서의 마우스 처리이벤트만으로 충분히 해결이 됩니다.
Down, Up, Move 이벤트에 버튼상태와 기능을 표시하는 Bool변수를 몇개 조합하시면 될거라고 봅니다.
void __fastcall TViewer::ViewMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TPoint point = TPoint(X,Y);
m_ptPrev = point;
if(Button == mbLeft) MouseLBtnDown = true;
.................
}
void __fastcall TViewer::ViewMouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Button == mbLeft) MouseLBtnDown = false;
....................
}
void __fastcall TViewer::ViewMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
TPoint point = TPoint(X,Y);
MouseCurPos = point;
if(Shift.Contains(ssLeft)) /// 좌측버튼인가?
{
FullModeDraw = false; // 전체를 다 그릴려면 부하가 많으니까 Move동안은 1/4 수준만 그린다
if(m_MouseMode == MOUSEMODE_ZOOM)
//현재 기능 선택에 따라서 여러가지 처리
...................
}
}
|