win api制作多个菜单式按钮
时间: 2023-11-13 15:04:13 浏览: 34
WinAPI 中可以使用 CreateWindow 函数创建多个菜单式按钮,每个按钮都有一个唯一的标识符和一个相应的消息处理函数。以下是一个简单的示例代码,它创建了两个菜单式按钮并为每个按钮添加了单击事件处理函数:
```c++
#include <windows.h>
// 声明窗口过程函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// 声明按钮的消息处理函数
void OnButtonClick(HWND hWnd, UINT buttonId);
// WinMain 函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 注册窗口类
WNDCLASS wc = {};
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszClassName = "MyWindowClass";
RegisterClass(&wc);
// 创建窗口
HWND hWnd = CreateWindow("MyWindowClass", "My Window", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL);
// 创建第一个按钮
HWND btn1 = CreateWindow("BUTTON", "Button 1", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
50, 50, 100, 30, hWnd, (HMENU)1, hInstance, NULL);
// 创建第二个按钮
HWND btn2 = CreateWindow("BUTTON", "Button 2", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
50, 100, 100, 30, hWnd, (HMENU)2, hInstance, NULL);
// 显示窗口
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// 消息循环
MSG msg = {};
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
// 窗口过程函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_COMMAND:
OnButtonClick(hWnd, LOWORD(wParam));
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
// 按钮的消息处理函数
void OnButtonClick(HWND hWnd, UINT buttonId)
{
switch (buttonId)
{
case 1:
MessageBox(hWnd, "Button 1 clicked!", "My Window", MB_OK);
break;
case 2:
MessageBox(hWnd, "Button 2 clicked!", "My Window", MB_OK);
break;
}
}
```
这个示例程序创建了两个菜单式按钮,分别对应标识符为 1 和 2。每个按钮都有一个单击事件处理函数 OnButtonClick,它会在单击按钮时弹出一个消息框。在主窗口的窗口过程函数 WndProc 中,当收到 WM_COMMAND 消息时会调用相应的按钮事件处理函数。