我无法弄清楚如何正确使用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(...)
提前致谢
答案 0 :(得分: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);
}
答案 1 :(得分:1)
看起来您需要使用LocalAlloc
分配内存。请参阅随附消息EM_GETHANDLE:http://msdn.microsoft.com/en-us/library/bb761576(v=vs.85).aspx