WIN32汇编语言教程:第09章 通用控件 · 9.3 使用工具栏(1)

工具栏一般位于主窗口菜单栏的下方。工具栏也是一个子窗口,它包含多个由位图组成的按钮,工具栏上的按钮从功能上看和菜单项是类似的,用户可以通过按动按钮来选择程序提供的各种功能。

工具栏上可以有不同种类的按钮,有的按钮按下后会自动弹起,有的按钮按下后保留在“选中”状态,再按一次后恢复弹起状态,按钮的“选中”状态可以是不互斥的或是互斥的,另外,按钮也可以被灰化或隐藏。所有这些按钮的属性和菜单项的属性是非常相似的,所以工具栏往往用做菜单的补充,为用户提供一个快捷的程序功能选择方式。

由于工具栏的主要用途是当做菜单的补充,为了和菜单逻辑使用同一套代码,当用户按下工具栏上的按钮时,工具栏向父窗口发送WM_COMMAND消息,除了按动按钮的通知消息之外,工具栏同样使用WM_NOTIFY消息将其他动作通知父窗口,如用户拖动按钮来调整按钮的位置等。

工具栏上面的按钮看起来和对话框中的按钮很相似,但实际上它们不是真正的按钮,而仅是被工具栏控件绘画成按钮的样子罢了,也就是说,对话框中的按钮是子窗口,而工具栏上的按钮并不是子窗口,工具栏控件处理这些“仿真”按钮的方式就和一些图形界面的游戏一样,在屏幕上绘画“模拟”的按钮样子并自行处理用户的鼠标动作,以此检测用户在“按钮”上的动作。

本节的例子程序创建一个如图9.4所示的平面样式的工具栏,当鼠标箭头移动到按钮上面的时候,按钮会以凸起的形状显示,鼠标停留片刻后,会出现一条简短的工具提示信息(图中鼠标箭头下方显示的“新建文件”)。

该例子程序代码在所附光盘的Chapter09\Toolbar目录中,目录中包含汇编源文件Toolbar.asm以及资源脚本文件Toolbar.rc文件。


图9.4  工具栏例子的运行结果

Toolbar.asm文件的内容如下:

                   .386
                   .model flat, stdcall
                   option casemap :none
;####################################################################
; Include 文件定义
;####################################################################
include        windows.inc
include        user32.inc
includelib     user32.lib
include        kernel32.inc
includelib     kernel32.lib
include        Comctl32.inc
includelib     Comctl32.lib
;####################################################################
; Equ 等值定义
;####################################################################
ICO_MAIN           equ    1000
IDM_MAIN           equ    1000
IDM_NEW        equ    1101
IDM_OPEN           equ    1102
IDM_SAVE           equ    1103
IDM_PAGESETUP  equ    1104
IDM_PRINT      equ    1105
IDM_EXIT           equ    1106
IDM_CUT        equ    1201
IDM_COPY           equ    1202
IDM_PASTE      equ    1203
IDM_FIND           equ    1204
IDM_REPLACE    equ    1205
IDM_HELP           equ    1301
 
ID_TOOLBAR     equ    1
ID_EDIT        equ    2
;####################################################################
; 数据段
;####################################################################
                   .data?
 
hInstance      dd     ?
hWinMain           dd     ?
hMenu          dd     ?
hWinToolbar    dd     ?
hWinEdit           dd     ?
 
                   .const
szClass        db     'EDIT',0
szClassName    db     'ToolbarExample',0
szCaptionMain  db    '工具栏示例',0
szCaption     db    '命令消息',0
szFormat          db    '收到 WM_COMMAND 消息,命令ID:%d',0
stToolbar      equ    this byte
TBBUTTON <STD_FILENEW,IDM_NEW,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON <STD_FILEOPEN,IDM_OPEN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON <STD_FILESAVE,IDM_SAVE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
TBBUTTON <STD_PRINTPRE,IDM_PAGESETUP,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON <STD_PRINT,IDM_PRINT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
TBBUTTON <STD_COPY,IDM_COPY,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON <STD_CUT,IDM_CUT,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON <STD_PASTE,IDM_PASTE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
TBBUTTON <STD_FIND,IDM_FIND,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON <STD_REPLACE,IDM_REPLACE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
TBBUTTON <STD_HELP,IDM_HELP,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,-1>
TBBUTTON <0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0,-1>
NUM_BUTTONS    EQU    16
;####################################################################
; 代码段
;####################################################################

上页:第09章 通用控件 · 9.2 使用状态栏(4) 下页:第09章 通用控件 · 9.3 使用工具栏(2)

第09章 通用控件

版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号