按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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。 使用图标和光标