如何用Windows API制作MessageBox的功能

问题描述 投票:0回答:1

我想创建一个可重用的函数,每当我想使用 MessageBox 时都可以重用它,但在下面的代码中,有一个错误:

  • 标识符“Lmessage”未定义

  • 标识符“Ltitle”未定义

  • 'Lmessage':未声明的标识符

  • 'Ltitle':未声明的标识符

#include <iostream>
#include <string>
#include <Windows.h>

#define WIN32_LEAN_AND_MEAN
#define NOMINMAX

int takePrompt(int number, std::string message, std::string title) {
    return MessageBox(0, TEXT(message), TEXT(title), MB_YESNO);
}

int main() {
    if (takePrompt(0, "", "1") == IDYES) {
        MessageBox(0, TEXT(""), TEXT("1.1"), MB_ICONEXCLAMATION);
    } else {
        if (takePrompt(0, "", "2") == IDYES) {
            MessageBox(0, TEXT(""), TEXT("2"), MB_ICONEXCLAMATION);
        } else {
            while (takePrompt(0, "", "3") != IDNO) {
                if (takePrompt(0, "", "4") == IDYES) {
                    MessageBox(0, TEXT(""), TEXT("4.2"), MB_ICONEXCLAMATION);
                } else {
                    return 1;
                }
            }
        }
    }

    return 0;
}

我尝试放入 std::string title、message,但没有解决问题。我只想要一个可重用的 MessageBox,我可以随时更改它并提供价值

winapi messagebox
1个回答
0
投票

您在这里滥用了

TEXT
。当它是一个将 ANSI 常量字符串更改为宽字符串的编译时宏时,您给它一个变量。

如果您的函数需要 8 位字符串,则不应尝试将它们转换为宽字符串,而应直接使用 ANSI 版本的

MessageBox
:

int takePrompt(int number, std::string message, std::string title) {
    return MessageBoxA(0, message, title, MB_YESNO);
}
© www.soinside.com 2019 - 2024. All rights reserved.