特殊说明:版权归个人所有,请勿转载,谢谢合作。
在Win32 SDK编程中,常用控件有静态文本框、编辑框、按钮、列表框、滚动条等。另外,还有一些按钮的子集控件,如:复选框、单选按钮等。对于这些控件,在应用中有一定的共性,精通其中一个控件,其它控件学习起来就会相对简单。除了Richedit控件以外,其他控件的可执行代码都在comctl32.dll库中。Richedit控件可执行代码存放在Riched20.dll库中。
10.1 静态控件
静态控件(Static Text)可以说是日常应用中最为广泛的一种控件,它主要用于文本显示、矩形框、位图、光标等可视化对象的显示,但它不能接受输入,也不提供任何输出。在日常应用中,以文本显示的应用最为广泛,其他功能很少用到。静态控件通过CreateWindow或CreateWindowEx函数创建,下面以CreateWindow函数为列,创建一个静态实现文本功能的控件。
g_hStaticWnd = CreateWindow("STATIC", "MyStatic", WS_CHILD | WS_VISIBLE, 50, 50, 80, 20, hWnd, NULL, g_hIns, NULL);
返回值g_hStaticWnd,用来存放静态控件的句柄,方便以后使用。如果只是为了显示文本内容,也可以不接受返回值。CreateWindow函数中各个参数的含义可以参见3.2.3章节,在那里有详细的介绍。这里只针对功能进行说明。
第一个参数“STATIC”,说明创建的窗口控件为静态控件;
第二个参数“MyStatic”,静态控件显示的文字;
第三个参数“WS_CHILD | WS_VISIBLE”,此控件为子窗口模式,创建完成后并且可见;
第四、五个参数“50, 50”,窗口的X、Y位置分别为50;
第六、七个参数“80, 20 ”,静态控件的宽为80,高为20;
第八个参数“hWnd”,指定父窗口句柄;
第九个参数“NULL”,窗口无菜单;
第十个参数“g_hIns”,进程句柄,静态控件属于当前进程;
第十一个参数“NULL”,附加参数。
静态控件创建过程相对简单,原因是只作为文本显示,无控制要求。静态控件创建时,需要先定义一个HWND的句柄类型的变量,用来存放CreateWindow函数的返回值,目的是再次控件进行控制时,需要用到句柄。同时在WM_CREATE消息处,通过CreateWindow函数创建即可。具体代码如【例10-1】所示。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; // 结构体包含了用于绘制 // 窗口客户区的信息 HDC hdc; // 设备环境句柄 int wmId, wmEvent; char szContext[20] = { 0 }; // 消息处理 // switch (message) { // 创建窗口时响应的事件 case WM_CREATE: // 创建静态文本控件 g_hStaticWnd = CreateWindow("STATIC", "MyStatic", WS_CHILD | WS_VISIBLE, 50, 50, 80, 20, hWnd, NULL, g_hIns, NULL); break; // 菜单响应事件 case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { default: return DefWindowProc(hWnd, message, wParam, lParam); }//end switch break; // 图形绘制事件 case WM_PAINT: hdc = BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); break; // 窗口销毁消息,关闭窗口时响应。 case WM_DESTROY: PostQuitMessage(0); break; default: // 调用系统默认消息处理,即交给系统处理。 return DefWindowProc(hWnd, message, wParam, lParam); }//end switch return 0; }
程序执行结果如图10.1所示。
- 图10.1 静态控件创建结果
如果静态控件的内容,准备在代码中进行设置,可以使用SetWindowText函数来设置显示的内容,使用GetWindowText函数来实现获得显示的内容。