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;
        }
相关推荐
ZC跨境爬虫12 小时前
Playwright模拟鼠标滚轮实战:从原理到百度图片_豆瓣电影爬取
爬虫·python·计算机外设
sxjk19872 天前
每日一问-20260405--戴尔显示器型号命名速查表
计算机外设
chenqianghqu2 天前
win10远程桌面访问桌面版ubuntu22.04(无显示器)
计算机外设
深念Y2 天前
从显示器闪屏到宇宙熵增:一次跨越硬件、软件与哲学的思维漫游
计算机外设·元宇宙
ZC跨境爬虫3 天前
Playwright核心操作实战精讲(QQ空间+百度+iframe,含等待_键盘_iframe操作)
前端·爬虫·python·计算机外设
开开心心就好4 天前
免费好用:PPT演示计时提醒工具
windows·计算机视觉·计算机外设·逻辑回归·excel·深度优先·csdn开发云
春日见4 天前
TEST文件夹:Pytest,集成测试,单元测试
服务器·人工智能·驱动开发·单元测试·计算机外设·集成测试·pytest
春日见5 天前
.gitignore与LICENSE与.vscode文件夹与.git文件夹是干嘛的
人工智能·深度学习·计算机视觉·cnn·计算机外设
科技每日热闻5 天前
旗舰力作,焕新登场!EVNIA弈威天王星系列QD-OLED电竞显示器32M2N8900X新品重磅来袭
科技·游戏·计算机外设·生活
hoiii1875 天前
104键PS2接口标准键盘C语言驱动程序
c语言·fpga开发·计算机外设