您的位置是: 软件 > 开发者网络 > 开发工具 > 开发专栏 > VC > 正文 查cseek报价

WIN32用户界面设计基础之Icon 篇
2002-03-22作者: 请与我联系出处: yesky
我对此感兴趣
订阅电子杂志
发表评论
advertisement
热点推荐
· 群雄逐鹿 十四种Java开发工具点评
· 网文快捕,将网络资源搬回家
· Windows系统瘦身计划
· PS多媒体教程带你享受快乐学习
· 网络游戏外挂设计深度探索
· 武装你的桌面,桌面工具大阅兵
天极搜索引擎服务
资讯  产品  经销商  下载  社区


  在Windows中图标有四种,系统大图标、系统小图标、Shell大图标、Shell小图标。系统大图标供应用程序自身使用,比如在"关于"对话框中使用,当用户按下Alt+Tab组合键时,也会显示系统大图标。系统小图标显示在程序窗口的左上角,Shell图标用于在资源管理器中显示。

  一、 图标的获得

  1、 自己设计

  最直接的方法是在在资源设计器中设计一个图标,然后用LoadIamge()或LoadIcon()加载。也可以在程序运行的过程中创建图标,方法是填写一个ICONINFO结构(可以手工填,也可以调用GetIconInfo()函数填),然后调用CreateIconIndirect()获得一个HICON指针。

  2、 捡现成的

  使用CreateIconFromResourceEx()获取一个EXE或DLL文件中的图标。在一个EXE或DLL文件中有一个RT_GROUP_ICON图标目录,同时还有RT_GROUP_CURSOR鼠标目录,存放有多个图标或鼠标,分别适用于不同的显示设备,LookUpIconFromDirectoryEx()函数用来搜索图标目录,获得最适合当前显示设备的图标的ID,然后用MAKEINTRESOURCE宏将得到的图标ID转换成指向一个低位字节为该ID,高位字节为0的字符串的指针,将其作为参数传递给FindResource()获得一个指向该资源信息的指针,再将此指针传递给LoadResource()函数获得资源句柄。够麻烦吧,天下没有免费的午餐!

  二、 使用图标

  1、 改变一个窗口的图标:

    HICON hnewIcon;
    hnewIcon=LoadIcon(hInst,MAKEINTRESOURCE(IDI_NEWICON));
    SendMessage(hWnd,STM_SETICON,IMAGE_ICON,(LPARAM)(UINT)hnewIco);

  如果想修改一个的窗口类的所有派生窗口的图标,应当:

   SetClassLong(hWnd,GCL_HICON,(LONG)hnewIcon);

  改变系统大图标,只有在按下Alt+Tab组合键才能看到结果

   SetClassLong(hWnd,GCL_HICONSM,(LONG)hnewIcon);

  改变系统小图标,在窗口的标题栏中立刻有反映

  2、 将图标绘制进设备场景

  例如:

   HDC hdc;
   DrawIcon(hdc,0,0,hnewIcon);

  3、 在注册窗口类时为WNDCLASS或者WNDCLASSEX的hIconsm或hIcon属性设为图标句柄

  4、 使用动画图标

   hnewIcon=LoadImage(NULL,"C:\\AnimIcon.ANI",IMAGE_ICON,0,0,LR_LOADFROMFILE);

  NULL表示将加载的Icon来自文件而不是EXE文件的实例,IMAGE_ICON限定加载的Image将作Icon使用。

  三、 实例:获得一个EXE或DLL文件中的资源


  1、 加载文件

   HMODEL he;
   he=LoadLiabrary("C:\\WINNT\\Explorer.exe");

  2、 查找资源

   HRSRC hrs;
   hrs=FindResource(he,MAKEINTRESOURCE(100),RT_GROUP_ICON);

  3、 加载资源

   HGLOBAL hgl;
   hgl=LoadResource(he,hrs);

  4、 锁定资源

   BYTE *lpr;
   lpr=LockResource(hgl);

  我们知道位图是由一个一个的Bit值来描述的,LockResource()函数返回一个指向存放位图Bit值的内存区域的的首字节的指针

  5、 获得资源句柄

   HICON hic;
   hic=CreateIconFromResourceEx((PBYTE)lpr,//LockResource()返回的指针
   SizeofResource(he,hgl),//资源的尺寸
   TRUE//是图标,FALSE表示是Cursor,
   0x00030000//图标的版本对Win3.x以上版本均为此值,
   0,0,//图标的宽和高,设为0使用默认值
   LR_DEFAULTCOLOR//使用的颜色,LR_MONOCHROME为单色);





【责任编辑:方舟】
推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志发表评论

天极商业街
·激情美女让你想入非非
·图铃梦工厂下载无限!
·找寻童真,卡通专题
·夏日激情交友社区!
·星座运程,预测人生
CSEEK搜索
相关内容阅读排行榜
  • 半兽人的神话
  • 微软认为XBOX2没必要兼容XBOX
  • 日本发行新型限定版GameCube
  • 图谋低端市场 Sempron一门三杰再续辉煌
  • 密蜂大盗木马 开MM摄像头偷窥隐私
  • Win2000注册表的备份与恢复
  • 制作无人值守的Win XP安装光盘
  • 联众世界高校棋牌联赛完美谢幕

  • advertisement

     短信乐园
    好名好运 每日运程 姓名配对 情侣缘分 生命曲线 三生三世 自我认知 前世今生
    游戏嘉年华 爱情宝石 魔法水晶 麻辣竞猜 魔法占卜 暗恋表白 星座运程 浮生记


    · 至少还有你-林忆莲
    · 东风破-周杰伦
    · 什么都不怕-杨千桦
    · 下一站天后-Twins
    · 不羁的风-张国荣
    · 帅哥接电话
    · 严守一标准铃声
    · 0.01公分
    · 下雨收衣服啦
    · 快点接我电话吧

    欲望都市 成人笑话 图铃包月 天气预报 麻辣生活 都市报
    体育新闻 娱乐新闻 点歌祝福 情人悄悄话