Расширенное управление редактированием в raw Win32

StackOverflow https://stackoverflow.com/questions/85427

  •  01-07-2019
  •  | 
  •  

Вопрос

Действительно ли документация для расширенных элементов управления редактированием такая плохая (неправильная?), как кажется?Прямо сейчас я вручную вызываю LoadLibrary ("riched20.dll"), чтобы отобразить расширенный элемент управления редактированием.Документация по расширенному редактированию плохо демонстрирует это в первом примере кода для использования расширенных элементов управления редактированием.

В нем говорится о вызове InitCommonControlsEx() для добавления визуальных стилей, но не упоминается, какие флаги передавать.

Есть ли лучший способ загрузить расширенный элемент управления редактированием?

http://msdn.microsoft.com/en-us/library/bb787877 (ПРОТИВ 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 просто работают.

Загрузка с помощью initcommon controlsex() - ICC_USEREX_CLASSES не загружает RichEdit AFAIK, вам это не нужно, поскольку он выполняет только "стандартные" общие элементы управления, которые не включают richedit.Очевидно, вам нужно вызвать это только для включения "визуальных стилей" в Windows, а не для того, чтобы заставить RichEdits работать.

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top