以下是 ImageList_DragShowNolock 函数的基本信息:
BOOL ImageList_DragShowNolock(
BOOL fShow
);
参数说明:
- fShow:如果为 TRUE,则显示拖放图像;如果为 FALSE,则隐藏拖放图像。
该函数返回一个 BOOL 类型的值,如果成功,返回值为非零;如果失败,返回值为零。
在拖放操作中,ImageList_DragShowNolock 函数通常与 ImageList_DragEnter、ImageList_DragLeave 和 ImageList_DragMove 一起使用,以实现图像的拖放。
以下是一个简单的示例代码,演示如何使用 ImageList_DragShowNolock 函数:
#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));
// 显示拖放图像
ImageList_DragShowNolock(TRUE);
}
return 0;
case WM_LBUTTONUP:
{
// 结束拖放操作
ImageList_EndDrag();
}
return 0;
case WM_DESTROY:
{
// 隐藏拖放图像并释放拖放的图像列表
ImageList_DragShowNolock(FALSE);
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_DragShowNolock 函数用于显示拖放图像。在窗口销毁时,通过调用 ImageList_DragShowNolock 函数隐藏拖放图像,并通过调用 ImageList_Destroy 函数释放拖放的图像列表。
转载请注明出处:http://www.zyzy.cn/article/detail/24678/Win32 API/Commctrl.h/ImageList_DragShowNolock