[翻译]-Windows CE 程序设计 (3rd 版)--5.1 公共控件编程

来源:互联网 发布:中信建投证券mac版 编辑:程序博客网 时间:2024/06/06 01:43
 

因为公共控件同操作系统核心是分离的,所以在使用任何一个公共控件前必须要初始化包含公共控件的DLL。在所有Windows版本里,也包括Windows CE,您可以调用void InitCommonControls(void)来装载动态库并注册许多公共控件类。该调用并不初始化日历控件、时间选择控件up/down控件、IP地址控件以及其它更新一些的公共控件。要初始化这些控件,使用函数
BOOL InitCommonControlsEx(LPINITCOMMONCONTROLSEX lpInitCtrls);
该函数允许应用程序只装载和初始化选择的公共控件。该函数在Windows CE下很容易获得,因为只装载需要的控件可以减少对内存的影响。该函数唯一的参数是一个含有两个域的结构,该结构有一个尺寸域和一个包含标志集的域,标志集用来指出哪些公共控件需要被注册。表5-1给出了可以使用的标志及对应的控件。
表5-1:公共控件对应的标志

Flag

Control Classes Initialized

ICC_BAR_CLASSES

Toolbar

Status bar

Trackbar

Command bar

ICC_COOL_CLASSES

Rebar

ICC_DATE_CLASSES

Date and time picker

Month calendar control

ICC_LISTVIEW_CLASSES

List view

Header control

ICC_PROGRESS_CLASS  

Progress bar control

ICC_TAB_CLASSES

Tab control

ICC_TREEVIEW_CLASSES

Tree view control

ICC_UPDOWN_CLASS

Up-Down control

ICC_TOOLTIP_CLASSES

Tool tip control

ICC_CAPEDIT_CLASS

Cap edit control


一旦公共控件DLL被初始化,这些公共控件就可以像其它任何控件一样对待了。每个控件都有一个可定制风格标志集,用来配置控件的外观和行为。针对每个控件的消息会被发出,用来配置和操纵控件并让控件执行某些动作。标准Windows控件和公共控件之间的一个主要差别是事件通知或服务请求是通过WM_NOTIFY消息来发出,而标准控件则是通过WM_COMMAND消息发出的。同通过WM_COMMAND消息发出的通知相比,采用这种技术可以使通知能够包含更多的信息。另外,这种技术允许为每个使用该通知的控件进行扩展和改编WM_NOTIFY消息。

WM_NOTIFY消息在lParam参数中携带着指向NMHDR结构的指针,NMHDR定义如下:
typedef struct tagNMHDR {
    HWND hwndFrom;
    UINT idFrom;
    UINT code;
} NMHDR;

hwndFrom是发送通知消息的窗口句柄。对属性页来说,就是属性页窗口。如果是控件发送通知的话,idFrom就是控件ID。最后一个code域包含的是通知码。同WM_COMMAND消息相比,虽然这个基本结构没有包含任何更多的信息,但它几乎总是可以扩展的,可以使用附加域来扩展它。通知码指出有什么样的附加域附加到了该通知结构里。

公共控件编程中另一个不同点是发给公共控件的大部分与控件相关的消息都有预定义的宏,用这些宏来发送消息,看上去像是应用程序在调用函数。所以不用像下面的语句那样使用LVM_INSERTITEM消息来给列表控件插入一个项,如
nIndex = (int) SendMessage (hwndLV, LVM_INSERTITEM, 0, (LPARAM)&lvi);
而是可以很容易地使用nIndex = ListView_InsertItem (hwndLV, &lvi)即可。

这两行语句没有功能上的差别。用宏地优势是清晰。宏和其它公共控件编程中需要的定义们一起都位于CommCtrl.h中。用这些宏的一个问题是编译器不能对参数执行类型检查,而假如宏是真正的函数的话是本应该执行的。这个问题也存在于SendMessage技术中,在SendMessage这种方式中参数必须是WPARAM和LPARAM类型,但消息缺乏类型检查也是比较常见的。总的来说,宏例程还是提供了更好的可读性。宏系统的一个例外是在命令条控件和命令带控件中进行宏调用的时候。在这些控件中,除了有大量的用宏包装的消息外,实际上还有许多真的函数。通常,我所说的消息是真正的消息,而不是它们对应的宏。这将有助于将消息或者宏同真正的函数区分开来。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 学生和老师反嘴怎么办? 两个月的宝宝不拉屎怎么办 老师受家长的气怎么办 家长故意在班级群里气老师怎么办 幼儿园阿姨体罚孩子家长该怎么办 学生钱丢了老师怎么办 胸肌一边大一边小怎么办 被爱的人抛弃了怎么办 深蹲以后腿疼怎么办 做完蹲起大腿疼怎么办 练腿之后腿疼怎么办 深蹲做完后腿疼怎么办 做完上下蹲腿疼怎么办 钓鱼子线长了怎么办 烤箱烤红薯没有锡纸怎么办 烤箱烤羊肉串滴油怎么办 黄金虎嘴脱臼了怎么办 孕妇吃了马头鱼怎么办 慈鲷鱼生完小鱼怎么办 买的烤鱼片刺多怎么办 鸡蛋不太新鲜了怎么办 麻雀从巢里掉下来怎么办 小鱼生了鱼蛋怎么办 吃了没熟透的鱼怎么办 吃了变质的虾怎么办 吃了不新鲜的肉怎么办 吃不新鲜的虾怎么办 鸡胸肉不新鲜了怎么办 吃了不新鲜的鱼怎么办 生的猪肉有点臭怎么办? 猪肉馅不新鲜了怎么办 买的肉有点臭了怎么办 炸的东西不脆了怎么办 油炸东西回软了怎么办 吃石斑鱼蛋吐了怎么办 家里的烟筒堵了怎么办 脖子上长鸡皮肤怎么办 铁板烤蔬菜粘锅怎么办 残余尿量300ml怎么办 肌肉拉伤怎么办恢复快小腿 睡觉把背扭了怎么办