[ windows程序设计(programing windows) ] - 资源之图标

图标是由一个或多个位图组成的一个图片文件,文件后缀一般为.icon。一般来说会建立两个图标,一个大的,一个小的,或者只建立一个图标,包含多个位图。为什么这样做,因为如果只有一个图标的话,如果是小图标,那么程序文件的图标就会变很难看,如果是大图标,那么程序标题栏上显示的图标就有可能因为压缩而失真,所以,一般情况下应该建立两个图标,来应对不同的情况。

接下来介绍一种简单的使用图标的方法,在注册窗口类的时候就设置图标。

对于WNDCLASS窗口类来说,我们应该用由32*32和16*16的两个位图组成的图标来作为LoadIcon函数的参数,并将LoadIcon的返回值赋给WndClass.hIcon。程序会自动选择用

对于WNDCLASSEX窗口类来说,我们应该用32*32的图标作为LoadIcon的参数。并将返回值赋给wcex.hIcon,16*16的图标作为LoadIcon的参数,并肩返回值赋给wcex.hIconSm

然后单独说一下LoadIcon函数:

HICON WINAPI LoadIcon(
  _In_opt_ HINSTANCE hInstance,
  _In_     LPCTSTR   lpIconName
);

第一个参数是当前模型的实例,这个实例是这个图标的加载对象。

第二个参数是应当被加载的图标的名称。这个值有一些定义好的值如:IDI_APPLICATION 默认应用图标;IDI_ASTERISK 和信息图标一样;IDI_ERROR 手形状的图标;IDI_EXCLAMATION 和警告图标一样;IDI_HAND 手形状的图标,和IDI_ERROR一样;IDI_INFORMATION 信息图标;IDI_QUESTION 问题图标;IDI_SHIELD 安全护盾图标;IDI_WARNING 警告图标;IDI_WINLOGO windows2000 logo图标。

当然你也可以自己创建图标,在VS2015下,打卡资源管理器,然后可以在ICON下新建一个图标ID,然后在解决方案资源管理器中打开新建的图标,注意VS2015不能绘画32的图标,只可以绘画24位以及24位一下的图标,然后调用LoadIcon函数时应该这么调用LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON)),IDI_ICON是你自己建立的图标的ID。

一般来说程序的图标应该作为资源被包括在程序中,而不是在运行时自行建立,我也同样不推荐在运行过程中建立图标,但是如何在运行中建立图标我还是要介绍一下的。

你需要用到CreateIcon函数,原型如下:

HICON WINAPI CreateIcon(
  _In_opt_       HINSTANCE hInstance,
  _In_           int       nWidth,
  _In_           int       nHeight,
  _In_           BYTE      cPlanes,
  _In_           BYTE      cBitsPixel,
  _In_     const BYTE      *lpbANDbits,
  _In_     const BYTE      *lpbXORbits
);
因为我不推荐所以我就不做详细的介绍了,然后附上一段MSDN中的代码,

HICON hIcon3;      // icon handle 
 
// Yang icon AND bitmask 
 
BYTE ANDmaskIcon[] = {0xFF, 0xFF, 0xFF, 0xFF,   // line 1 
                      0xFF, 0xFF, 0xC3, 0xFF,   // line 2 
                      0xFF, 0xFF, 0x00, 0xFF,   // line 3 
                      0xFF, 0xFE, 0x00, 0x7F,   // line 4 
 
                      0xFF, 0xFC, 0x00, 0x1F,   // line 5 
                      0xFF, 0xF8, 0x00, 0x0F,   // line 6 
                      0xFF, 0xF8, 0x00, 0x0F,   // line 7 
                      0xFF, 0xF0, 0x00, 0x07,   // line 8 
 
                      0xFF, 0xF0, 0x00, 0x03,   // line 9 
                      0xFF, 0xE0, 0x00, 0x03,   // line 10 
                      0xFF, 0xE0, 0x00, 0x01,   // line 11 
                      0xFF, 0xE0, 0x00, 0x01,   // line 12 
 
                      0xFF, 0xF0, 0x00, 0x01,   // line 13 
                      0xFF, 0xF0, 0x00, 0x00,   // line 14 
                      0xFF, 0xF8, 0x00, 0x00,   // line 15 
                      0xFF, 0xFC, 0x00, 0x00,   // line 16 
 
                      0xFF, 0xFF, 0x00, 0x00,   // line 17 
                      0xFF, 0xFF, 0x80, 0x00,   // line 18 
                      0xFF, 0xFF, 0xE0, 0x00,   // line 19 
                      0xFF, 0xFF, 0xE0, 0x01,   // line 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,   // line 25 
                      0xFF, 0xFF, 0xC0, 0x0F,   // line 26 
                      0xFF, 0xFF, 0xC0, 0x0F,   // line 27 
                      0xFF, 0xFF, 0x80, 0x1F,   // line 28 
 
                      0xFF, 0xFF, 0x00, 0x7F,   // line 29 
                      0xFF, 0xFC, 0x00, 0xFF,   // line 30 
                      0xFF, 0xF8, 0x03, 0xFF,   // line 31 
                      0xFF, 0xFC, 0x3F, 0xFF};  // line 32 
 
// Yang icon XOR bitmask 
 
BYTE XORmaskIcon[] = {0x00, 0x00, 0x00, 0x00,   // line 1 
                      0x00, 0x00, 0x00, 0x00,   // line 2 
                      0x00, 0x00, 0x00, 0x00,   // line 3 
                      0x00, 0x00, 0x00, 0x00,   // line 4 
 
                      0x00, 0x00, 0x00, 0x00,   // line 5 
                      0x00, 0x00, 0x00, 0x00,   // line 6 
                      0x00, 0x00, 0x00, 0x00,   // line 7 
                      0x00, 0x00, 0x38, 0x00,   // line 8 
 
                      0x00, 0x00, 0x7C, 0x00,   // line 9 
                      0x00, 0x00, 0x7C, 0x00,   // line 10 
                      0x00, 0x00, 0x7C, 0x00,   // line 11 
                      0x00, 0x00, 0x38, 0x00,   // line 12 
 
                      0x00, 0x00, 0x00, 0x00,   // line 13 
                      0x00, 0x00, 0x00, 0x00,   // line 14 
                      0x00, 0x00, 0x00, 0x00,   // line 15 
                      0x00, 0x00, 0x00, 0x00,   // line 16 
 
                      0x00, 0x00, 0x00, 0x00,   // line 17 
                      0x00, 0x00, 0x00, 0x00,   // line 18 
                      0x00, 0x00, 0x00, 0x00,   // line 19 
                      0x00, 0x00, 0x00, 0x00,   // line 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,   // line 25 
                      0x00, 0x00, 0x00, 0x00,   // line 26 
                      0x00, 0x00, 0x00, 0x00,   // line 27 
                      0x00, 0x00, 0x00, 0x00,   // line 28 
 
                      0x00, 0x00, 0x00, 0x00,   // line 29 
                      0x00, 0x00, 0x00, 0x00,   // line 30 
                      0x00, 0x00, 0x00, 0x00,   // line 31 
                      0x00, 0x00, 0x00, 0x00};  // line 32 
 
hIcon3 = CreateIcon(hinst,    // application instance  
             32,              // icon width 
             32,              // icon height 
             1,               // number of XOR planes 
             1,               // number of bits per pixel 
             ANDmaskIcon,     // AND bitmask  
             XORmaskIcon);    // XOR bitmask

感兴趣的朋友可以自己查阅其他资料来学习这部分知识。

还有一个函数可以在用户区域上绘画图标,那就是

DrawIcon(
    _In_ HDC hDC,
    _In_ int X,
    _In_ int Y,
    _In_ HICON hIcon);
这四个参数相信大家应该很清楚,所以我就不介绍了。不过这个函数一般用的不是很多。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值