要使用图标,您的应用程序必须获取图标的句柄。以下示例显示如何创建两个不同的图标句柄:一个用于标准感叹号图标,另一个用于在应用程序的资源定义文件中作为资源包含的自定义图标。
HICON hIcon1; //图标句柄
HICON hIcon2; //图标句柄
//创建标准问题图标。
hIcon1 = LoadIcon(NULL, IDI_QUESTION);
//根据资源创建自定义图标。
hIcon2 = LoadIcon(hinst, MAKEINTRESOURCE(460));
//在运行时创建自定义图标。
应用程序应该实现自定义图标作为资源,并应使用LoadIcon或LoadImage 功能,而不是在运行时创建图标。这种方法避免了设备依赖,简化了本地化,并使应用程序能够共享图标位图。但是,以下示例使用CreateIcon在运行时基于位图位掩码创建自定义图标;它被包括以说明系统如何解释图标位图位掩码。
HICON hIcon3; //图标句柄
//杨图标和位掩码
BYTE ANDmaskIcon[] = {0xFF, 0xFF, 0xFF, 0xFF, //行1
0xFF, 0xFF, 0xC3, 0xFF, //行2
0xFF, 0xFF, 0x00, 0xFF, //行3
0xFF, 0xFE, 0x00, 0x7F, //行4
0xFF, 0xFC, 0x00, 0x1F, //行5
0xFF, 0xF8, 0x00, 0x0F, //第6行
0xFF, 0xF8, 0x00, 0x0F, //第7行
0xFF, 0xF0, 0x00, 0x07, //行8
0xFF, 0xF0, 0x00, 0x03, //第9行
0xFF, 0xE0, 0x00, 0x03, //行10
0xFF, 0xE0, 0x00, 0x01, //第11行
0xFF, 0xE0, 0x00, 0x01, // line 12
0xFF, 0xF0, 0x00, 0x01, //第13行
0xFF, 0xF0, 0x00, 0x00, //第14行
0xFF, 0xF8, 0x00, 0x00, //第15行
0xFF, 0xFC, 0x00, 0x00, // line 16
0xFF, 0xFF, 0x00, 0x00, //第17行
0xFF, 0xFF, 0x80, 0x00, // 18行
0xFF, 0xFF, 0xE0, 0x00, //行19
0xFF, 0xFF, 0xE0, 0x01, //行20
0xFF, 0xFF, 0xF0, 0x01, // line 21
0xFF, 0xFF, 0xF0, 0x01, // line 22
0xFF, 0xFF, 0xF0, 0x03, // line 23
0xFF, 0xFF, 0xE0, 0x03, // line 24
0xFF, 0xFF, 0xE0, 0x07, //行25
0xFF, 0xFF, 0xC0, 0x0F, //行26
0xFF, 0xFF, 0xC0, 0x0F, //行27
0xFF, 0xFF, 0x80, 0x1F, // line 28
0xFF, 0xFF, 0x00, 0x7F, // line 29
0xFF, 0xFC, 0x00, 0xFF, //行30
0xFF, 0xF8, 0x03, 0xFF, //行31
0xFF, 0xFC, 0x3F, 0xFF}; // line 32
//杨图标XOR位掩码
BYTE XORmaskIcon[] = {0x00, 0x00, 0x00, 0x00, //行1
0x00, 0x00, 0x00, 0x00, //行2
0x00, 0x00, 0x00, 0x00, //行3
0x00, 0x00, 0x00, 0x00, //行4
0x00, 0x00, 0x00, 0x00, //行5
0x00, 0x00, 0x00, 0x00, //第6行
0x00, 0x00, 0x00, 0x00, //第7行
0x00, 0x00, 0x38, 0x00, //行8
0x00, 0x00, 0x7C, 0x00, //第9行
0x00, 0x00, 0x7C, 0x00, //行10
0x00, 0x00, 0x7C, 0x00, //第11行
0x00, 0x00, 0x38, 0x00, // line 12
0x00, 0x00, 0x00, 0x00, //第13行
0x00, 0x00, 0x00, 0x00, //第14行
0x00, 0x00, 0x00, 0x00, //第15行
0x00, 0x00, 0x00, 0x00, // line 16
0x00, 0x00, 0x00, 0x00, //第17行
0x00, 0x00, 0x00, 0x00, // 18行
0x00, 0x00, 0x00, 0x00, //行19
0x00, 0x00, 0x00, 0x00, //行20
0x00, 0x00, 0x00, 0x00, // line 21
0x00, 0x00, 0x00, 0x00, // line 22
0x00, 0x00, 0x00, 0x00, // line 23
0x00, 0x00, 0x00, 0x00, // line 24
0x00, 0x00, 0x00, 0x00, //行25
0x00, 0x00, 0x00, 0x00, //行26
0x00, 0x00, 0x00, 0x00, //行27
0x00, 0x00, 0x00, 0x00, // line 28
0x00, 0x00, 0x00, 0x00, // line 29
0x00, 0x00, 0x00, 0x00, //行30
0x00, 0x00, 0x00, 0x00, //行31
0x00, 0x00, 0x00, 0x00}; // line 32
hIcon3 = CreateIcon(hinst, //应用程序实例en
32, //图标宽度
32, //图标高度
1, // XOR平面的数量
1, //每像素的位数
ANDmaskIcon, // AND bitmask
XORmaskIcon); // XOR位掩码
要创建图标,CreateIcon将以下真值表应用于AND和XOR位掩码。
AND位掩码 | XOR位掩码 | 显示 |
0 | 0 | 黑色 |
0 | 1 | 白色 |
1 | 0 | 屏幕 |
1 | 1 | 反向屏幕 |
关闭之前,您的应用程序必须使用DestroyIcon来销毁使用CreateIconIndirect创建的任何图标。没有必要摧毁其他功能创建的图标。