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;
        }
相关推荐
qq_12498707532 天前
基于Spring Boot的网上招聘服务系统(源码+论文+部署+安装)
java·spring boot·后端·spring·计算机外设
SomeOtherTime3 天前
计算机硬件相关(AI回答)
计算机外设
wan5555cn7 天前
Windows 11系统鼠标键盘被禁用问题的全面解决方案
windows·笔记·深度学习·计算机外设
无敌最俊朗@10 天前
Qt 按钮点击事件全链路解析:从系统驱动到槽函数
开发语言·qt·计算机外设
ulimate_11 天前
树莓派:微雪显示器7寸触摸屏使用
计算机外设
Saniffer_SH13 天前
【高清视频】CXL 2.0 over Fibre演示和答疑 - 将内存拉到服务器10米之外
运维·服务器·网络·人工智能·驱动开发·计算机外设·硬件工程
pc大老14 天前
iPhone 用户如何通过鼠标提升操作体验?
计算机外设·iphone·鼠标·鼠标连接iphone
理想是做个英雄15 天前
基于AC6351D2做无线键盘
计算机外设·杰理ble,mcu以及蓝牙音频
科技观察16 天前
刘诗雯现身TCL品牌活动,雷鸟34Q9显示器同台竞技
计算机外设