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!

Foi útil?

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};
    ...
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top