以下代码可以正常工作:

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,因此,不会将任何内容写入向量中。

这里有什么问题?提前致谢。

最佳答案

the documentation


  指向接收该行副本的缓冲区的指针。之前
  发送消息时,将此缓冲区的第一个字设置为
  缓冲区的TCHAR s。

08-27 20:13