Задать вопрос
@rxxxxxx

Как выводить переменную в MessageBox?

Здравствуйте. У меня есть функция с MessageBox. Но мне нужно сделать, чтобы в содержимое messagebox выводилась переменная "a". Попытался использовать вот это, но мало того, что переменная не вывелась, так еще и половина текста куда-то пропала:

#include <Windows.h>

int a = 10;
int DisplayResourceNAMessageBox()
{
    int msgboxID = MessageBox(
        NULL,
        (LPCTSTR)L"Resource not available\nDo you want to try again? "+a,
        (LPCTSTR)L"Account Details",
        MB_ICONWARNING | MB_OK | MB_DEFBUTTON1
    );
   return msgboxID;
}

int main()
{
   DisplayResourceNAMessageBox(); 
}


P.S. Пример взял с сайта Майкрософта
  • Вопрос задан
  • 1451 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
Для того, чтобы вывести переменную в MessageBox необходимо конвертировать ее в строку при помощи функции itoa или sprintf или использовать класс CString из MFC или ATL или класс std::string из STL. https://stackoverflow.com/questions/5590381/easies...
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
Собственно, Александр Ананьев всё сказал.
А я хочу дополнить.
1. Вы решили заложиться на компиляцию ANSI/Unicode, но (LPCTSTR)L"Account Details" неправильно сконвертируется в ANSI. Правильно _T("Account Details"). Хотя двадцать два года спустя на компиляцию ANSI, думаю, можно и забить?
2. MessageBox не предполагает выбора — зачем функции возвращать int?
Ответ написан
@romancelover
программист C++ под Linux
В языках С и С++ и WinApi LPCTSTR - это просто указатель на последовательность символов в памяти. Прибавление к нему числа не меняет последовательность символов, а только переводит позицию указателя. Поэтому код в примере выведет строку с 10-го символа (считая с 0), а не допишет число к строке.
Чтобы добиться нужного результата, нужно создать новую последовательность символов и передать указатель на неё в функцию. На Си можно использовать функции wcscpy, wcscat и _itow (или как её аналог в вашем компиляторе называется) или wsprintf (неудобно тем, что нужно следить за количеством символов, выделяемых под строку), на С++ лучше создать std::wstring (wstring так как тут LPCTSTR, и длинные символы, и программа собирается в Unicode режиме), записать туда строку и число (можно при помощи wostringstream), а потом передать в MessageBox указатель с помощью c_str().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы