以下是 ImageList_DragLeave 函数的基本信息:
BOOL ImageList_DragLeave(
HWND hwndLock
);
参数说明:
- hwndLock:在拖放期间,将在指定窗口的客户区内锁定鼠标。
该函数返回一个 BOOL 类型的值,如果成功,返回值为非零;如果失败,返回值为零。
在拖放操作中,ImageList_DragLeave 函数通常与 ImageList_DragEnter 和 ImageList_DragMove 一起使用,以实现图像的拖放。
以下是一个简单的示例代码,演示如何使用 ImageList_DragLeave 函数:
#include <windows.h>
#include <commctrl.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
static HIMAGELIST himlDrag; // 用于存储拖放的图像列表
switch (message) {
case WM_CREATE:
{
// 创建图像列表
HIMAGELIST himlSource = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 1, 0);
HICON hIcon = LoadIcon(GetModuleHandle(NULL), IDI_INFORMATION);
ImageList_AddIcon(himlSource, hIcon);
DestroyIcon(hIcon);
// 将图像列表设置为拖放源
ImageList_BeginDrag(himlSource, 0, 0, 0);
// 将图像列表保存到全局变量
himlDrag = himlSource;
}
return 0;
case WM_MOUSEMOVE:
{
// 随着鼠标移动,将拖放操作的起始点标记在客户区内
ImageList_DragEnter(hwnd, LOWORD(lParam), HIWORD(lParam));
// 更新拖放操作的位置
ImageList_DragMove(LOWORD(lParam), HIWORD(lParam));
}
return 0;
case WM_LBUTTONUP:
{
// 结束拖放操作
ImageList_EndDrag();
}
return 0;
case WM_DESTROY:
{
// 标记离开拖放目标
ImageList_DragLeave(hwnd);
// 释放拖放的图像列表
ImageList_Destroy(himlDrag);
PostQuitMessage(0);
}
return 0;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
}
int main() {
// 初始化 Common Controls
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_WIN95_CLASSES; // 或其他需要的标志
InitCommonControlsEx(&icex);
// 注册窗口类
WNDCLASS wc = { 0 };
wc.lpfnWndProc = WndProc;
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = L"ImageListDragExample";
RegisterClass(&wc);
// 创建窗口
HWND hwnd = CreateWindow(
L"ImageListDragExample", L"ImageList Drag Example",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, 400, 200,
NULL, NULL, GetModuleHandle(NULL), NULL
);
if (hwnd == NULL) {
MessageBox(NULL, L"Window creation failed!", L"Error", MB_ICONERROR);
return 1;
}
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
在这个例子中,当窗口销毁时,ImageList_DragLeave 函数用于标记离开拖放目标。最终,通过调用 ImageList_Destroy 函数释放拖放的图像列表。
转载请注明出处:http://www.zyzy.cn/article/detail/24676/Win32 API/Commctrl.h/ImageList_DragLeave