获取鼠标选中的文件可以使用DragQueryFile函数,该函数可以获取拖放操作中的文件路径。下面是一个示例代码:

#include <Windows.h>

// 定义一个回调函数,用于处理拖放操作
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
    case WM_DROPFILES:
        {
            // 获取拖放操作中的第一个文件路径
            HDROP hDrop = (HDROP)wParam;
            TCHAR szFilePath[MAX_PATH];
            DragQueryFile(hDrop, 0, szFilePath, MAX_PATH);

            // 判断文件类型
            DWORD dwAttr = GetFileAttributes(szFilePath);
            if (dwAttr != INVALID_FILE_ATTRIBUTES)
            {
                if (dwAttr & FILE_ATTRIBUTE_DIRECTORY)
                {
                    // 文件夹
                }
                else
                {
                    // 文件
                    // 获取文件扩展名
                    TCHAR szExt[MAX_PATH];
                    _tsplitpath_s(szFilePath, NULL, 0, NULL, 0, NULL, 0, szExt, MAX_PATH);
                    if (_tcsicmp(szExt, _T(".txt")) == 0)
                    {
                        // 文本文件
                    }
                    else if (_tcsicmp(szExt, _T(".jpg")) == 0 || _tcsicmp(szExt, _T(".png")) == 0)
                    {
                        // 图片文件
                    }
                    else
                    {
                        // 其他文件类型
                    }
                }
            }

            // 释放句柄
            DragFinish(hDrop);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 注册窗口类
    WNDCLASSEX wc = { sizeof(WNDCLASSEX) };
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.lpszClassName = _T("MyWindowClass");
    RegisterClassEx(&wc);

    // 创建窗口
    HWND hwnd = CreateWindowEx(0, _T("MyWindowClass"), _T("My Window"), WS_OVERLAPPEDWINDOW, 100, 100, 400, 300, NULL, NULL, hInstance, NULL);
    if (hwnd == NULL)
    {
        return 0;
    }

    // 启用拖放操作
    DragAcceptFiles(hwnd, TRUE);

    // 显示窗口
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // 消息循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return (int)msg.wParam;
}

上述代码中,我们在窗口回调函数中处理了拖放操作,使用DragQueryFile函数获取了拖放操作中的文件路径,并使用GetFileAttributes函数判断文件类型。如果是文件夹,则只需打开文件夹即可,如果是文件,则需要根据文件扩展名判断文件类型

c++使用win api 获取鼠标选中的文件以及判断文件的类型

原文地址: https://www.cveoy.top/t/topic/g7G7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录