友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
飞读中文网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

windows环境下32位汇编语言程序设计-第29章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




5。2。2  使用图标和光标

在这里,用一个例子来说明图标和光标的用法,程序是建立在FirstWindow。asm和Menu。asm程序的基础上的,为了节省篇幅,在这里就不列出全部源程序了,完整的源程序可以在所附光盘的Chapter05Icon目录中找到。程序中创建了一个菜单,运行后可以在“图标和光标”菜单中选择不同的图标和光标,选择不同的图标以后,窗口标题栏左边的图标和桌面任务栏上的窗口图标都会变化;选择不同的光标后,当鼠标移动到窗口客户区中的时候,光标会变成程序指定的光标。具体的效果如图5。3所示,大图标对应“笑脸”,小图标对应“箭头”,而光标A和B分别是“小恐龙”光标和“手型”光标,其中“小恐龙”光标是ani类型的动态光标,在屏幕上显示为一个走动中的恐龙模样。


图5。3  不同的图标和光标

资源文件Icon。rc的定义如下:

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#include           

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#define   ICO_BIG            Ox1000

#define   ICO_SMALL          Ox1001

#define   CUR_2               Ox1000

#define   IDM_MAIN                Ox2000

#define   IDM_EXIT                Ox2101

#define   IDM_BIG             Ox2201

#define   IDM_SMALL          Ox2202

#define   IDM_CUR1                Ox2203

#define   IDM_CUR2                Ox2204

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

ICO_SMALL          ICON       〃Small。ico〃

ICO_BIG            ICON       〃Big。ico〃

CUR_2              CURSOR     〃2。cur〃

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

IDM_MAIN  menu     discardable

BEGIN

          popup    〃文件(&F)〃

          BEGIN

                   menuitem   〃退出(&X)〃;     IDM_EXIT

          END

          popup    〃图标和光标(&I)〃

          BEGIN

                   menuitem   〃大图标(&G)〃;   IDM_BIG

                   menuitem   〃小图标(&M)〃;   IDM_SMALL

                   menuitem   separator

                   menuitem   〃光标A(&A)〃;   IDM_CUR1

                   menuitem   〃光标B(&B)〃;   IDM_CUR2

          END

END

//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

经过上一节的“洗礼”,读者对菜单的定义应该很熟悉了,这里就不再说明IDM_MAIN的定义了,脚本文件中定义了ICO_SMALL,ICO_BIG两套图标和CUR_2静态光标,磁盘上还有个动态光标文件1。ani。

Icon。asm的大部分是窗口模板程序的内容,和FirstWindow。asm是相同的,仅在窗口过程的WM_CREATE和WM_MAND增加了一些内容:

                       nst

szCursorFile  db      '1。ani';0

                       de

                       …

              。if     eax   WM_CREATE

                       invoke  LoadIcon;hInstance;ICO_BIG

                       mov     hIcoBig;eax

                       invoke  LoadIcon;hInstance;ICO_SMALL

                       mov     hIcoSmall;eax

                       invoke  LoadCursorFromFile;addr szCursorFile

                       mov     hCur1;eax

                      invoke  LoadCursor;hInstance;CUR_2

                       mov     hCur2;eax

                       invoke  SendMessage;hWnd;WM_MAND;IDM_BIG;NULL

                      invoke  SendMessage;hWnd;WM_MAND;IDM_CUR1;NULL

              。elseif eax   WM_MAND

                       mov     eax;wParam

                      movzx   eax;ax

                       。if     eax     IDM_EXIT

                              call  _Quit

                      。elseif eax     IDM_BIG

                               invoke    SendMessage;hWnd;WM_SETICON;ICON_BIG;hIcoBig

                              invoke    CheckMenuRadioItem;hMenu;

                                IDM_BIG;IDM_SMALL;IDM_BIG;MF_BYMAND

                      。elseif eax     IDM_SMALL

                              invoke    SendMessage;hWnd;

                                WM_SETICON;ICON_BIG;hIcoSmall

                              invoke    CheckMenuRadioItem;hMenu;

                                IDM_BIG;IDM_SMALL;IDM_SMALL;MF_BYMAND

                      。elseif eax     IDM_CUR1

                              invoke    SetClassLong;hWnd;GCL_HCURSOR;hCur1

                              invoke    CheckMenuRadioItem;hMenu;

                              IDM_CUR1;IDM_CUR2;IDM_CUR1;MF_BYMAND

                      。elseif eax     IDM_CUR2

                              invoke    SetClassLong;hWnd;GCL_HCURSOR;hCur2

                              invoke    CheckMenuRadioItem;hMenu;

                                 IDM_CUR1;IDM_CUR2;IDM_CUR2;MF_BYMAND

                       。endif



 
来源:电子工业出版社 作者:罗云彬 上一页         回书目         下一页          
上一页         回书目         下一页          
  


第5章 使用资源


5。2 图标和光标(2)

    
1。 装入图标和光标

在WM_CREATE消息中,程序从资源节区中装入所有的图标和光标资源,装入图标是用LoadIcon函数来完成的:

     invoke  LoadIcon;hInstance;lpIconName

     。if     eax

             mov hIcon;eax

     。endif

hInstance参数指定实例句柄,表示图标资源定义在哪个可执行文件中,lpIconName参数指定图标资源的名称,它就是资源文件中定义的图标ID值,如果调用成功的话,函数返回图标句柄。

除了可以装入资源文件中定义的图标资源之外,当参数hInstance为NULL的时候,用LoadIcon还可以用预定义的lpIconName参数装入Windows预定义的图标,参数说明如表5。1所示。

 

表5。1  LoadIcon可以装入的预定义图标

lpIconName参数的预定义值
 图 标 形 状
 
IDI_APPLICATION
 应用程序默认图标
 
IDI_ASTERISK
 I符号图标
 
IDI_EXCLAMATION
 警告图标(黄色三角形+感叹号)
 
IDI_HAND
 严重警告图标(一般是红色圆形+叉)
 
IDI_QUESTION
 问号图标
 
IDI_WINLOGO
 Windows标徽图标
 

装入光标的函数有两个。装入在资源中定义的光标的函数是LoadCursor,它的语法和LoadIcon几乎一样:

invoke  LoadCursor;hInstance;lpCursorName

。if     eax

         mov hCursor;eax

。endif

LoadCursor的用法也和LoadIcon相似,lpCursorName是光标资源的ID,LoadCursor也可以用指定hInstance为NULL的办法装入表5。2所列的预定义光标,这时候lpCursorName参数的取值如表5。2所示。

表5。2  LoadCursor可以装入的预定义光标

预 定 义 值
 光 标 形 状
 
IDC_APPSTARTING
 标准的箭头形状加上小沙漏
 
IDC_ARROW
 标准的箭头形状
 
IDC_CROSS
 十字型光标
 
IDC_IBEAM
 要求输入文字时的I型光标
 
IDC_NO
 禁止光标(圆圈里面加一个斜杠)
 
IDC_SIZE
 改变大小时的十字箭头
 
IDC_SIZENESW
 东北和西南方向的双向箭头
 
IDC_SIZENS
 向北和向南的双向箭头
 
IDC_SIZENWSE
 西北和东南方向的双向箭头
 
IDC_SIZEWE
 向西和向东的双向箭头
 
IDC_UPARROW
 垂直箭头光标
 
IDC_WAIT
 沙漏光标
 

读者可以注意到,预定义的图标和光标都是Windows系统中常用的,预定义图标常用在消息框中,预定义光标就是Windows鼠标属性中的光标。使用预定义图标和光标的好处是它们的形状会随着系统设置值的不同自动改变,如改变“控制面板”→“鼠标”→“指针”中的设置后,装入的光标会自动改变。

另一个光标装入函数是LoadCursorFromFile,这个函数从磁盘光标文件中装入光标:

invoke  LoadCursorFromFile;lpCursorFileName

。if     eax

         mov     hCursor;eax

。endif

在Windows 9x中,静态光标文件*。cur既可以定义在资源文件中,也可以使用LoadCursorFromFile函数装入,但是动态光标文件*。ani只能通过文件方式装入。在Windows 2000及XP中,两种光标文件都可以通过资源装入。为了在不同的操作系统上都可以使用,例子文件使用LoadCursorFromFile函数来装入动态光标文件。

2。 使用图标和光标

返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!