В char WindowText[4096] хранится заголовок окна (не окна с сообщением), полученный при помощи GetWindowText. Когда я пытаюсь сделать так:
MessageBoxA(0, "Window Text = '"+ WindowText +"'! Some Text", "Some Title", MB_ICONERROR | MB_OK);
То получаю: И:
Что делать?
Например, вот как-нибудь так:
#include <string>
#include <iostream>
#include <windows.h>
int main()
{
std::string sl;
char WindowText[4096] = "***";
sl = "Window Text = '";
sl += WindowText;
sl += "'! Some Text";
MessageBoxA(0, sl.c_str(), "Some Title" ,MB_ICONERROR | MB_OK);
return 0;
}
UPD: По просьбе коллеги немного дополню ответ. Раз в вопросе был указан тег С++, то я привожу пример с наиболее простыми конструкциями из этого языка с максимальным сохранением сущностей из вопроса (конечно, лучше было бы все строки заменить на тип std::string). И естественно, это не единственно возможный вариант.
В С++ для пользовательских типов данных, и в частности, для классов и структур, можно переопределять (перегружать) поведение стандартных операций. В случае с классом string из стандартной библиотеки шаблонов, оператор + (и +=) переопределен для конкатенации таких строк с объектами такого же типа и со строками в стиле языка Си. Чтобы компилятор мог воспользоваться этим перегруженным оператором необходимо, чтобы хотя бы один из двух операндов принадлежал этому типу string.
Если же оставаться в рамках стандартной библиотеки языка Си, то можно было воспользоваться уже упомянутыми мной в комментариях функциями для формирования строки sprintf()/snprintf(), упомянутыми Harry функциями для конкатенации строк strcat()/strncat() и даже функциями для копирования/перемещения строк strcpy()/strncpy()/memcpy()/memmove(). Предпочтение следует отдавать тем вариантам функций, где в именах есть буква n (это не касается memcpy()/memmove(), т.к. в них тоже надо явно указывать размер) - эти функции, как бы (в смысле предоставляют возможность, а остальное зависит от программиста), защищены от ошибок переполнения, поскольку нужно явно указывать размер целевого блока памяти.
В С/С++ конкатенация строк с помощью знака + имеет смысл, если это строки типа string. Если это C-сроки (как ваши литералы типа "Window Text = '" или переменная WindowText, объявленная как массив char), то они интерпретируются как указатели на первые символы, а суммирование указателей - нонсенс, о чем вам и поведал компилятор.
Для этого нужно использовать функции наподобие strcpy, strcat и иже с ними. Например,
char buf[5120] = "Window Text = '";
strcat(buf, WindowText);
strcat(buf,"'! Some Text");
MessageBoxA(0, buf, ....
Я сделал так:
sprintf(Message, "%s%s%s", "Window Text = '", WindowText +"'! Some Text");
MessageBoxA(0, Message, "Some Title", MB_ICONERROR | MB_OK);
Но можно делать также как и в других ответах.
Всем большое спасибо!
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости