零点柒 2021-03-22 20:17 采纳率: 40%
浏览 18

在C++中,Windows GUI编程中如何做到按下不同按钮弹出不同消息框?

#include<windows.h>

 
int WINAPI WinMain(
        HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow)
{
    int a=MessageBox(nullptr,TEXT("456"),TEXT("202"),MB_YESNOCANCEL);
    if(a=1)
     MessageBox(nullptr,TEXT("你按下了是按钮"),TEXT("提示"),MB_OK);
程序到这一步,已知在弹出窗口中,有“是,否,取消”三个按钮,如何做到按下不同按钮弹出不同消息框?比如,按下“是”,弹出“你按下了是按钮”;
按下“否”,弹出“你按下了否按钮”;按下“取消”,弹出“你按下了取消按钮”。
  • 写回答

1条回答 默认 最新

  • 微软技术分享 全栈领域优质创作者 2023-06-10 16:50
    关注

    您好,使用GetMessage接受消息,再通过CALLBACK WndProc回调分别处理不同的消息即可实现你想要的效果,您应该是在学习基本的消息循环机制吧,给你一段完整的演示案例,您可以编译运行试试。

    #include <Windows.h>
    
    // 按钮的标识符
    #define BUTTON_YES 1
    #define BUTTON_NO 2
    #define BUTTON_CANCEL 3
    
    // 消息处理函数
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        switch (msg)
        {
        case WM_CREATE:
            // 创建按钮
            CreateWindowW(L"BUTTON", L"Yes", WS_VISIBLE | WS_CHILD, 10, 10, 100, 30, hwnd, (HMENU)BUTTON_YES, NULL, NULL);
            CreateWindowW(L"BUTTON", L"No", WS_VISIBLE | WS_CHILD, 10, 50, 100, 30, hwnd, (HMENU)BUTTON_NO, NULL, NULL);
            CreateWindowW(L"BUTTON", L"Cancel", WS_VISIBLE | WS_CHILD, 10, 90, 100, 30, hwnd, (HMENU)BUTTON_CANCEL, NULL, NULL);
            break;
    
        case WM_COMMAND:
            {
                int buttonId = LOWORD(wParam);
                switch (buttonId)
                {
                case BUTTON_YES:
                    MessageBoxW(hwnd, L"你按下了是按钮", L"消息", MB_OK);
                    break;
    
                case BUTTON_NO:
                    MessageBoxW(hwnd, L"你按下了否按钮", L"消息", MB_OK);
                    break;
    
                case BUTTON_CANCEL:
                    MessageBoxW(hwnd, L"你按下了取消按钮", L"消息", MB_OK);
                    break;
                }
            }
            break;
    
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
    
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
        }
    
        return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        // 注册窗口类
        WNDCLASSW wc = {0};
        wc.lpfnWndProc = WndProc;
        wc.hInstance = hInstance;
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
        wc.lpszClassName = L"MyWindowClass";
        RegisterClassW(&wc);
    
        // 创建窗口
        HWND hwnd = CreateWindowW(L"MyWindowClass", L"Button Test", WS_OVERLAPPEDWINDOW,
                                  CW_USEDEFAULT, CW_USEDEFAULT, 300, 200,
                                  NULL, NULL, hInstance, NULL);
    
        // 显示窗口
        ShowWindow(hwnd, nCmdShow);
        UpdateWindow(hwnd);
    
        // 消息循环
        MSG msg;
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return (int)msg.wParam;
    }
    

    这段代码中,当你按下不同的按钮,会弹出不同的提示信息。

    img

    评论

报告相同问题?

悬赏问题

  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计