特殊说明:版权归个人所有,请勿转载,谢谢合作。
在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函数来实现获得显示的内容。