1

我无法弄清楚如何正确使用 EM_SETHANDLE 机制来设置编辑控件的文本。获取和设置窗口文本对于我的应用程序来说太慢了。

从文档中,我了解到分配的缓冲区将被控件起诉,它对我部分有效。

当在控件中输入文本时,它会在缓冲区中看到,但是当使用 memcpy 等更新缓冲区时(代码中没有错误),更新后的文本将无法正确显示。我什至在每次更新后都尝试了 EM_SETHANDLE (SetHandle() ),但在几次尝试后它失败了。存在某种堆分配失败。RedrawWindow() 也不起作用。

我无法在网上获得有关使用情况的任何适当信息。帮助!

我的代码,留下了应用程序的具体细节,看起来像这样。

// init
HANDLE m_hMem = HeapAlloc(...)
m_edit.SetHandle(m_hMem)

// on some event
char *pbuf = (char*)m_hMem;
memcpy(...)

提前致谢

4

2 回答 2

3

EM_GETHANDLE 的文档告诉您该内存必须是由 LocalAlloc 分配的可移动内存。

我猜你可以摆脱这样的事情:

int cbCh = sizeof(TCHAR) > 1 ? sizeof(TCHAR) : IsUsingComCtlV6() ? sizeof(WCHAR) : sizeof(char);
HLOCAL hOrgMem = SendMessage(hEdit,EM_GETHANDLE,0,0);
HLOCAL hNewMem = LocalReAlloc(hOrgMem,cbCh * cchYourTextLength,LMEM_MOVEABLE);
if (hNewMem)
{
  //LocalLock, assign string, LocalUnlock
  SendMessage(hEdit,EM_SETHANDLE,(WPARAM)hNewMem,0);
}
于 2011-03-31T15:59:45.913 回答
1

看起来您需要使用LocalAlloc. 请参阅伴随消息 EM_GETHANDLE: http: //msdn.microsoft.com/en-us/library/bb761576 (v=vs.85).aspx

于 2011-03-31T16:37:13.017 回答