私は、次のMFCコードを使用して、ダイアログウィンドウが表示されることがDLLを持っている:DLLから作成されたCDialogの共通コントロールにビジュアルスタイルを有効にする方法はありますか?
void ShowMyDialog()
{
BOOL bInitted = SUCCEEDED(::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE));
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
//InitCommonControls(); //Tried also with just this call
AfxEnableControlContainer();
HMODULE hDll = NULL;
if(GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
(LPCWSTR) ShowMyDialog,
&hDll) &&
hDll)
{
AfxSetResourceHandle(hDll);
CMyDialog dl; //Derived from CDialog
dl.DoModal();
}
if(bInitted)
::CoUninitialize();
}
これは動作しますが、表示されるダイアログには、visualスタイルが有効になっていません。
私はDLLのビジュアルスタイルを有効にする方法については、this articleが見つかりました。だから私は提案マニフェスト内容のリソースファイルを追加しました:
をして、それは123のID資源ました:
しかし、まだありません葉巻を。私はここで何が欠けていますか?
リソースID 123は、「コントロールパネルのComCtl32バージョン6またはRunDll32.exeによって実行されるDLLの使用」のセクションにあります。このDLLはコントロールパネルのページですか?もしそうなら、123が必要で、何かが間違っています。これがrundll32.dllによって実行されるDLLの場合、[通常の通常のプログラムに変換する必要があります](https://blogs.msdn.microsoft.com/oldnewthing/20130104-00/?p=5643)。 2つのどちらも正しいのでなければ、あなたは間違ったセクションを見ている。代わりに、「エクステンション、プラグイン、MMCスナップイン、またはプロセスに組み込まれたDLLにビジュアルスタイルサポートを追加する」が望ましいでしょう。 – andlabs
はい、私はそれらのセクション名が良くないことに同意します。 – andlabs
@DavisHeffernan:ありがとうございます。ワオ。誰がそれらの 'CreateActCtx' APIを使う必要があると思ったのですか? – c00000fd