|
자답입니다.
Window Caption을 그대로 두고는 잘 모르겠구요
( 누구 아는 사람있으면 좀 가르쳐 주세요)
그냥 Panel의 Mose이벤트와 ClipCursor를 이용해서 만들면 되네요
MouseDown 이벤트에서 ClipCursor로 Mouse의 움직일수 있는 영역을 정해주고
MouseMove일때 Down이벤트와 Mose이벤트에서의 좌표계산해서 Form의 Left/Top을 조정해주고
MouseUp일때 ClipCursor을 풀어주고
그렇게 해결했습니다.
TPoint cur;
TPoint oPt;
void __fastcall TDLG_MAP_STATUS::Panel1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TRect rc=Rect(100,100,1200,1000); //폼이 움직일수 있는 영역
GetCursorPos(&cur);
int w=cur.x-this->Left;
int h=cur.y-this->Top;
rc=Rect(rc.left+w,rc.top+h,rc.right-Width+w,rc.bottom-Height+h); // Mouse 좌표 보정
ClipCursor(&rc); //마우스 움직이는 영역 제한
oPt.x=X;
oPt.y=Y;
}
//---------------------------------------------------------------------------
void __fastcall TDLG_MAP_STATUS::Panel1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
if(Shift.Contains(ssLeft))
{
this->Left=this->Left+X-oPt.x;
this->Top=this->Top+Y-oPt.y; //마우스가 움직인 만큼 폼을 움직여줌
}
}
//---------------------------------------------------------------------------
void __fastcall TDLG_MAP_STATUS::Panel1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
ClipCursor(NULL); // 마우스 제한 영역을 풀어줌
}
//---------------------------------------------------------------------------
그럼....
장성호 님이 쓰신 글 :
: 안녕하세요
: 장성호입니다.
:
: TForm을 비롯한 윈도우를
: 특정영역 TRect 안에서만 움직이게 할수 있나요?
:
: Size 제한이 아니라 움직이는 영역 제한입니다.
:
: 그냥 Mouse 움직이는 영역 제한은 ClipCursor로 되던데...
:
: ClipCursor로 마우스 영역을 설정해도 window의 caption을 잡으면 소용이 없더군요
:
: WM_MOVE . WM_MOVING , WM_WINDOWPOSCHANGING , ....
:
: 웬만한것은 다 잡아 봤는데 안되네요
:
: ...
:
: 마우스 후킹말고 가능한 방법요..
|