SetSysColors を使用せずに、1 つのプロセスでプレーンな Win32 メニュー (背景、テキスト、およびハイライト) で使用される色を変更する方法はありますか?
(SetSysColors はグローバルな変更を行いますが、これは悪いことです。クラッシュしたり、終了する前に SetSysColors で色を元に戻すのを忘れたりすると、ログアウトするまで復元されません。)
SetMenuInfo()APIはあなたの友達です。メニューの背景をペイントするために任意のブラシを適用できます。
これらの線に沿った何かがあなたの問題を解決するはずです:
MENUINFO mi = { 0 };
mi.cbSize = sizeof(mi);
mi.fMask = MIM_BACKGROUND|MIM_APPLYTOSUBMENUS;
mi.hbrBack = hBrush;
HMENU hMenu = ::GetMenu(hWnd);
SetMenuInfo(hMenu, &mi);
私は尋ねなければなりません、なぜですか?通常のWindowsルックアンドフィールを採用するのは良いことです。つまり、ユーザーは、プラットフォーム用の他のソフトウェアを使用してエクスペリエンスをマッピングできる、ユーザーインターフェイスに一貫した要素があることを確信できます。
[もちろん、私は改宗者に説教していると思いますが、これに対する答えを読んだ人がすべてのメニューをスカイブルーピンクにし始めないように、私は主張したいと思いました。
Rob へのあなたのコメントを信じるなら、それは特別なルック アンド フィールを備えたスキン アプリケーション用です。したがって、ferek が指摘しているように (不親切な方法で...) 所有者が描画したメニューを使用することは、おそらく実際に進むべき道です。それらの外観を正確に定義することができます。