1

そのため、Win32 で Common Controls とビジュアル スタイルを初期化しようとしています。私が作成したいくつかのカスタム コントロールを含む DLL と、GUI アプリケーションを含む EXE をビルドします。

通常、責任の分離は、ウィンドウ スタイルを有効にするかどうかを DLL が気にする必要がないことのようです。カスタム コントロールを生成し、依存する EXE に公開するだけです。EXE は、視覚的なスタイリングが必要かどうかを決定できますが、DLL は賢明ではありません。

問題は次のとおりです。プロセスのアタッチ時に、DLL がそのウィンドウ クラスを DllMain に登録しています。しかし、EXE で InitCommonControlsEx を呼び出すと、EXE がコモン コントロールを初期化する前にカスタム コントロールが登録されたため、カスタム コントロール内のボタンやその他のものが表示されません。

それを証明するために、EXE が InitCommonControlsEx を呼び出した後、カスタム コントロールの登録解除と再登録を強制したところ、修正されました。カスタム コントロールにボタンが視覚的なスタイルで表示されていました。

理想的な世界では、将来のプログラムで自分の共有ライブラリにリンクできるようになり、共通のコントロールやスタイルの問題を修正する心配をせずにカスタム コントロールを使い始めたいと思っています。これは可能ですか?

4

1 に答える 1

5

簡単に言えば、ウィンドウ クラスを登録したり、DllMain().

Init()アプリが関数 ( ) を呼び出しInitCommonControls()て共通コントロールを登録するのと同じ方法で、DLL のコントロールを登録するために呼び出すことができる、DLL からエクスポートされた別の関数を提供する必要があります。

于 2013-10-16T01:23:03.617 に答える