Как использовать EM_SETHANDLE для управления редактированием? - PullRequest
1 голос
/ 31 марта 2011

Я не могу понять, как правильно использовать механизм 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(...)

заранее спасибо

Ответы [ 2 ]

3 голосов
/ 31 марта 2011

Документы для 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 голос
/ 31 марта 2011

Похоже, вам нужно выделить память с помощью LocalAlloc.Смотрите сопутствующее сообщение EM_GETHANDLE: http://msdn.microsoft.com/en-us/library/bb761576(v=vs.85).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...