15,979
社区成员
发帖
与我相关
我的任务
分享
WNDPROC oldproc;
LRESULT CALLBACK newproc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static BOOL flag;
static RECT rc;
static POINT p1,p2; //p1=左上点,p2=鼠标点
switch(message)
{
case WM_LBUTTONDOWN:
SetCapture(hWnd);
flag=true;
GetWindowRect(hWnd,&rc);//获取控件相对屏幕的位置
p1.x=rc.left;
p1.y=rc.top;
ScreenToClient(GetParent(hWnd),&p1);//坐标变换
p2.x=LOWORD(lParam);
p2.y=HIWORD(lParam);
break;
case WM_MOUSEMOVE:
int x,y;
x=(short)LOWORD(lParam)-p2.x;
y=(short)HIWORD(lParam)-p2.y;
if(flag) MoveWindow(hWnd,p1.x,p1.y,max(rc.right-rc.left+x,3),max(rc.bottom-rc.top+y,3),true);
break;
case WM_LBUTTONUP:
ReleaseCapture();
flag=0;
break;
}
return CallWindowProc(oldproc,hWnd,message,wParam,lParam);
}
case WM_CREATE:
hwdst=CreateWindowA("static","sample",WS_CHILD|WS_VISIBLE|SS_NOTIFY,10,10,80,35,hWnd,HMENU(1000),hInst,0);
oldproc=(WNDPROC)SetWindowLong(hwdst,GWL_WNDPROC,(LONG)newproc);
break;