Rich Edit Control в сыром Win32 - PullRequest
       40

Rich Edit Control в сыром Win32

3 голосов
/ 17 сентября 2008

Является ли документация для Rich Edit Controls действительно настолько плохой (неправильной?), Как кажется? Прямо сейчас я вручную вызываю LoadLibrary ("riched20.dll"), чтобы отобразить расширенный элемент управления Edit. Документация для 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);

Ответы [ 4 ]

2 голосов
/ 17 сентября 2008

Много лет назад я столкнулся с этой же проблемой, и да, ответ состоял в том, чтобы загрузить .dll вручную. Причина, насколько я помню, заключается в том, что класс окна RichEdit зарегистрирован в DllMain файла riched20.dll.

2 голосов
/ 17 сентября 2008

Используя MFC, элементы управления RichEdit просто работают.

Загрузка с InitCommonControlsEx () - ICC_USEREX_CLASSES не загружает RichEdit AFAIK, он вам не нужен, поскольку он выполняет только «стандартные» общие элементы управления, которые не включают richedit. По-видимому, вам нужно только вызвать это, чтобы включить «визуальные стили» в Windows, чтобы не заставить RichEdits работать.

Если вы используете 2008, вы хотите включить Msftedit.dll и использовать вместо него MSFTEDIT_CLASS (MS иногда является мусором для обратной совместимости).

Документы предполагают, что вы делаете это правильно для программирования на Win32.

1 голос
/ 17 сентября 2008

Нет ли библиотеки импорта (может быть, riched20.lib), на которую вы можете ссылаться. Тогда вам не придется загружать его «вручную» во время выполнения. Вот как работают все стандартные элементы управления. VS автоматически добавляет ссылку на user32.lib при создании проекта.

0 голосов
/ 17 сентября 2008

Я думаю, вам нужно вызвать CoInitializeEx, прежде чем создавать какие-либо общие элементы управления.

LoadLibrary не требуется. Если вы ссылаетесь на правильный файл .lib, exe-загрузчик позаботится о таких деталях для вас.

...