1

EM_SETHANDLE メカニズムを適切に使用してエディット コントロールのテキストを設定する方法がわかりません。Get および Set ウィンドウ テキストは、アプリケーションにとって遅すぎます。

ドキュメントから、割り当てられたバッファがコントロールによって訴えられ、部分的に機能することを理解しています。

テキストがコントロールに入力されると、バッファに表示されますが、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 に答える