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;
        }
相关推荐
TESmart碲视1 小时前
Mac+PC双系统如何共享双屏?KVM切换器选购的5个关键指标|TESmart用户真实体验复盘
macos·计算机外设·kvm切换器·tesmart·双屏kvm切换器·碲视
春日见4 小时前
车载系统中的CPU与内存监管
java·开发语言·驱动开发·docker·计算机外设
深念Y19 小时前
鼠标键盘按键失灵维修 微动和滚轮
计算机外设·键盘·鼠标·电子·维修·电子维修·
一味做笔记1 天前
蓝星键盘优化进度v1
计算机外设
卢锡荣1 天前
LDR6500|超小封装 Type‑C DRP PD 控制芯片:边充边传,一芯极简,全能适配
开发语言·网络·人工智能·计算机外设·电脑
卢锡荣2 天前
LDR6021Q 车规级 Type‑C PD 控制芯片:一芯赋能,边充边传,稳驭全场景
c语言·开发语言·ios·计算机外设·电脑
高旭的旭2 天前
Ubuntu 无显示器远程桌面完美方案
linux·ubuntu·计算机外设
BugShare2 天前
macOS的Dock栏怎么像Win一样鼠标悬浮时预览快速选择
macos·计算机外设
一念春风2 天前
鼠标/按键录制回放(解放双手)
计算机外设
小江的记录本2 天前
【MacOS】MacBook Pro 键盘全解析 + macOS 快捷键大全
java·经验分享·学习·macos·计算机外设·键盘·敏捷开发