문제

Rich Edit Controls에 대한 문서가 실제로 보이는 것만큼 나쁜(잘못된가요?) 있습니까?지금은 Rich Edit 컨트롤을 표시하기 위해 LoadLibrary("riched20.dll")를 수동으로 호출하고 있습니다.Rich Edit에 대한 설명서는 Rich Edit 컨트롤을 사용하기 위한 첫 번째 코드 샘플에서 이를 제대로 보여주지 않습니다.

시각적 스타일을 추가하기 위해 InitCommonControlsEx()를 호출하는 방법에 대해 설명하지만 전달할 플래그에 대해서는 언급하지 않습니다.

Rich Edit 컨트롤을 로드하는 더 좋은 방법이 있습니까?

http://msdn.microsoft.com/en-us/library/bb787877(VS.85).aspx

작동시키기 위해 작성할 수 있는 유일한 코드는 다음과 같습니다.

#include "Richedit.h"
#include "commctrl.h"

INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_USEREX_CLASSES;  //Could be 0xFFFFFFFF and it still wouldn't work
InitCommonControlsEx(&icex);  //Does nothing for Rich Edit controls

LoadLibrary("riched20.dll");  //Manually?  For real?
hWndRichEdit = CreateWindowEx(
    ES_SUNKEN,
    RICHEDIT_CLASS,
    "",
    WS_BORDER | WS_VISIBLE | WS_CHILD,
    2, 2, 100, 24,
    hWnd, (HMENU) ID_RICH_EDIT, hInst, NULL);
도움이 되었습니까?

해결책

MFC를 사용하면 RichEdit 컨트롤이 작동합니다.

InitCommonControlsEx()로 로드 - ICC_USEREX_CLASSES는 RichEdit AFAIK를 로드하지 않으며, richedit를 포함하지 않는 '표준' 공통 컨트롤만 수행하므로 필요하지 않습니다.분명히 RichEdits가 작동하도록 하는 것이 아니라 Windows에서 '시각적 스타일'을 활성화하기 위해 이것을 호출하면 됩니다.

2008을 사용하는 경우 Msftedit.dll을 포함하고 대신 MSFTEDIT_CLASS를 사용하고 싶을 수 있습니다(MS는 때때로 이전 버전과의 호환성을 고려하면 쓸모가 없습니다).

그만큼 문서 Win32 프로그래밍에 맞게 수행하고 있다고 제안하십시오.

다른 팁

몇 년 전에도 이와 동일한 문제가 발생했는데, 대답은 .dll을 수동으로 로드하는 것이었습니다.제가 기억하는 한 그 이유는 RichEdit 윈도우 클래스가 riched20.dll의 DllMain에 등록되어 있기 때문입니다.

연결할 수 있는 가져오기 라이브러리(아마도 riched20.lib)가 없나요?그러면 런타임에 "수동으로" 로드할 필요가 없습니다.이것이 모든 표준 컨트롤이 작동하는 방식입니다.VS는 프로젝트를 생성할 때 user32.lib에 대한 참조를 자동으로 추가합니다.

공통 컨트롤을 만들기 전에 CoInitializeEx를 호출해야 한다고 생각합니다.

LoadLibrary는 필요하지 않습니다.올바른 .lib 파일과 연결하면 exe-loader가 이러한 세부 사항을 처리합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top