c++使用win api 获取鼠标选中的文件以及判断文件的类型
获取鼠标选中的文件可以使用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函数判断文件类型。如果是文件夹,则只需打开文件夹即可,如果是文件,则需要根据文件扩展名判断文件类型
原文地址: https://www.cveoy.top/t/topic/g7G7 著作权归作者所有。请勿转载和采集!