3.4.4 Windows控件的应用
如何应用Windows控件,在Visual Studio C++(www.cppentry.com)编程(www.cppentry.com)中是一项基本的技能。本节将对控件的使用展开介绍。
下面是一些常用控件的简单列表:
(1)静态文本框:可以容纳文字,文字不可编辑。
(2)编辑框:可以输入和编辑文字的文本框。
(3)按钮:包括很多子按钮类型。如按钮、复选框、单选按钮。
(4)列表框:以列表形式显示多个子项目的框。
(5)滚动条:包括垂直滚动条和水平滚动条。
毋庸置疑,即使最复杂的窗口也是由这些基本的控件组合而成的。例如:学生信息管理系统中的学生信息录入窗口就是由多个静态文本框,编辑框,列表框和按钮组成。因此只要掌握其中一种或者几种基本控件的使用就可以完成大部分的程序功能。另外由于控件的使用基本上大同小异,可以举一反三。所以本节主要讨论按钮控件的使用,对于其他控件的使用细节可以查阅MSDN。
1.创建按钮控件
Windows支持大量的按钮类型。对于程序员来说只需要熟练掌握基本按钮,复选框和单选框等几种常见的按钮类型就差不多了。本节在这里也主要讨论如何创建按钮,如何对所传递的消息反应。如表3-10所示列出了一些常用的按钮类型。
表3-10 常用的按钮类型
创建一个按钮可以使用Windows API函数CreateWindowEX(),并向该函数传递确切的参数即可。首先需要设定该类名为“button”,然后需要设定样式标志为WS_CHILD或者WS_VISIBLE,并从表3-10中选择一种按钮样式,然后将菜单句柄或HMENU放置在正常的位置上,发送表示该按钮的标志符。实例3-12创建了一个标志符为200,带有“push”文本的按钮控件。
实例3-12:普通按钮控件的创建
CreateWindowEX(NULL, //扩展类型,一般为NULL “button”, //窗口类名 “push”, //按钮的文本 WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, //按钮类型 10, 10 , //按钮坐标位置(x, y) 100, 20, //按钮的大小,长和宽 main_window_handle, //父窗口的句柄 (HMENU)(200), //按钮的ID hinstance, //应用程序的句柄 NULL); //额外的创建参数,一般为NULL |
2.处理按钮事件
按上面的实例创建好按钮控件后,就可以对按钮进行操作了。当用户按下按钮时,按钮会向父窗口的WinProc()传递WM_COMMAND消息,该消息传递的参数如下:
msg:WM_COMMAND //消息类型 LOWORD(wparam):200 //产生消息的按钮的id HIWORD(wparam):0 //通报代码 lparam:hbutton //按钮的句柄 |
父窗口的WinProc()在接收到按钮消息后,就可以对按钮的操作进行处理(回应)。按钮消息参数中的通报代码很重要,它可以告诉父窗口在按钮上发生的具体事件。如表3-11所示列出了可能的通报代码和值。其中BN_CLICK和BN_DOUBLECLICKED分别表示按钮的单击和双击事件。
表3-11 按钮的通报代码和值
父窗口接收到按钮的WM_COMMAND 消息后,可以在自己的消息响应函数里对该消息进行响应或者忽略。响应的方法如实例3-13所示。
实例3-13:响应按钮的WM_COMMAND消息。
case WM_COMMAND: { //判断按钮的id if(LOWORD(wparam) == 200) { //处理单击事件 if(HIWORD(wparam) == 0) { //处理过程 } } //处理其他按钮的WM_COMMAND消息 retrun(0); } break; |
本书附属的程序光碟给出了一个实例。该实例创建了各种类型的按钮,并给出了按钮单击事件的处理过程,通过对该实例的分析,可以更好地理解按钮的创建和使用。
3.向按钮控件发送消息
上一部分介绍了父窗口如何接收到按钮控件的消息并对消息进行处理,这一部分将介绍父窗口如何向子控件(如按钮)传递消息。
实际上由于子控件也属于窗口,因此它和其他窗口一样可以接收消息,它有自己的WinProc()函数,并使用默认的处理方式对收到的消息进行处理。向子控件发送消息是改变子控件状态的常用方法。就按钮而言,有大量的消息可以传递到按钮控件上,程序员一般可以使用Windows API 函数SendMessage()来实现消息的传递。函数原型:
LRESULT SendMessage( HWND hWnd, //将接收消息的窗口的句柄 UINT Msg, //指定被发送的消息 WPARAM wParam, //指定附加的消息指定信息 LPARAM IParam //指定附加的消息指定信息 ); 返回值: 返回值指定消息处理的结果,依赖于所发送的消息。 |
下面是一些常用的向按钮发送消息的语句:
//模拟单击按钮,hwndbutton为按钮控件句柄,以下同上 SendMessage( hwndbutton, BM_CLICK, 0, 0 ); //用于在复选框中或单选按钮中设置为选定 SendMessage( hwndbutton, BM_SETCHECK, BST_CHECKED, 0 ); //用来检索该按钮选定的状态,返回值为状态值,可能的返回值如表3-12所示 SendMessage( hwndbutton, BM_GETCHECK, 0, 0 ); //用来突出显示用户选定的按钮,突出显示时wParam参数为1 SendMessage( hwndbutton, BM_SETSTATE, 1, 0 ); //用来获取该按钮的常规状态,可能的返回值如表3-13所示 SendMessage( hwndbutton, BM_GETSTATE, 1, 0 );
|
表3-12 检索该按钮的状态可能的返回值
表3-13 按钮的常规状态
其他控件的使用基本上和按钮控件类似,详细的说明可以参见MSDN。
【责任编辑:
杜书 TEL:(010)68476606】