Как добавить текст на существующий текст в статическом управлении в Win32

StackOverflow https://stackoverflow.com//questions/11706769

  •  13-12-2019
  •  | 
  •  

Вопрос

Я делаю программу в Win32 C, используя Visual Studio RC, и я не могу понять, как сделать эту кажущуюся простую задачу.У меня есть статический текстовый элемент управления, управление редактированием и кнопка.Когда пользователь нажимает кнопку, я не буду программа, чтобы принять текст в управлении редактированием и добавить его к тому, что находится в статическом текстовом поле.После долгих головных болей и разных попыток я до сих пор не могу заставить это работать.Я могу извлечь текст из элемента управления редактированием, но любую попытку добавить его в аварию на статическом управлении.Ну на самом деле просто чтобы уточнить, я могу установить текст штраф;Он просто добавляет к существующему тексту, который сбивает программу.Может ли кто-нибудь, пожалуйста, опубликовать какой-нибудь код, который позволит мне сделать это, используя getwindowtext () и setwindowtext (), (или что-то еще, если он предпочтительнее).Вот что у меня есть:

SendMessage(hwndEditControl, WM_GETTEXT,255,(LPARAM)editbuffer);
GetWindowText(hwndTextControl, (LPWSTR)allText, GetWindowTextLength(hwndTextControl));
//function to add data, please create on
SetWindowText(hwndTextControl, (LPCWSTR)allText);}
//where
static TCHAR*       editbuffer = new TCHAR; //feel free to change these declarations
static TCHAR*       allText    = new TCHAR;
.

Любая помощь очень ценится!Спасибо!

Это было полезно?

Решение

Вы забронируете только один символ для ваших строковых буферов.Так вместо

static TCHAR*       editbuffer = new TCHAR;
static TCHAR*       allText    = new TCHAR;
.

Вы должны забронировать гораздо больше памяти, например.:

static TCHAR*       editbuffer = new TCHAR[255];
static TCHAR*       allText    = new TCHAR[255];
.

, который даст вам строковые буферы, которые могут удерживать 254 символов и завершать NULL CHAR.

Однако я бы порекомендовал вам просто зарезервировать память в стеке внутри вашей функции:

void OnButtonClick()
{
    TCHAR editbuffer[255] = {0};
    TCHAR allText[255] = {0};
    ...
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top