Получить текст из элемента управления редактирования - PullRequest
6 голосов
/ 17 апреля 2011

Я пробовал это:

int editlength;
int buttonid = 3324; // id to button, the numbers dont mean anything
int editid = 5652; // id to edit

LPTSTR  edittxt;

HWND button; // created in wWinmain as a button
HWND edit; // created in wWinMain as an edit control

// LRESULT CALLBACK WindowProc

switch(uMsg)
{
    case WM_COMMAND:
        if(wParam == buttonid)
        {
            filedit = GetDlgItem(hwnd, editid); // I tried with and without this
            editlength = GetWindowTextLength(filedit);
            GetWindowText(filedit, edittxt, editlength);

            MessageBox(hwnd, edittxt, L"edit text", 0);
        }
        break;
}

Но я не вижу никакого текста в окне сообщения.

Ответы [ 2 ]

14 голосов
/ 17 апреля 2011

Последний аргумент GetWindowText() - это размер вашего буфера. Поскольку вы устанавливаете длину строки, вы говорите функции, что ваш буфер слишком мал, потому что нет места для нулевого терминатора. И ничего не копируется.

Кроме того, вы уже должны выделить буфер для хранения копии текста. На что указывает edittxt? Я даже не вижу, где вы его инициализируете.

Правильное использование будет выглядеть примерно так:

TCHAR buff[1024];
GetWindowText(hWndCtrl, buff, 1024);
5 голосов
/ 17 апреля 2011

edittxt должен быть указателем на буфер, который получает текст .. поэтому попробуйте это ...

char txt[1024];
....
GetWindowText(filedit, txt, sizeof(txt));

Возможно, вам придется настроить юникод ... извините, это было давно, так как я сделал сырой win32.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...