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

windows环境下32位汇编语言程序设计-第17部分

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




当选中IDM_BIG和IDM_DETAIL之间的菜单项的时候,程序用CheckMenuRadioItem将原先IDM_BIG和IDM_DETAIL范围内的互斥选定撤销并将当前选定的菜单项加圆点标记。

。elseif  eax 》=  IDM_BIG && eax 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

#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。 使用图标和光标

现在来看如何使用图标。图标一般使用在对话框中或者程序窗口的标题栏中,要在标题栏中设置图标可以用向窗口发送WM_SETICON消息的办法实现:

invoke  SendMessage;hWnd;WM_SETICON;ICON_BIG;hIcon

消息的wParam参数可以是ICON_BIG或ICON_SMALL,用来指定图标的分辨率为    32×32还是16×16。

要将窗口的光标设置为新的光标不能使用WM_SETCURSOR,这个消息是通知窗口重新刷新光标而不是让它设定指定的光标。Windows中有个SetCursor函数可以用来设置窗口光标,但这只能将新的光标维持很短一段时间,因为当Windows向窗口重新发送WM_SETCURSOR消息的时候,光标就会被设置为原来的样子,在第4章的实验中读者已经看到,WM_SETCURSOR是最频繁的消息之一,所以SetCursor并不能用来永久地改变窗口的光标。

如果要改变窗口的光标,正确的办法是用SetClassLong函数改变窗口类的属性,这个函数的使用方法如下:

invoke  SetClassLong;hWnd;nIndex;dwNewLong

这个函数用来改变窗口类的属性,所以可以改变类中的光标设定,hWnd用来指定一个用这个类建立的某个窗口句柄,nIndex参数指定要改变窗口类的哪个属性,可以指定为GCL_HBRBACKGROUND,GCL_HCURSOR,GCL_HICON,GC
返回目录 上一页 下一页 回到顶部 7 6
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!