Pergunta

A documentação para Rich Editar Controls realmente tão ruim (errado?), Uma vez que parece ser? Agora eu estou chamando manualmente LoadLibrary ( "riched20.dll"), a fim de obter um controle Rich Edit para aparecer. A documentação para Rich Edit mal demonstra isso na primeira amostra de código para usar Rich Edit controles.

Ele fala sobre chamando InitCommonControlsEx () para adicionar estilos visuais, mas não faz nenhuma menção de que bandeiras para passar.

Existe uma maneira melhor para carregar um controle Rich Edit?

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

Aqui é o único código que eu poderia escrever para fazê-lo funcionar:

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

Solução

Usando MFC, controles RichEdit apenas trabalho.

Carregando com InitCommonControlsEx () - não ICC_USEREX_CLASSES não carregar RichEdit AFAIK, você não precisa dele como ele só faz os controles comuns 'padrão', que não incluem richedit. Aparentemente, você só precisa chamar este para permitir 'estilos visuais' no Windows, para não ficar RichEdits de trabalho.

Se você estiver usando 2008, que pretende incluir Msftedit.dll e usar o MSFTEDIT_CLASS vez (MS são lixo para compatibilidade para trás algumas vezes).

O docs sugerem você está fazendo a coisa certa para a programação Win32.

Outras dicas

Muitos anos atrás, eu corri para esse mesmo problema, e sim, a resposta era para carregar a DLL manualmente. A razão, tanto quanto me lembro, é que a classe de janela RichEdit está registrado em DllMain de riched20.dll.

Não existe uma biblioteca de importação (talvez riched20.lib) que você pode conectar-se a. Então você não terá que carregá-lo "manualmente" em tempo de execução. É assim que todo o trabalho controles padrão. VS adiciona automaticamente uma referência para User32.lib quando você cria um projeto.

Eu acho que você tem que chamar CoInitializeEx antes de criar qualquer um dos controles comuns.

O LoadLibrary não é necessário. Se você vincular com o arquivo .lib correta do exe-loader vai cuidar desses detalhes para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top