Отображения переменной в функции MessageBox в C++

как отобразить переменную в 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++ ?

3 ответов


создайте временный буфер для хранения строки и используйте 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);

Это можно сделать с помощью макроса

#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);

ответ на ваш вопрос:

имя строки = 'stackoverflow';

MessageBox ("name is:" +name, "Msg title", MB_OK | MB_ICONQUESTION);

сделайте то же самое для других.