我在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是一个整数。如何在消息框中显示它?
我收到以下错误:指针添加无效。
另外,我可以选择消息框的图标吗?在这种情况下的问题。
答案 0 :(得分:9)
你走了。您需要在调用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的文档。
答案 1 :(得分: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构建中使用narrow(char *)字符串(参见'_TCHAR映射到'{3}}中的'部分)
有关详细信息,请参阅Project Options
答案 2 :(得分:1)
我不确定如何在C ++ Building中执行此操作,但您需要启用我认为像multybit字符这样的东西,但您需要使用编译器检查文档。
答案 3 :(得分: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;
}
它会起作用!