바람이 머문 언덕

일반창에서 상태바에서처럼 윈도우 움직이기 본문

컴퓨터 IT/C++ 언어

일반창에서 상태바에서처럼 윈도우 움직이기

알 수 없는 사용자 2009. 11. 25. 18:00
반응형
윈도우 창태바가 없는 윈도우에서 윈도우를 이동 시키기 위해서 api 함수를 이용해서 만든 클레스 입니다.

#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);   //윈도우 이동
   }
 }


윈도우 api 함수를 이용한 예입니다.

movewindow  move;

bool NDlgmemo::NMassege(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
     PAINTSTRUCT ps;
     switch(msg)
    { 
          case WM_PAINT: BeginPaint(hwnd,&ps); paint(ps.hdc); EndPaint(hwnd,&ps);    return 1;
          case WM_LBUTTONDOWN:
                       move.bottondown(LOWORD(lParam),HIWORD(lParam), hwnd);  return 1;
          case WM_LBUTTONUP: move.bottonup();                          return 1;
          case WM_MOUSEMOVE: move.move(LOWORD(lParam),HIWORD(lParam)); return 1;
    }
    return 0;
}