RICHEDIT奇怪的问题???

iswjh 2017-11-07 09:34:41
RichEdit中有数据,调用GetWindowText时,返回空。

1、
HANDLE heap=HeapCreate(0,1024*1024,1024*1024);
if(heap==NULL)
return;
int bufSize=GetWindowTextLength(hEdit)*sizeof(TCHAR)+4);
TCHAR* buf=(TCHAR*)HeapAlloc(heap,HEAP_ZERO_MEMORY,bufSize);
if(buf==NULL)
{
...
return;
}
int r=GetWindowText(hEdit,buf,bufSize);//???这里返回空


补充测试:
2、
TCHAR buf[2048];
GetWindowText(hEdit,buf,2048);//???这里返回有数据


...全文
186 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2017-11-10
  • 打赏
  • 举报
回复
如果是跨进程的 使用 WM_GETTEXTLENGTH 和 WM_GETTEXT 消息
iswjh 2017-11-10
  • 打赏
  • 举报
回复
引用 5 楼 VisualEleven 的回复:
跨进程????
当前进程
iswjh 2017-11-10
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
设置断点, 查看传入参数是否正常?
跟踪过,内存分配正常,就是得不到数据。
iswjh 2017-11-10
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
int bufSize 是不是太大了 ?
bufSize不是设为“字符数*sizeof(TCHAR)+2”吗?
zgl7903 2017-11-10
  • 打赏
  • 举报
回复

void GetEditText(HWND hEdit)
{
  int iLen = SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0) + 1;
  if(IsWindowUnicode(hEdit))
  {
    WCHAR *chBuff = new WCHAR[iLen];
    ZeroMemory(chBuff, sizeof(*chBuff)*iLen);
    SendMessage(hEdit, WM_GETTEXT, iLen, (LPARAM)chBuff);
    OutputDebugStringW(chBuff);
    OutputDebugStringW(L"\r\n");
    delete [] chBuff;
  }
  else
  {
    CHAR *chBuff = new CHAR [iLen];
    ZeroMemory(chBuff, sizeof(*chBuff)*iLen);
    SendMessage(hEdit, WM_GETTEXT, iLen, (LPARAM)chBuff);
    OutputDebugStringA(chBuff);
    OutputDebugStringA("\r\n");
    delete [] chBuff;
  }
}
chen_JADE 2017-11-08
  • 打赏
  • 举报
回复
试试:GetWindowText(hWnd,buf,sizeof(buf)) 还是不行的话,就考虑下TCHAR* buf=(TCHAR*)HeapAlloc(heap,HEAP_ZERO_MEMORY,bufSize);的描述
oyljerry 2017-11-08
  • 打赏
  • 举报
回复
先看看bufSize这个是多大,是否正确
Eleven 2017-11-08
  • 打赏
  • 举报
回复
跨进程????
zgl7903 2017-11-07
  • 打赏
  • 举报
回复
设置断点, 查看传入参数是否正常?
schlafenhamster 2017-11-07
  • 打赏
  • 举报
回复
int bufSize 是不是太大了 ?

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧