Win32窗体实现接受拖拽文件,检测鼠标拖拽操作,检测鼠标滚轮操作

使窗体能够接受文件拖拽

c 复制代码
DragAcceptFiles(hwnd, TRUE);

文件拖拽在win32窗体过程函数中对WM_DROPFILES消息进行处理

c 复制代码
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
    case WM_DROPFILES:
        {
            HDROP hDrop = (HDROP)wParam;

            // 获取拖拽的文件数量
            UINT count = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);

            // 逐个处理拖拽的文件
            for (UINT i = 0; i < count; i++)
            {
                // 获取文件名长度
                UINT len = DragQueryFile(hDrop, i, NULL, 0) + 1;

                // 获取文件名
                LPSTR filename = new char[len];
                DragQueryFile(hDrop, i, filename, len);

                // 处理文件,这里可以根据需要进行操作
                std::cout<<filename;//简单的输出文件名
                delete[] filename;
            }

            // 释放拖拽句柄
            DragFinish(hDrop);
            break;
        }
	case WM_PAINT:
		{
			PAINTSTRUCT ps;
			HDC hdc = BeginPaint(hwnd, &ps);

			// All painting occurs here, between BeginPaint and EndPaint.

			FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));

			EndPaint(hwnd, &ps);
		}
		return 0;

	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

窗体内鼠标拖拽操作

c 复制代码
POINT g_ptMouseDown 
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

case WM_LBUTTONDOWN:
{
    // 鼠标左键按下,开始拖拽
    SetCapture(hwnd);
    // 获取鼠标当前位置
    POINT pt;
    GetCursorPos(&pt);
    // 将鼠标位置转换为窗口内的坐标
    ScreenToClient(hwnd, &pt);
    // 存储鼠标按下时的起始位置
    // 这个起始位置将用于计算鼠标的偏移量
    g_ptMouseDown = pt;
    break;
}
case WM_MOUSEMOVE:
{
    if (GetCapture() == hwnd)
    {
        // 鼠标正在拖拽中
        // 获取鼠标当前位置
        POINT pt;
        GetCursorPos(&pt);
        // 将鼠标位置转换为窗口内的坐标
        ScreenToClient(hwnd, &pt);
        // 计算鼠标的偏移量
        int deltaX = pt.x - g_ptMouseDown.x;
        int deltaY = pt.y - g_ptMouseDown.y;
        // TODO: 根据鼠标偏移量进行相应的处理
        std::cout<<"offset "<<deltaX<<" "<<deltaY<<"\n";
    }
    break;
}
case WM_LBUTTONUP:
{
    // 鼠标左键释放,结束拖拽
    ReleaseCapture();
    break;
}

显示滚轮滚动操作

c 复制代码
    case WM_MOUSEWHEEL:
        {
            // 获取滚轮旋转的距离
            //使用GET_WHEEL_DELTA_WPARAM宏来获取滚轮旋转的距离。wParam参数包含滚轮的操作信息。WHEEL_DELTA是一个常量,表示滚轮每次旋转的距离
            short distance = GET_WHEEL_DELTA_WPARAM(wParam) / WHEEL_DELTA;
            // TODO: 根据滚轮的距离进行相应的处理
            std::cout<<" distance:"<<distance<<"\n";
            break;
        }
相关推荐
忆~遂愿1 天前
免密连接+快捷键+虚拟鼠标:ToDesk远程操作AI效率拉满
人工智能·python·深度学习·神经网络·自然语言处理·计算机外设·安全架构
硅基手札1 天前
【串口技术系列文档 07】UART控制器寄存器详解
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
硅基手札1 天前
【串口技术系列文档 09】FIFO管理与流控
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
硅基手札1 天前
【串口技术系列文档 08】中断驱动vs轮询vs DMA
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
承渊政道1 天前
鸿蒙设备远控电脑实测:ToDesk蓝牙键鼠、双模式鼠标、跨端剪贴板,远控电脑更顺手了
计算机外设·电脑·harmonyos·远程工作·todesk
ji_shuke2 天前
使用 Canvas 和 mix-blend-mode 实现跟随鼠标的反色圆圈
microsoft·计算机外设·canvas
硅基手札2 天前
【串口技术系列文档 04】UART协议深度解析
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
开开心心_Every2 天前
电脑OCR识别软件支持表格识别图片转Excel
java·开发语言·微信·计算机外设·ocr·intellij-idea·excel
野蛮人6号4 天前
macbook连上外接显示器后,字体变小,如何设置成像原来本机的界面一样呢?
计算机外设
打工仔折腾 AI4 天前
从零写一个CAD 05:以鼠标为中心的滚轮缩放,招法能复用但顺序不能反
开发语言·后端·python·性能优化·计算机外设·swift·ai agent 实战