|
发表于 2024-5-17 21:30:47
|
显示全部楼层
是的,在C++中使用Windows API也可以实现在菜单栏按钮点击后弹出新窗口的功能。下面是一个简单的示例代码:
- #include <Windows.h>
- LRESULT CALLBACK NewWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- switch (msg)
- {
- case WM_CREATE:
- // 在新窗口中添加一些控件
- CreateWindow(TEXT("STATIC"), TEXT("这是一个新窗口"), WS_VISIBLE | WS_CHILD, 10, 10, 150, 20, hwnd, NULL, NULL, NULL);
- CreateWindow(TEXT("BUTTON"), TEXT("关闭"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 10, 40, 80, 30, hwnd, NULL, NULL, NULL);
- break;
- case WM_COMMAND:
- if (LOWORD(wParam) == 1)
- {
- // 关闭按钮被点击时关闭新窗口
- DestroyWindow(hwnd);
- }
- break;
- case WM_CLOSE:
- // 新窗口关闭时销毁窗口句柄
- DestroyWindow(hwnd);
- break;
- }
- return DefWindowProc(hwnd, msg, wParam, lParam);
- }
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- // 注册新窗口类
- WNDCLASS wc = {};
- wc.lpfnWndProc = NewWindowProc;
- wc.hInstance = hInstance;
- wc.lpszClassName = TEXT("NewWindowClass");
- RegisterClass(&wc);
- // 创建主窗口
- HWND hwnd = CreateWindow(TEXT("BUTTON"), TEXT("主窗口"), WS_OVERLAPPEDWINDOW, 100, 100, 400, 300, NULL, NULL, hInstance, NULL);
-
- // 创建菜单栏
- HMENU hMenu = CreateMenu();
- HMENU hSubMenu = CreatePopupMenu();
- AppendMenu(hSubMenu, MF_STRING, 1, TEXT("新窗口"));
- AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hSubMenu, TEXT("文件"));
- // 将菜单栏关联到主窗口
- SetMenu(hwnd, hMenu);
- // 显示主窗口
- ShowWindow(hwnd, nCmdShow);
- UpdateWindow(hwnd);
- // 消息循环
- MSG msg;
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return (int)msg.wParam;
- }
复制代码
该代码使用了Windows API函数来创建主窗口、菜单栏以及处理消息。当菜单栏中的"新窗口"被点击时,将创建一个新的窗口,并在新窗口中添加一个标签和一个按钮。点击新窗口中的"关闭"按钮或者关闭新窗口时,将销毁新窗口。主窗口和菜单栏的其他功能可以根据需要进行扩展。
请注意,此代码仅适用于Windows操作系统。如果要在其他操作系统上运行,请使用相应平台的API。同时也需要注意,在Visual Studio等IDE中设置好相应的编译器选项和链接选项。
希望这对你有所帮助!如果你还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|