4

我在 C++ Builder 中使用 VCL Forms 应用程序。我可以在一些代码中获得一些帮助,以显示带有 YesNoCancel 按钮的消息框,然后检测是否按下了是、否或取消按钮。

这是我的代码:

if(MessageBox(NULL, "Test message", "test title",  MB_YESNOCANCEL) == IDYES)
{

}

我已经包括以下内容:

#include <windows.h>

我收到以下错误:

E2034 无法将 'char const[13]' 转换为 'const wchar_t *'

E2342 参数“lpText”中的类型不匹配(需要“const wchar_t *”,得到“const char *”)

更新

这是我的代码:

const int result = MessageBox(NULL, L"You have " + integerNumberOfImportantAppointments + " important appointments. Do you wish to view them?", L"test title",  MB_YESNOCANCEL);

值: integerNumberOfImportantAppointments 是一个整数。如何在消息框中显示它?

我收到以下错误:无效的指针添加。

另外,我可以选择消息框的图标吗?在这种情况下的一个问题。

4

4 回答 4

15

干得好。您需要在调用中使用宽字符,MessageBox并且需要将结果存储在变量中,然后再确定下一步该做什么。

const int result = MessageBox(NULL, L"Test message", L"test title",  MB_YESNOCANCEL);

switch (result)
{
case IDYES:
    // Do something
    break;
case IDNO:
    // Do something
    break;
case IDCANCEL:
    // Do something
    break;
}

更新,以下问题编辑:

// Format the message with your appointment count.
CString message;
message.Format(L"You have %d important appointments. Do you wish to view them?", integerNumberOfImportantAppointments);

// Show the message box with a question mark icon
const int result = MessageBox(NULL, message, L"test title",  MB_YESNOCANCEL | MB_ICONQUESTION);

您应该阅读MessageBox的文档。

于 2012-09-25T09:03:20.323 回答
3

我没有使用 C++ Builder 的经验,但您似乎正在使用 ANSI 字符串,其中需要 UNICODE(实际上是宽字符,但我们暂时忽略细节)字符串。尝试这个:

if(MessageBox(NULL, L"Test message", L"test title",  MB_YESNOCANCEL) == IDYES)

更好的是,为了确保您的字符串符合您的应用程序设置,您可以使用:

if(MessageBox(NULL, _T("Test message"), _T("test title"),  MB_YESNOCANCEL) == IDYES)

这将导致在 UNICODE 构建中使用宽 (wchar_t*) 字符串,在非 UNICODE 构建中使用窄 (char*) 字符串(请参阅项目选项中的“_TCHAR 映射到”部分)

有关更多详细信息,请参见此处

于 2012-09-25T08:15:13.100 回答
1

我不确定如何在 C++ Building 中执行此操作,但您需要启用我认为类似多位字符的功能,但您需要使用编译器检查文档。

于 2012-09-25T08:48:11.717 回答
0

上面写的所有内容对于 VS 2015 来说可能已经过时了。就我而言

 MessageBox(NULL, L"Test message", L"test title",  MB_YESNOCANCEL);

不起作用,因为第一个参数过多。错误输出是:

to many arguments in functional call.

如果我写:

const int result = MessageBox( L"Test message", L"test title",  MB_YESNOCANCEL); //Without NULL

switch (result)
{
case IDYES:
    // Do something
    break;
case IDNO:
    // Do something
    break;
case IDCANCEL:
    // Do something
    break;
}

这将是工作!

于 2018-02-28T11:06:53.300 回答