바람이 머문 언덕
일반창에서 상태바에서처럼 윈도우 움직이기 본문
#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;
}