5

リッチエディットコントロールのドキュメントは、見た目と同じくらい悪い(間違っていますか?)ですか?現在、リッチエディットコントロールを表示するために、手動でLoadLibrary( "riched20.dll")を呼び出しています。Rich Editのドキュメントは、RichEditコントロールを使用するための最初のコードサンプルでこれを十分に示していません。

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

4 に答える 4

2

MFC を使用すると、RichEdit コントロールが機能します。

InitCommonControlsEx() によるロード - ICC_USEREX_CLASSES は RichEdit をロードしません。リッチエディットを含まない「標準」の共通コントロールのみをロードするため、必要ありません。どうやらこれを呼び出す必要があるのは、RichEdits を機能させるためではなく、Windows で「ビジュアル スタイル」を有効にするためだけです。

2008 を使用している場合は、Msftedit.dll を含めて、代わりに MSFTEDIT_CLASS を使用することをお勧めします (MS は後方互換性のためにごみになる場合があります)。

ドキュメントは、Win32 プログラミングに適していることを示唆しています。

于 2008-09-17T17:15:38.883 に答える
2

何年も前に、私はこの同じ問題に遭遇しました。はい、答えは .dll を手動でロードすることでした。その理由は、私が覚えている限りでは、riched20.dll の DllMain に RichEdit ウィンドウ クラスが登録されているためです。

于 2008-09-17T17:35:21.520 に答える
1

リンクできるインポート ライブラリ (おそらく riched20.lib) はありませんか。そうすれば、実行時に「手動で」ロードする必要がなくなります。これが、すべての標準コントロールの仕組みです。プロジェクトを作成すると、VS は user32.lib への参照を自動的に追加します。

于 2008-09-17T17:15:02.567 に答える
0

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

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

于 2008-09-17T17:15:26.687 に答える