在MessageBox c ++中显示变量

时间:2014-02-07 06:26:16

标签: c++ c windows messagebox

如何在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 ++执行此操作?

5 个答案:

答案 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);