2011-03-31 3 views
0

EM_SETHANDLE 메커니즘을 사용하여 편집 컨트롤의 텍스트를 올바르게 설정하는 방법을 알 수 없습니다. 창 텍스트 가져 오기 및 설정이 응용 프로그램에 너무 느립니다.편집 컨트롤에서 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

멀티 라인 편집 컨트롤을 사용하고 있습니까? 당신은 정말로 나를 말할 수있는 샘플 코드를 게시하지 않았습니다. [이 MSDN 기사] (http://msdn.microsoft.com/en-us/library/bb775456.aspx)에 나와있는 지침을 따랐습니까? "텍스트 버퍼 할당"절에서 구체적으로 확인하십시오. –

+2

이것은 Windows 버전 2에서 사용하기에 흥미로운 메시지입니다. –

+0

@Cody : 1. 예, 다중 행 편집을 사용합니다. 2. 내가 준 샘플은 실제로 보이는 것입니다. 3. 예, 그 기사가 말하는 것을 따라갔습니다. LocalAlloc 대신 Heap 함수를 사용하여 적절하게 처리하는 것이 좋습니다. – joseph

답변

1

워드 프로세서를 EM_GETHANDLE이 메모리가되는 LocalAlloc에 ​​의해 할당 이동 메모리로 가지고 있음을 알려줍니다 위해. 난

는이 같은 멀리 얻을 수 추측 : 당신이 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); 
}