Вопрос:
Как отобразить переменную в MessageBox С++?
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
как это сделать с помощью С++?
Лучший ответ:
Создайте временный буфер для хранения вашей строки и используйте sprintf, измените форматирование в зависимости от типа переменной. Для вашего первого примера должно работать следующее:
char buff[100]; string name = «stackoverflow»; sprintf_s(buff, «name is:%s», name.c_str()); cout << buff;
Затем вызовите окно сообщения с баффом в качестве аргумента строки
MessageBox(hWnd, buff, «Msg title», MB_OK | MB_ICONQUESTION);
для изменения int:
int d = 3; sprintf_s(buff, «name is:%d»,d); Ответ №1
Это можно сделать с помощью макроса
#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 (старомодный способ: не путь С++ 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
На ваш вопрос:
string name = ‘stackoverflow’;
MessageBox ( “name is:” + name, “Msg title”, MB_OK | MB_ICONQUESTION);
сделать то же самое для других.