一个使用IID_IImageList完整例子
时间: 2024-09-14 17:10:18 浏览: 16
在Windows API中,`IID_IImageList`通常用于表示图像列表接口(Image List),这在创建工具栏、菜单项图标或者自定义控件时非常有用。下面是一个简单的例子,展示了如何在一个窗口类中使用`IImageList`:
```cpp
#include <windows.h>
#include <imagehlp.h> // 引入包含IImageList接口的头文件
// 定义 IID_IImageList 的常量
const IID IID_IImageList = {0x00000001, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
class CMyWindow : public CWindowImpl<CMyWindow, CWindow, IDD_MYWINDOW> {
private:
IImageList* m_pImageList; // 存储图像列表的指针
public:
BEGIN_MSG_MAP(CMyWindow)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
COMMAND_ID_HANDLER(ID_VIEW_LIST, OnViewList)
DEFAULT_COMMAND_ID_HANDLERS()
END_MSG_MAP()
private:
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) {
HICON hIcon = LoadIcon(NULL, IDI_APPLICATION); // 加载系统应用图标
m_pImageList = ImageList_Create(16, 16, ILC_COLOR24 | ILC_MASK, 10, 0);
if (m_pImageList) {
ImageList_Add(m_pImageList, hIcon, NULL); // 添加图标到图像列表
}
return TRUE;
}
LRESULT OnViewList(WORD /*idCtrl*/, WORD /*idEvent*/) {
// 这里可以操作IImageList,例如显示它或设置新的图像
// 示例:DrawImageList(m_hWnd, m_pImageList, 0, 0);
return TRUE;
}
};
INT_PTR WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
CMyWindow window;
MSG msg;
// 初始化窗口并显示
window.Create(NULL, TEXT("My Window"), WS_OVERLAPPEDWINDOW, CRect(), hInstance);
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return static_cast<int>(msg.wParam);
}
```
在这个例子中,我们首先加载一个系统图标,并创建一个新的`IImageList`。然后在`OnCreate`消息处理函数中将图标添加到图像列表中。在`OnViewList`中,你可以选择调用`DrawImageList`或其他相关的`IImageList`方法。