如何在MessageBox c ++中显示变量?
string name = "stackoverflow";
MessageBox(hWnd, "name is: <string name here?>", "Msg title", MB_OK | MB_ICONQUESTION);
我希望以下列方式展示它(#1):
"name is: stackoverflow"
这个?
int id = '3';
MessageBox(hWnd, "id is: <int id here?>", "Msg title", MB_OK | MB_ICONQUESTION);
我希望以下列方式展示它(#2):
id is: 3
如何使用c ++执行此操作?
答案 0 :(得分:8)
创建一个临时缓冲区来存储您的字符串并使用sprintf
,根据您的变量类型更改格式。对于您的第一个示例,以下内容应该有效:
char buff[100];
string name = "stackoverflow";
sprintf_s(buff, "name is:%s", name.c_str());
cout << buff;
然后使用buff作为字符串参数调用消息框
MessageBox(hWnd, buff, "Msg title", MB_OK | MB_ICONQUESTION);
将int更改为:
int d = 3;
sprintf_s(buff, "name is:%d",d);
答案 1 :(得分:2)
这可以通过宏
来完成#define MSGBOX(x) \
{ \
std::ostringstream oss; \
oss << x; \
MessageBox(oss.str().c_str(), "Msg Title", MB_OK | MB_ICONQUESTION); \
}
使用
string x = "fred";
int d = 3;
MSGBOX("In its simplest form");
MSGBOX("String x is " << x);
MSGBOX("Number value is " << d);
或者,你可以使用varargs(老式的方式:不是C ++ 11的方式,我还没有掌握)
void MsgBox(const char* str, ...)
{
va_list vl;
va_start(vl, str);
char buff[1024]; // May need to be bigger
vsprintf(buff, str, vl);
MessageBox(buff, "MsgTitle", MB_OK | MB_ICONQUESTION);
}
string x = "fred";
int d = 3;
MsgBox("In its simplest form");
MsgBox("String x is %s", x.c_str());
MsgBox("Number value is %d", d);
答案 2 :(得分:1)
看到人们仍然在使用缓冲区是不好的。这在 1998 年是不必要的,今天绝对是。
std::string name = "stackoverflow";
MessageBox(hWnd, ("name is: "+name).c_str(), "Msg title", MB_OK | MB_ICONQUESTION);
如果您使用 Unicode(这在 21 世纪有意义)
std::wstring name = L"stackoverflow";
MessageBox(hWnd, (L"name is: "+name).c_str(), L"Msg title", MB_OK | MB_ICONQUESTION);
答案 3 :(得分:0)
回答你的问题:
string name ='stackoverflow';
MessageBox(“name is:”+ name,“Msg title”,MB_OK | MB_ICONQUESTION);
以同样的方式为他人做。
答案 4 :(得分:0)
这是唯一为我工作的人:
std::string myString = "x = ";
int width = 1024;
myString += std::to_string(width);
LPWSTR ws = new wchar_t[myString.size() + 1];
copy(myString.begin(), myString.end(), ws);
ws[myString.size()] = 0; // zero at the end
MessageBox(NULL, ws, L"Windows Tutorial", MB_ICONEXCLAMATION | MB_OK);