创建图标

【勇芳软件工作室】汉化HomePreviousNext

要使用图标,您的应用程序必须获取图标的句柄。以下示例显示如何创建两个不同的图标句柄:一个用于标准感叹号图标,另一个用于在应用程序的资源定义文件中作为资源包含的自定义图标。

HICON hIcon1; //图标句柄

HICON hIcon2; //图标句柄

//创建标准问题图标。

hIcon1 = LoadIcon(NULL, IDI_QUESTION);

//根据资源创建自定义图标。

hIcon2 = LoadIcon(hinst, MAKEINTRESOURCE(460));

//在运行时创建自定义图标。

应用程序应该实现自定义图标作为资源,并应使用LoadIconLoadImage 功能,而不是在运行时创建图标。这种方法避免了设备依赖,简化了本地化,并使应用程序能够共享图标位图。但是,以下示例使用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位掩码显示
00黑色
01白色
10屏幕
11反向屏幕

关闭之前,您的应用程序必须使用DestroyIcon来销毁使用CreateIconIndirect创建的任何图标。没有必要摧毁其他功能创建的图标。