Давайте изменим несколько вещей :
void AddToEditMainText(char *WhatToAdd)
В контексте параметров функции массив символов и указатель - это одно и то же. Даже если переданный параметр является массивом символов заданной длины, это не имеет значения, поэтому давайте не будем путать вещи.
Но мы можем сделать еще лучше. Этот вопрос отмечен как C++, а не C. В C++ мы хотели бы думать, что мы немного продвинулись по сравнению с низкоуровневым байтом. Когда мы говорим строки, теперь мы говорим зЬй :: строка:
void AddToEditMainText(const std::string &WhatToAdd)
Я не очень хорошо знаком с MS-Windows API, но это кажется очевидным, что «GetDlgItemText» является функцией C API, который вытягивает текст из существующего диалогового элемента управления. Не уверен, что вам гарантировано, что возвращенная строка будет меньше или будет усечена до 256-байтового буфера. Это на самом деле важный момент, но для вводной среды для C++ это не важно.
Буфер символов, используемый GetDlgItemText(), является таким ... C-ish. Буквенный буфер является такой странной концепцией в C++. После GetDlgItemText возвращается, давайте не будем тратить время, и получить его в хороший, довольно, станд :: строка:
std::string CurrTextStr=CurrText;
Теперь, опять же, в C++ мы не должны беспокоиться о мелочах, как выделение памяти , и убедитесь, что освободили его после использования. std :: string сделает это для нас:
std::string combinedString=CurrTextStr + WhatToAdd;
Не так ли? Нет необходимости вычислять размеры различных буферов. Это так ... в прошлом веке. Мы находимся в современной эпохе, где оператор «+» сделает это за нас. И, наконец, так как SendMessage() является еще одной причудливой C библиотеки API, и мы должны говорить до его уровня, я полагаю ...
SendMessage(EditMain, WM_SETTEXT, NULL, LPARAM((LPCSTR)combinedString.c_str()));
Ох, и не забудьте воткнуть «#include < строка > "где-то наверху, чтобы вывести определение std :: string.
'WM_SETTEXT' заменит все содержимое. Чтобы добавить, вы можете поместить курсор в конец с помощью 'EM_SETSEL', а затем использовать' EM_REPLACESEL' для добавления. –
Не используйте Code :: Blocks - это печально известный для использования злополучных значений по умолчанию. Windows NT была UTF-16 с момента ее создания. Не используйте 'char' - 'wchar_t', где он находится. – IInspectable
Я не использую code :: blocks, я использую visual studio 2013. – Forrest4096