窗口随鼠标移动

窗口随着鼠标移动。

一、窗口鼠标动作的三个相关事件:

   MouseDown

   MouseUp

   MouseMove

  这三个事件与鼠标相关联,可以通过窗口事件双击建立或通过MouseEventHandler函数建立关联。

 

           MouseDown += new MouseEventHandler(Form1_MouseDown);
           MouseUp += new MouseEventHandler(Form1_MouseUp);
           MouseMove += new MouseEventHandler(Form1_MouseMove);

二、标记用户是否点下鼠标

    mouseDown 。

三、记住用户按下鼠标时的窗口位置。

 

Point oldPoint ;// 原来的学的语言中都没此类型。

oldPoint = new Point(0,0);

 

四、处理各个事件。

   MouseDown 事件,设置mouseDown为true,记录窗口位置。oldPoint = e.localtion;

   MouseUp 事件,设置mouseDown为false。

   MouseMove Event  :

 

 

if (mouseDown)
            {
                this.Left += (e.X - oldPoint.X);
                this.Top += (e.Y - oldPoint.Y);
            }

要让Win32窗口鼠标移动,你需要在窗口过程函数中处理WM_MOUSEMOVE消息。具体步骤如下: 1. 在窗口过程函数中,处理WM_MOUSEMOVE消息。在此消息处理函数中,获取鼠标当前位置,然后将窗口移动到该位置。 2. 窗口移动时,需要调用MoveWindow函数来实现。MoveWindow函数的参数包括窗口句柄、新位置的左上角坐标、窗口的宽度和高度。 下面是一个示例代码: ``` LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static int cxClient, cyClient; // 窗口的客户区大小 static int xMouse, yMouse; // 鼠标的当前位置 static int xWindow, yWindow; // 窗口的左上角坐标 switch(uMsg) { case WM_CREATE: // 窗口创建时初始化坐标 xWindow = 0; yWindow = 0; return 0; case WM_SIZE: // 窗口大小改变时更新客户区大小 cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); return 0; case WM_MOUSEMOVE: // 鼠标移动移动窗口 xMouse = LOWORD(lParam); yMouse = HIWORD(lParam); xWindow = xMouse; yWindow = yMouse; MoveWindow(hwnd, xWindow, yWindow, cxClient, cyClient, TRUE); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } } ``` 在上面的代码中,当收到WM_MOUSEMOVE消息时,会将窗口移动鼠标当前位置。每次移动窗口时,都需要重新计算窗口的左上角坐标。如果不想让窗口移动过程中闪烁,可以将MoveWindow函数的最后一个参数设置为TRUE。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值