C ++ Windows: сохранение строки элемента управления для редактирования в векторе TCHAR - PullRequest
0 голосов
/ 01 декабря 2011

Следующий код работает нормально:

int iLength = SendMessage(hWndEdit, EM_LINELENGTH, 0, 0);
if(iLength > 0) {
    TCHAR* szBuffer = new TCHAR[iLength+1];
    iLength = SendMessage(hWndEdit, EM_GETLINE, 0, (LPARAM)szBuffer);
    szBuffer[iLength] = TEXT('\0');
    MessageBox(hWnd, szBuffer, TEXT("Edit content"), MB_OK);
    delete[] szBuffer;
}

Теперь я хочу сделать то же самое, используя std::vector<TCHAR>:

int iLength = SendMessage(hWndEdit, EM_LINELENGTH, 0, 0);
if(iLength > 0) {
    std::vector<TCHAR> data(iLength+1, TEXT('\0'));
    iLength = SendMessage(hWndEdit, EM_GETLINE, 0, (LPARAM)&data[0]);
    MessageBox(hWnd, &data[0], TEXT("Edit content"), MB_OK);
}

Он компилируется, но в iLength = SendMessage(hWndEdit, EM_GETLINE, 0, (LPARAM)&data[0]); переменная iLength всегда будет установлена ​​в 0, и, соответственно, в мой вектор ничего не будет записано.

В чем здесь проблема? Заранее спасибо.

1 Ответ

1 голос
/ 01 декабря 2011

С документация :

Указатель на буфер, который получает копию строки. Перед отправив сообщение, задайте для первого слова этого буфера размер, в TCHAR с, из буфера .

...