2008-09-17 19 views
3

リッチエディットコントロールのドキュメントは実際には悪い(間違っていますか?)と思われますか?今は、リッチエディットコントロールを表示するために手動でLoadLibrary( "riched20.dll")を呼び出しています。 Rich Editのドキュメンテーションは、Rich Editコントロールを使用するための最初のコードサンプルでこれを実証しています。未加工Win32のリッチエディットコントロール

それは視覚的なスタイルを追加するInitCommonControlsEx()を呼び出すことについて語ったが、中に合格するためにどのフラグには言及していない。

リッチエディットコントロールをロードするためのより良い方法はありますか?

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); 

答えて

2

MFCを使用すると、RichEditは作業を制御します。

InitCommonControlsEx()でロードする - ICC_USEREX_CLASSESはRichEdit AFAIKをロードしません。リッチェットを含まない「標準的な」共通コントロールだけが必要なので、ICC_USEREX_CLASSESは必要ありません。明らかに、RichEditsを動作させるのではなく、Windowsで 'ビジュアルスタイル'を有効にするためにこれを呼び出すだけです。

2008を使用している場合は、Msftedit.dllをインクルードし、代わりにMSFTEDIT_CLASSを使用します(MSは時々後方互換性のためにゴミ箱になります)。

docsは、あなたがWin32プログラミングのために正しくやっていることを示唆しています。

+0

はユニコードアプリケーションのMSFTEDIT_CLASSですか? – user16408

+1

いいえ、まだANSIアプリケーションで使用できますが、ANSIアプリケーションでUnicodeテキストを送受信するWM_UNICHAR通知をサポートしています。 – gbjbaanb

+0

ユニコードアプリケーションの場合のみMSFTEDIT_CLASS:はい。 VC2012 MFCでは、プログラムが_UNICODEでコンパイルされている場合、MSFTEDIT_CLASSが使用されます。 _UNICODEが定義されていない場合、RICHEDIT_CLASSが使用されます。 – linquize

1

はあなたにリンクすることができますインポートライブラリ(多分riched20.lib)はありません。その後、実行時に "手動で"読み込む必要はありません。それが標準的なコントロールの仕組みです。 VSは、プロジェクトを作成するときに自動的にuser32.libへの参照を追加します。

0

一般的なコントロールを作成する前に、CoInitializeExを呼び出す必要があると思います。

LoadLibraryは必要ありません。正しい.libファイルにリンクすると、exe-loaderがそのような詳細を処理します。

+4

COMを初期化するためにCoInitializeEx()が必要です。 win32の共通コントロールには必要ありません。あなたはInitCommonControlsEx()を考えていたかもしれません。 – Ferruccio

2

私はこの同じ問題に遭遇しました。はい、答えは.dllを手動でロードすることでした。なぜなら、覚えている限り、RichEditウィンドウクラスはriched20.dllのDllMainに登録されているからです。

関連する問題