C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[50124] Re:윈도우를 특정 영역안에서만 움직이게 만들기 - 자답
장성호 [nasilso] 1770 읽음    2007-07-30 17:00
자답입니다.

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 , ....
:
: 웬만한것은 다 잡아 봤는데 안되네요
:
: ...
:
: 마우스 후킹말고  가능한 방법요..

+ -

관련 글 리스트
50123 윈도우를 특정 영역안에서만 움직이게 만들기 장성호 1164 2007/07/30
50124     Re:윈도우를 특정 영역안에서만 움직이게 만들기 - 자답 장성호 1770 2007/07/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.