바람이 머문 언덕

MoveWindow 함수를 이용한 윈도우 이동 예제 본문

컴퓨터 IT/C++ 언어

MoveWindow 함수를 이용한 윈도우 이동 예제

알 수 없는 사용자 2010. 1. 12. 07:30
반응형

기본적으로 제공해주는 창태 창을 이용해서 윈도우를 이동 시키면 편하지만 상태 창을 위도우에 넣지 않고 윈도우를
만들어야 할 때가 있다.

그 때 윈도우를 이동 시키려고 하면
 MoveWindow라는 api 함수를 이용해야 한다.
MoveWindow 함수 사용을 좀 더 편하게 하기 위해서 앞에서 만든 클래스를  이용해서 예제를 만들었다.

실행 파일과 소스는 아래에 첨부 했고 여기서는 간단한 이용 예만 적어 보았습니다.


#include <windows.h>

 class movewindow 
 {
    public:
       movewindow();
       ~movewindow();
       void bottonup();
       void move(int x,int y);
       void bottondown(int x, int y,HWND h);
    private:
      bool ifla;
      HWND hwnd;
      int poxy, poxx;
 };


    movewindow::movewindow()
 {
       hwnd=NULL;
       ifla=FALSE;
 }

    movewindow::~movewindow()
 {

 }

    void movewindow::bottondown(int x, int y,HWND h)
 {
      if(!ifla)
      {
           hwnd=h;
           poxx=x; poxy=y;
          SetCapture(hwnd);//MOUSE 메세지를 캡쳐한 윈도우에서만 받을 수 있다.
          ifla=TRUE;
     }
 }

    void movewindow::bottonup()
 {
        ifla=FALSE;
        ReleaseCapture(); //MOUSE 캡쳐 해제
 }

    void movewindow::move(int x,int y)
 {
       if(ifla)
      {
          static RECT rect;
          x-=poxx;
          y-=poxy;
          GetWindowRect(hwnd,&rect);//윈도우 전체 좌표를 구한다.
         x+ = rect.left;
         y+ = rect.top;
         MoveWindow(hwnd, x, y, rect.right-rect.left, rect.bottom-rect.top, TRUE);   //윈도우 이동
   }
 }

MFC에서 사용 예)

movewindow move;

void CDvilkinDlg::OnLButtonDown(UINT nFlags, CPoint point)

       // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
 
      move.bottondown(point.x, point.y, this->m_hWnd); // 윈도우의 핸들과 기준 점을 전달
      CDialog::OnLButtonDown(nFlags, point);
}

void CDvilkinDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
     // TODO: 여기에 메시지 처리기 코드를 추가 및 또는 기본값을 호출합니다.

    move.bottonup();    //  윈도우 이동을 해제
   CDialog::OnLButtonUp(nFlags, point);
}

void CDvilkinDlg::OnMouseMove(UINT nFlags, CPoint point)
{
     // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.

    move.move(point.x, point.y);  // 마우스 커스의 위치 전달
   CDialog::OnMouseMove(nFlags, point); 
}

                                                            아래 파일로 동작을 확인해 보세요. ^^ 

Dvilkin.exe

Dvilkin.zip