안녕하세요. 천리안 프로그래머 포럼 C++Builder 담당자 임펠리테리입니다.
상식적으로 가만히 생각해보시면 알수 있으실 텐데.. ^^
OnMouseDown에서 처리하셨겠죠? 그럼 X, Y 위치가 파라미터로 전달되잖나요~
그럼 이 X, Y 위치를 기준으로 판단하면 되죠. 제 소스를 예제로 보여드리죠.
(저는 델파이가 아닌 빌더를 사용해서 씨 코딩입니다만, 금방 알아보실겁니다.)
void __fastcall TForm1::Panel1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TControl *SenderControl = dynamic_cast<TControl *>(Sender);
int SysCommLparam;
if(X < 4 && Y < 4)
SysCommLparam = SC_DRAGRESIZEUL;
else if(X > SenderControl->Width-4 && Y > SenderControl->Height-4)
SysCommLparam = SC_DRAGRESIZEDR;
else if(X < 4 && Y > SenderControl->Height-4)
SysCommLparam = SC_DRAGRESIZEDL;
else if(X > SenderControl->Width-4 && Y < 4)
SysCommLparam = SC_DRAGRESIZEUR;
else if(X < 4)
SysCommLparam = SC_DRAGRESIZEL;
else if(X > SenderControl->Width-4)
SysCommLparam = SC_DRAGRESIZER;
else if(Y < 4)
SysCommLparam = SC_DRAGRESIZEU;
else if(Y > SenderControl->Height-4)
SysCommLparam = SC_DRAGRESIZED;
else
SysCommLparam = SC_DRAGMOVE;
ReleaseCapture();
SendMessage(Panel1->Handle, WM_SYSCOMMAND, SysCommLparam, 0);
}
대충 어떻게 되는 건지 알아보시리라 믿습니다.
참고로...
마우스 커서도 바뀌어주어야 되겠죠? 이건 당근 OnMouseMove 핸들러에서 하면
되겠죠? ^^
void __fastcall TForm1::Panel1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
TControl *SenderControl = dynamic_cast<TControl *>(Sender);
if((X < 4 && Y < 4) :: (X > SenderControl->Width-4 && Y > SenderControl->Height-4))
SenderControl->Cursor = crSizeNWSE;
else if((X < 4 && Y > SenderControl->Height-4) :: (X > SenderControl->Width-4 && Y < 4))
SenderControl->Cursor = crSizeNESW;
else if(X < 4 :: X > SenderControl->Width-4)
SenderControl->Cursor = crSizeWE;
else if(Y < 4 :: Y > SenderControl->Height-4)
SenderControl->Cursor = crSizeNS;
else
SenderControl->Cursor = crDefault;
}
정의된 매크로 값들은 이미 저번 답변에서 말씀드렸으니 그걸 참고 하시면 되겠구..
그럼 존 코딩하세요~ ^^
독립문에서 임펠리테리였습니다.
(cbuilder, cbuilder@thrunet.com)
|