资源描述:
《windows sdk编程系列文章08 ---- 子窗口控件》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、windowssdk编程系列文章----子窗口控件2008-04-1017:49本课中我们将探讨控件,这些控件是我们程序主要的输入输出设备。理论:WINDOWS提供了几个预定义的窗口类以方便我们的使用。大多数时间内,我们把它们用在对话框中,所以我们一般就它们叫做子窗口控件。子窗口控件会自己处理消息,并在自己状态发生改变时通知父窗口。这样就大大地减轻了我们的编程工作,所以我们应尽可能地利用它们。本课中我们把这些控件放在窗口中以简化程序,但是大多数时间内子窗口控件都是放在对话框中的。我们示例中演示的子窗口控件包括:按钮、下拉菜单、检查框、单选按钮、编辑框等。使用子窗口
2、控件时,先调用CreateWindow或CreateWindowEx。在这里由于WINDOWS已经注册了这些子控件,所以无须我们再注册。当然我们不能改变它们的类名称。譬如:如果您想产生一个按钮,在调用上述两个函数时就必须指定类名为"button"。其他必须指定的参数还有父窗口的句柄和将要产生的子控件的ID号。子控件的ID号是用来标识子控件的,故也必须是唯一的。子控件产生后,当其状态改变时将会向父窗口发送消息。一般我们应在父窗口的WM_CREATE消息中产生字控件。子控件向父窗口发送的消息是WM_COMMAND,并在传递的参数wPara的底位中包括控件的ID号,消息
3、号在wParam的高位,lParam中则包括了子控件的窗口的句柄。各类控件有不同的消息代码集,详情请参见msdn参考手册。父窗口也可以通过调用函数SendMessage向子控件发送消息,其中第一个参数是子控件的窗口句柄,第二个参数是要发送的消息号,附加的参数可以在wParam和lParam中传递,其实只要知道了某个窗口的句柄就可以用该函数向其发送相关消息。所以产生了子窗口后必须处理WM_COMMAND消息以便可以接收到子控件的消息。例子:见光盘FirstWindow7我们将产生一个窗口,在该窗口中有一个编辑框和一个按钮。当您按下按钮时,会弹出一个对话框其中显示了您
4、在编辑框中输入的内容。另外,该应用程序还有一个菜单,其中有四个菜单项:1.SayHello--把一个字符串输入编辑控件;2.ClearEditBox--清除编辑控件中的字符串;3.GetText--弹出对话框显示编辑控件中的字符串;4.Exit--退出应用程序#include"Windows.h"#include"tchar.h"#defineIDM_HELLO1#defineIDM_CLEAR2#defineIDM_GETTEXT3#defineIDM_EXIT4#defineButtonID1#defineEditID 2TCHARMenuName[]=_T
5、("FirstMenu");TCHARTestString[]=_T("Wow!I'minaneditboxnow");HWNDhWinMain;HWNDhWndEdit;HWNDhWndButton;TCHARszClassName[]=_T("MyClass");TCHARszCaptionMain[]=_T("MyFirstWindow!");TCHARbuffer[512];WNDCLASSEXstdWndClass;HINSTANCEg_hInstance;LRESULTCALLBACKProcWinMain( HWNDhWnd,
6、 UINTMsg, WPARAMwParam, LPARAMlParam){ switch(Msg) { caseWM_CREATE: { hWndEdit=CreateWindowEx(WS_EX_CLIENTEDGE,_T("edit"),NULL,WS_CHILD
7、WS_VISIBLE
8、WS_BORDER
9、ES_LEFT
10、ES_AUTOHSCROLL, 50,35,200,25,hWnd,(
11、HMENU)EditID,g_hInstance,NULL); if(hWndEdit) SetFocus(hWndEdit); hWndButton=CreateWindowEx(NULL,_T("button"),_T("MyFirstButton"),WS_CHILD
12、WS_VISIBLE
13、BS_DEFPUSHBUTTON, 75,70,140,25,hWnd,(HMENU)ButtonID,g_hInstance,NULL); } break;
14、 case