汇编教程之通用控件

本课中我们将学习什么是通用控件和如何使用它们。

理论:

WIN95相对于WIN3X有几个加强的用户界面控件。其实在WIN95正式发行前这些控件就在使用,譬如:状态条、工具条等。以前程序员要自己去编程使用它们,现在微软已经把它们包含到了WIN9X和WINNT中了。

Toolbar ---工具条

Tooltip ---提示文本

Status bar ---状态条

Property sheet ---属性页单

Property page ---属性页

Tree view ---树型视图

List view ---列表视图

Animation ---动画

Drag list ---能够处理Drag-Drop的列表框

Header ---

Hot-key ---热键

Image list ---图象链表

Progress bar ---进程状态条

Right edit ---

Tab ---跳格表

Trackbar ---跟踪条

Up-down ---滚动条

因为通用控件的数量非常多,把它们全部装入内存并注册它们是非常浪费内存的。除了“RTF文本编辑”控件外其他控件的可执行代码都放在comctl32.dll中,这样其他的应用程序就可以使用它们了。“RTF文本编辑”控件在richedXX.dll中,由于该控件非常的复杂,所以也比其它控件大。

要加载comctl32.dll可以在您的应用程序中调用函数InitCommonControls。InitCommonControls函数是动态链接库comctl32.dll中的一个函数,只要在您的程序中的任意地方引用了该函数就、会使得WINDOWS的程序加载器PE Loader加载该库。函数InitCommonControls其实只有一条指令“ret”,它的唯一目的是为了使得在调用了个该函数的应用程序的可执行文件的PE头中的“引入”段中包含有comctl32.dll,这样无论什么时候该应用程序都会为您加载该库。所以真正初始化的工作是在该库的入口点处做的,在这里会注册所有的通用控件类,然后所有的通用控件就可以在这些类上进行创建,这就象创建其它的子窗口控件一样。

RTF文本编辑控件则不同。如果您要使用它,就必须调用LoadLibrary函数来动态加载,并调用FreeLibrary来动态地卸载。

现在我们学习如何创建这些通用控件。您可以用资源编辑器把它们放到一个对话框中,或者您也可以自己调用相关的函数来手动创建它们。几乎所有的通用控件都是调用函数CreateWindowEx或CreateWindow来创建的,您只要在其中传递通用控件的类名即可。有一些通用控件有一些特别的创建函数,但是其实这些函数在内部都调用了CreateWindowEx,只是包装后的函数更方便使用而已。经过包装的函数有:

CreateToolbarEx
CreateStatusWindow
CreatePropertySheetPage
PropertySheet
ImageList_Create

为了创建通用控件您必须要知道它们的类名,我们把类名列于如下:

类名 通用控件

ToolbarWindow32 Toolbar
tooltips_class32 Tooltip
msctls_statusbar32 Status bar
SysTreeView32 Tree view
SysListView32 List view
SysAnimate32 Animation
SysHeader32 Header
msctls_hotkey32 Hot-key
msctls_progress32 Progress bar
RICHEDIT Rich edit
msctls_updown32 Up-down
SysTabControl32 Tab

Property sheets、property pages和image list控件有它们自己的创建函数。Drag list其实是可以伸缩的listbox控件,所以它没有自己的类名。上面的类名是VC++的资源编辑器提供的,它们和Borland公司的WIN32 API指南中提出的不一样,和Petzold的书《Programming Windows 95》也不一样。可以肯定的是我们上面列出的类名绝对准确。 这些通用控件可以有通用的窗口类的一些风格,譬如WS_CHILD等。它们当然还有其他的特殊风格,譬如树型视图控件就有TVS_XXXXX风格,列表控件就有LVS_xxxx风格。具体的最好查找有关的WIN32 API函数指南。 既然我们已经知道了如何创建一个通用控件,我们就可以讨论这些通用控件之间以及和它们的父窗口之间是如何通讯的了。不象子窗口控件,通用控件在某些状态发生变化时不是通过发送WM_COMMAND而是发送WM_NOTIFY消息和父窗口通讯的。父窗口可以通过发送消息来控制子窗口的行为。对于那些新的通用控件,还有一些新的消息类型。您可以参考您的WIN32 API手册。

时间: 2024-08-31 20:25:46

汇编教程之通用控件的相关文章

MFC通用控件的初始化

这是我在阅读某源代码时无意中想到的一个问题,进行了一番研究,现在把结果贴出来,希望对感兴趣的人能有所帮助. InitCommonControls和InitCommonControlsEx 从Win95开始,Windows提供了一些新的Win32控件,称为通用控件. 如:Toolbar,Status bar,Tree view,List view,Animation,Hot-key,Image list,Tab等等.这些控件的可执行代码都放在comctl32.dll中.要使用通用控件,必须加载co

通用控件详解

理论:WIN95相对于WIN3X有几个加强的用户界面控件.其实在WIN95正式发行前这些控件就在使用,譬如:状态条.工具条等.以前程序员要自己去编程使用它们,现在微软已经把它们包含到了WIN9X和WINNT中了. Toolbar ---工具条 Tooltip ---提示文本 Status bar ---状态条 Property sheet ---属性页单 Property page ---属性页 Tree view ---树型视图 List view ---列表视图 Animation ---动

DNN模块开发系列文章(6)——DNN中的通用控件(下)

TextEditor: 开发系列文章(6)--DNN中的通用控件(下)-通用语言模块">简介: 富文本编辑器控件.功能就不用多说了吧,大家都经常用到的.DNN利用Providers模式可以很方便的集成多种富文本编辑器.据我所知就有:FreeTextBox,FCKEditor,WebHtmlEditor,CuteEditor.大家可以通过配置web.config就可以很容易的选择使用一种了,具体的配置方法在每一个富文本编辑器Providers中应该都有详细的说明. 位置:controls\T

DNN模块开发系列文章(5)——DNN中的通用控件(上)

DNN中的通用控件主要在DotNetNuke.UI命名空间下,而与模块开发紧密相关的都在DotNetNuke.UI.UserControls中,它们是开发具有DNN风格模块不可缺少的元素. LabelControl 文章(5)--DNN中的通用控件(上)-通用语言模块"> 简介: 标签控件.这个应该是用的最多的一个控件了.主要起到在输入框前起提示作用,如果点击问号图标开可以给出详细的说明. 位置: controls\LabelControl.ascx 属性: ControlName:对应控

Delphi中通用控件安装、删除方法

//==========通用控件安装方法:----------基本安装1.对于单个控件,Componet-->install component..-->PAS或DCU文件-->install;2.对于带*.dpk文件的控件包,File-->Open(下拉列表框中选*.dpk)-->install即可:3.对于带*.bpl文件的控件包,Install Packages-->Add-->bpl文件名即可:4.如果以上Install按钮为失效的话,试试Compile按

WML教程12:控件组(Fieldset)和复杂示例

教程|控件|示例 Fieldset 提供了一种控件分组的功能,相对于Optgroup它的潜在价值更强了,但是需要客户端设备的支持才能获得显示效果. 相关属性: title 标题 综合示例: <?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> &

Axure常用交互实例教程:日历控件选择日期

上次分享了一个Axure常用交互实例带提示文本框和拖拽物的教程,有不少网站有转载,说明内容还是有点价值的.今天分享一个日历控件中的一个常用交互实例:选择日期. 实例下载:axure常用交互实例日历控件.rar 1.日历控件 第一步: 从控件库中拖出两个文本面板和一个矩形框.一个文本面板控件中输入"选择日期"(标签命名为文本1),另一个输入一个默认日期(标签命名为文本2),编辑文本框控件的属性为:文本框. 第二步: 打开日历控件,这里需要注意下,一般自带控件库中是没有日历控件的,这里可以

Android学习教程之日历控件使用(7)_Android

本文实例为大家分享了Android日历控件的使用方法,供大家参考,具体内容如下 MainActivity.java代码: package siso.timessquare; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; p

Android学习教程之日历控件使用(7)

本文实例为大家分享了Android日历控件的使用方法,供大家参考,具体内容如下 MainActivity.java代码: package siso.timessquare; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; p