Pregunta

¿Es la documentación para Rich Edit Controls realmente tan mala (¿incorrecta?) como parece?En este momento estoy llamando manualmente a LoadLibrary("riched20.dll") para que aparezca un control de edición enriquecido.La documentación de Rich Edit demuestra esto de manera deficiente en el primer ejemplo de código para usar controles de Rich Edit.

Habla de llamar a InitCommonControlsEx() para agregar estilos visuales, pero no menciona qué indicadores pasar.

¿Existe una mejor manera de cargar un control Rich Edit?

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

Este es el único código que pude escribir para que funcione:

#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);
¿Fue útil?

Solución

Al usar MFC, los controles RichEdit simplemente funcionan.

Cargando con InitCommonControlsEx() - ICC_USEREX_CLASSES no carga RichEdit AFAIK, no lo necesita ya que solo carga los controles comunes "estándar", que no incluyen richedit.Aparentemente sólo necesita llamar a esto para habilitar 'estilos visuales' en Windows, no para que RichEdits funcione.

Si está utilizando 2008, desea incluir Msftedit.dll y usar MSFTEDIT_CLASS en su lugar (a veces, los MS son basura para la compatibilidad con versiones anteriores).

El documentos Sugiero que lo estés haciendo bien para la programación Win32.

Otros consejos

Hace muchos años, me encontré con el mismo problema y sí, la respuesta fue cargar el .dll manualmente.La razón, hasta donde puedo recordar, es que la clase de ventana RichEdit está registrada en DllMain de riched20.dll.

¿No existe una biblioteca de importación (tal vez riched20.lib) a la que pueda vincularse?Entonces no tendrás que cargarlo "manualmente" en tiempo de ejecución.Así funcionan todos los controles estándar.VS agrega automáticamente una referencia a user32.lib cuando crea un proyecto.

Creo que debes llamar a CoInitializeEx antes de crear cualquiera de los controles comunes.

LoadLibrary no es necesario.Si vincula con el archivo .lib correcto, el cargador exe se encargará de dichos detalles por usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top