文章目录
- 其他章节
- 创建按钮
- 指定按钮显示的文本
- 按钮样式
其他章节
开始之前,需要学习以下章节:
创建窗口
窗口过程函数
创建按钮
要在窗口上显示一个按钮,我们可以在窗口过程函数中处理 WM_CREATE 消息,在该消息中创建按钮并设置相关属性。
接下来我们使用CreateWindow 函数创建一个窗口或控件,并返回其句柄 (handle)。
示例代码如下:
#include <windows.h>
// 声明窗口过程函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
void CreateButton(HWND hWnd);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 定义窗口类
WNDCLASS wc = {0};
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);
wc.lpszClassName = "MyWinClass";
// 注册窗口类
if (!RegisterClass(&wc))
{
MessageBox(NULL, "窗口注册失败!", "错误", MB_ICONERROR);
return 1;
}
// 创建窗口
HWND hWnd = CreateWindow("MyWinClass", "我的窗口", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
NULL, NULL, hInstance, NULL);
if (!hWnd)
{
MessageBox(NULL, "窗口创建失败!", "错误", MB_ICONERROR);
return 1;
}
// 显示窗口
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
// 窗口过程函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_CREATE:
CreateButton(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
void CreateButton(HWND hWnd)
{
HWND hButton = CreateWindow("BUTTON", "按钮", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
50, 50, 100, 30,
hWnd, NULL, NULL, NULL);
}
在上面的代码中,我们定义了一个新函数 CreateButton,该函数在 WM_CREATE 消息中被调用。在该函数中,使用 CreateWindow 函数创建一个按钮对象,并设置按钮的属性,包括文本内容、位置和大小等。通过指定 WS_VISIBLE 和 WS_CHILD 样式,按钮将在窗口上显示并成为窗口的子控件。
当接收到 WM_DESTROY 消息时,我们调用 PostQuitMessage 函数来终止消息循环并退出程序。
创建按钮的关键代码如下:
HWND hButton = CreateWindow("BUTTON", "确认", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
50, 50, 100, 30,
hWnd, NULL, NULL, NULL);
该函数的第一个参数是一个字符串类型,用于指定创建的控件的类名。使用 “BUTTON” 表示创建一个按钮控件,注意,这个类名是预定义的,不是我们自己自定义设置的,所以如果要创建按钮的话,这里只能填入"BUTTON"。
第二个参数是按钮显示的文本内容。第三个参数是窗口样式。第四个参数是按钮控件的位置和大小
第五个参数 hWnd 是指定按钮的父窗口句柄,即按钮所属的窗口。
第六个参数 NULL 是按钮的菜单句柄,这里我们不使用菜单,所以设置为 NULL。
第七和第八个参数 NULL 是指定按钮的实例句柄和扩展风格的指针,这里我们不需要使用,所以设置为 NULL。
通过上述参数,CreateWindow 函数将创建一个按钮控件,并返回按钮控件的句柄 (HWND hButton)。
指定按钮显示的文本
CreateWindow函数的第二个参数同样是字符串类型,用于指定按钮控件的上显示的文本内容,即按钮上显示的文字。这个我们可以自定义任意内容,用于表示该按钮的作用,比如说"确认","取消"等等,如下图所示:
按钮样式
接下来我们就来学习一下,如何改变这按钮的古老样式:
按钮样式与函数封装