(转)子窗口控件

首先说下子窗口控件的一些基本用途:

1. 子窗口控件可以用于将一个大的用户程序从界面上分成很多个功能小模块,比如说为一个应用程序添加一个Button,那么Button自己可以接受鼠标的事件,然后自己做处理(比如说按钮被按下的高亮效果),再把处理后的结果以新的消息的形式传送回父窗口.hwndParent = GetParent (hwnd) 用于得到父窗口的句柄.再用SendMessage (hwndParent, message, wParam, lParam) ;送回个父窗口.这里的message参数可以是在值上大于WM_USER的任意值,并且不能与预定义的WM_消息冲突.而这里的wParam和lParam就可以随意的根据需要来表示返回的参数,比如wParam可以返回子窗口的ID.

2.虽然你可以自己通过CreateWindow来创建子窗口,但是你也可以用WINDOWS预定义的一些子窗口,比如说:Button,Textbox,Label,CheckBox....就拿Button来说,你只需要一个简简单单的CreateWindow来创建它(不需要自己定义一个新的WIndow Class),然后在你的主窗口中捕获WM_COMMAND消息就可以了,至于怎么把Button画出来,怎么处理他的鼠标事件,在被点击时高亮显示,这些全部由WINDOWS来做,是不是很方便呢.

3.子窗口控件用的最多的就是在对话框中了.对话框中的子窗口控件的位置,大小都定义在程序资源脚本中(program's resource script).你也可以通过CreateWindow来创建子窗口控件,通过MoveWIndow来改变它的位置和大小,父窗口的Window procedure将消息发送到子窗口,然后子窗口控件做处理,在发送消息回到父窗口的window procedure.

4.在你的窗口里面直接用子窗口控件比在对话筐中用要多做一些烦琐的低层的东西.因为对话框有对话框管理器实现了你的程序与子窗口控件的隔离.举个例子来说,在程序里面直接用子窗口控件时,子窗口不能自由的用Tab来或者鼠标来切换输入焦点,当子窗口做完了输入任务之后,它并不能把焦点传回给父窗口.

下面来列出几个在用子窗口控件时经常要处理的消息:

1.WM_DRAWITEM:在OWNER_DRAWN Button , combo box, list box, or menu 需要进行绘图时,由子窗口传给父窗口.wParam:子控件的id,如果是menu就是0.lParam:指向一个DRAWITEMSTRUCT 的指针,这个结构体里面有进行绘图的所有信息.

2.WM_CTLCOLORXXX:在XXX类型控件需要重新绘制时,传给父窗口的消息.wParam:用于绘制子窗口的HDC.lParam:子窗口的句柄


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/zxy119/archive/2006/12/26/1463671.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值