Como adicionar texto ao texto existente no controle estático no win32
Pergunta
Estou fazendo um programa em win32 c usando o visual studio rc e não consigo descobrir como fazer essa tarefa aparentemente simples.Eu tenho um controle de texto estático, um controle de edição e um botão.Quando o usuário clica no botão, não quero que o programa pegue o texto no controle de edição e o adicione ao que estiver na caixa de texto estático.Depois de muita dor de cabeça e várias tentativas, ainda não consigo fazer isso funcionar.Posso recuperar o texto do controle de edição sem problemas, mas qualquer tentativa de adicioná-lo ao controle estático falha.Bem, na verdade, só para esclarecer, posso definir o texto corretamente;é apenas adicionar texto existente que trava o programa.Alguém poderia postar algum código que me permita fazer isso usando GetWindowText() e SetWindowText() (ou qualquer outra coisa, se preferir).Aqui está o que eu tenho:
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;
Qualquer ajuda muito apreciada!Obrigado!
Solução
Você está reservando apenas um caractere para seus buffers de string.Então, em vez de
static TCHAR* editbuffer = new TCHAR;
static TCHAR* allText = new TCHAR;
você precisa reservar muito mais memória, por exemplo:
static TCHAR* editbuffer = new TCHAR[255];
static TCHAR* allText = new TCHAR[255];
o que forneceria buffers de string que podem conter 254 caracteres e o caractere nulo de terminação.
No entanto, eu recomendaria que você simplesmente reservasse a memória na pilha dentro da sua função:
void OnButtonClick()
{
TCHAR editbuffer[255] = {0};
TCHAR allText[255] = {0};
...
}