WIN32汇编语言教程:第09章 通用控件 · 9.1 通用控件简介(1)

9.1.1 通用控件的分类

大部分的通用控件由Comctl32.dll模块提供,所以在使用之前要在源程序中包含相应的include和includelib语句:

   include    Comctl32.inc
       includelib Comctl32.lib

Comctl32.dll中提供的通用控件如表9.1所示。

表9.1 通用控件

控 件 名 称预定义的窗口类说明特 殊 风 格
Animation ControlsSysAnimate32动画ACS_
Header ControlsSysHeader32标题栏HDS_
ListView ControlsSysListView32列表视图LVS_
TreeView ControlsSysTreeView32树型视图TVS_
Tab ControlsSysTabControl32项目列表TCS_
Progress Barsmsctls_progress32进度条 

 

控 件 名 称预定义的窗口类说明特 殊 风 格 
 Status Windowsmsctls_statusbar32状态栏SBARS_
 HotKey Controlsmsctls_hotkey32热键 
Trackbarsmsctls_trackbar32跟踪条TBS_ 
Up-Down Controlsmsctls_updown32滚动条UDS_ 
ToolbarsToolbarWindow32工具栏TBSTYLE_ 
Tooltip ControlsTooltips_class32提示文本  
ImageLists 图像列表  
PropertySheets 属性表格  
PropertySheetsPage 属性页  
DragList 能处理拖放功能的列表框  

 

在高版本的Comctl32.dll(IE4.0以上版本更新的Comctl32.dll文件)中,还包括了一些扩展的通用控件,这些扩展控件如表9.2所示。

表9.2 扩展通用控件

控 件 名 称预定义的窗口类说明特 殊 风 格
Rebar ControlsReBarWindow32IE风格工具栏RBS_
Date & Time PickerSysDateTimePick32日期时间DTS_
IP Address PickerSysIPAddress32IP地址输入 
Pager ControlsSysPager PGS_
ComboBoxExComboBoxEx32扩展ComboBoxCBS_

 

Windows系统自身附带的软件中也大量使用通用控件,以图9.1中所示的“资源管理器”程序界面为例,窗口的上方使用标题栏控件,标题栏控件上显示的说明文字是提示文本控件,窗口下方使用状态栏控件;左边列出目录的地方是树型视图控件,右边列出文件的地方是列表视图控件,列表视图控件中的标题栏本身就使用另一个控件——标题栏控件。

其他的一些控件在操作系统中也随处可见,如跳格表控件通常在属性设置对话框中使用;拷贝大文件时的进度窗口中有个进度条控件。

除了这些控件之外,Richedit控件也是一个很常用的控件,Richedit控件是Edit控件的增强版本,包含了很完整的文本编辑功能,可以用来编辑带格式的rtf文件和不带格式的txt文件,由于该控件非常复杂,代码的规模比较大,单独一个Richedit控件的代码规模就和Comctl32.dll中全部代码的规模相当,所以Windows系统将Richedit控件单独放到另一个dll文件中,有关Richedit控件的情况将在9.4节中详细介绍。


图9.1 常见的通用控件

9.1.2 使用通用控件

1.库初始化

通用控件的数量非常多,平时把它们全部装入并注册是非常浪费内存的,所以在默认状态下Comctl32.dll并不会被装入内存,因此,在使用通用控件之前必须将通用控件库装入内存,专用函数InitCommonControls可以用来完成这个工作,调用这个函数的惟一目的是保证系统加载Comctl32.dll库文件。

当库文件被装入的时候,库的入口函数会注册所有的通用控件类,然后用户程序就可以使用这些预定义的类来创建各种类型的通用控件窗口,这就像创建其他的子窗口控件一样。InitCommonControls函数没有参数,也没有定义返回值,它的使用方法是:

invoke InitCommonControls

InitCommonControls函数仅注册表9.1中所列的通用控件类,并不注册表9.2中的扩展通用控件。如果需要使用扩展通用控件,那么需要使用InitCommonControlsEx函数来进行装入和注册的工作:

invoke InitCommonControlsEx,lpInitCtrls

lpInitCtrls参数指向一个INITCOMMONCONTROLSEX结构:

INITCOMMONCONTROLSEX STRUCT
 dwSize dd     ?  ;结构长度
 dwICC  dd     ?  ;需要初始化的类
INITCOMMONCONTROLSEX ENDS

结构中的dwICC字段指定了需要注册的扩展通用控件类,与InitCommonControls注册所有它支持的通用控件类不同,InitCommonControlsEx函数只注册dwICC字段指明的扩展通用控件类,字段可以是下面取值的组合:

● ICC_BAR_CLASSES——注册工具栏、状态栏、Trackbar和Tooltip类。

● ICC_COOL_CLASSES——注册Rebar类。

● ICC_DATE_CLASSES——注册Date and Time Picker类。

● ICC_HOTKEY_CLASS——注册Hot Key类。

● ICC_INTERNET_CLASSES——注册IP Address Picker类。

● ICC_LISTVIEW_CLASSES——注册ListView和Header类。

● ICC_PAGESCROLLER_CLASS——注册Pager类。

● ICC_PROGRESS_CLASS——注册Progress Bar类。

● ICC_TAB_CLASSES——注册Tab和Tooltip类。

● ICC_TREEVIEW_CLASSES——注册TreeView和Tooltip类。

● ICC_UPDOWN_CLASS——注册Up-Down类。

● ICC_USEREX_CLASSES——注册ComboBoxEx类。

● ICC_WIN95_CLASSES——注册InitCommonControls函数注册的所有类。

InitCommonControlsEx函数是InitCommonControls函数的扩充,使用它也可以注册InitCommonControls函数能够注册的所有类(也可以仅注册其中的一部分),如果只用到通用控件,两个初始化函数都可以使用,但若用到扩展通用控件,那就只能使用InitCommonControlsEx函数来进行初始化了。

创建通用控件的代码一般放在主窗口的WM_CREATE消息中,所以InitCommonControls和InitCommonControlsEx函数的调用需要在此之前完成,一般在程序一开始的地方就调用它们。

上页:第08章 通用对话框 · 8.3 浏览目录对话框(3) 下页:第09章 通用控件 · 9.1 通用控件简介(2)

第09章 通用控件

版权所有 © 云南伯恩科技 证书:粤ICP备09170368号