文章目录
前言
Windows程序设计15:Win32窗口控件的创建与响应。
一、控件的窗口类注册
1.说明
使用CreateWindow来创建窗口的时候要进行窗口类的注册。但是如果创建的是系统预定义的一些控件的时候,就不需要自己注册窗口类了,系统已经帮我们注册好了。例如:按钮为WC_BUTTON,编辑框为WC_EDIT,静态文本框为WC_STATIC等等。使用时要包含头文件:#include<commctrl.h>
控件的创建时机:控件最起码要等到父窗口创建完成之后才能在父窗口上创建各个子控件,因此在下面两个地方创建控件比较合适。
1.在WinMain函数中进行创建,即调用完CreateWindow函数创建父窗口之后,立即调用CreateWindow创建主窗口上面的子控件。
2.在调用CreateWindow创建主窗口返回之前,窗口函数会收到WM_CREATE消息。此时我们响应他的号召,继续创建各个子控件。!!!!!这种方法是常规的正常做法,后续也使用这种方法,建议大家使用这种做法。如下图所示
在回调函数的switch结构中判断消息号进行创建子控件。
2.使用示例
在父窗口上建立一个按钮窗口,代码如下
#include<windows.h>
#include<tchar.h>
# include<commctrl.h>
static TCHAR szWindowClass[] = _T("WindowClass");
static TCHAR szTitle[] = _T("窗口程序示例");
//第五步:窗口函数中处理窗口消息
//hwnd为窗口句柄;uMsg为消息号;wParam
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
TCHAR greeting[] = _T("各位晚上好");
switch (uMsg)
{
case WM_CREATE:
{
INT IDC_BUTTON_1 = 200; // 定义该按钮的ID
HWND hButtonWnd = CreateWindow(WC_BUTTON, _T("按钮示例"), WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 100, 100, 100, 50, hWnd, (HMENU)IDC_BUTTON_1, NULL, NULL); //创建 子控件
break;
}
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 5, 5, greeting, _tcslen(greeting));
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);