바람이 머문 언덕
MoveWindow 함수를 이용한 윈도우 이동 예제 본문
기본적으로 제공해주는 창태 창을 이용해서 윈도우를 이동 시키면 편하지만 상태 창을 위도우에 넣지 않고 윈도우를
만들어야 할 때가 있다.
그 때 윈도우를 이동 시키려고 하면 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 캡쳐 해제
}
{
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);
}