Chinaunix首页 | 论坛 | 博客
  • 博客访问: 376649
  • 博文数量: 214
  • 博客积分: 770
  • 博客等级: 军士长
  • 技术积分: 1969
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-08 01:22
文章分类

全部博文(214)

文章存档

2013年(110)

2012年(104)

我的朋友

分类: 嵌入式

2012-12-27 19:52:25

在wince开发者参考者一书中有如下内容: 

如果没有Windows控件库的话,编写Windows程序将会是一件缓慢而又艰苦的事情。并且,每个程序将会有自己的外观和反应。这会迫使用户对每种新的应用程序都要学习一套新的操作方式。幸运的是,通过操作系统提供的一系列控件,避免了上述情况的发生。简单的说,控件只不过是预先定义好的窗口类。每个类有一个Windows提供的特定的窗口过程,给这些控件提供预定义的用户和编程接口。

因为控件只是又一个窗口,所以可用CreateWindows或CreateWindowEx来创建窗口。控件是通过事件来通知父窗口的,而事件中包含WM_COMMAND消息,并且控件ID和句柄都编码在消息的参数中。

和所有的消息一样,WM_COMMAND含有wParam和lParam这两个通用参数。对一个WM_COMMAND消息来说,wParam的高字位含有通知码,用来说明发送该消息的原因。wParam的低字位含有发送该消息的控件的ID,通常在创建控件的时候定义该ID,为了更好的使用,应该保证ID在控件的所有兄弟窗口中是唯一的。lParam则包含了控件窗口的句柄。通常,通过控件ID来追踪WM_COMMAND消息来源比通过控件的窗口句柄来追踪要更容易一些,不过这两个信息都可以从该消息中获得。下面是典型的WM_COMMAND消息处理程序中的头几行代码:
case WM_COMMAND:
    WORD idItem, wNotifyCode;
    HWND hwndCtl;
  
    // Parse the parameters.
    idItem = (WORD) LOWORD (wParam);
    wNotifyCode = (WORD) HIWORD(wParam);
    hwndCtl = (HWND) lParam;

从这里可以看出,WM_COMMAND消息处理程序通常是用控件ID和通知码来判断WM_COMMAND消息发送的原因。

通过给控件发送预定义的消息,可以配置和操纵控件。除了这些事情,应用程序可以设置按钮的状态,给列表框增加或删除项,设置编辑框中选择的文本,所有这些都是通过给控件发送消息来完成的。控件通常是通过ID来标识的,但许多Window函数都要求用控件的句柄。这时可以用GetDlgItem函数来进行简单的转换。函数原型如下:
HWND GetDlgItem(HWND hDlg, int nIDDlgItem);
两个参数分别是控件的父窗口句柄和控件的ID。虽然从名字上看这个函数只能用在对话框上,但实际上它能用在任何窗口的控件上。关于对话框我将在第六章进行讨论。

另外一个很方便的函数是SendDlgItemMessage,用于给控件发送消息。该函数发送消息给指定ID的子窗口。函数原型如下:
LONG SendDlgItemMessage (HWND hParent, int nIDChild, UINT Msg, WPARAM wParam, LPARAM lParam);
这些参数和SendMessage中的很类似。实际上,下面的这段代码从功能上讲和SendDlgItemMessage是一样的。
LONG SendMessage (GetDlgItem (hParent, nIDChild), Msg, wParam, lParam);
唯一的不同在于方便性,SendMessage没有嵌入GetDlgItem而已。

学习后对按钮的消息相关点有了了解:

1. SendMessage和PostMessage;

PostMessage是将消息发给窗口所属的线程的消息队列,并立即返回。

SendMessage将消息发送出去后,直到处理完毕,返回

2. BN_CLICK和BN_CLICKED;WM_LBUTTONUP和WM_LBUTTONDOWN

从硬件出来的信息只有WM_KEYDOWN、WM_KEYUP、WM_LBUTTONUP、WM_LBUTTONDOWN等消息。Button这类控件处理这类信息并产生WM_CLICKED消息,这类信息以WM_COMMAND的形式发送出来。Button控件也给应用程序提供了模拟按键的接口,通过发送WM_CLICK消息给Button控件,Button控件接收后,发送WM_CLICKED给其父窗口处理。

3. BN_GETCHECK和BN_SETCHECK;

应用程序发送消息BN_GETCHECK来获取radio button或者check box的状态。

应用程序发送消息BN_SETCHECK来设置radio button或者check box的状态。

4. BN_SETFOCUS和BN_KILLFOCUS;

当button获取或者失去focus时,Button发送该消息。

阅读(883) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~