1

まず、私は C++ 開発者ではなく、主に C# でプログラミングしています。アプリケーションの CMenu のラッパーである .NET で ContextMenu (はい、ContextMenuStrip を認識しています) クラスを使用しようとしています。

適切な透明度を持つメニュー項目の横に画像を表示するにはどうすればよいですか?

これまでに行ったことは、メニュー項目でSetMenuItemBitmapsを呼び出すことです。添付の​​結果は次のとおりです。

ここに画像の説明を入力

ご覧のとおり、メニュー項目には白い背景があります。これは、私が望むものにとてもイライラするほど近いです。透明性の問題を解消するにはどうすればよいですか? このメニュー項目で以下に使用した正確な画像を添付しました。

ここに画像の説明を入力

SetMenuItemBitmaps はカラー画像用ではないことを知っています。

選択されたビットマップとクリアされたビットマップはモノクロである必要があります。システムは、ブール AND 演算子を使用してビットマップとメニューを組み合わせ、白い部分が透明になり、黒い部分がメニュー項目の色になるようにします。カラー ビットマップを使用すると、望ましくない結果になる場合があります。

では、これを行う適切な (できれば簡単な) 方法は何ですか?

編集

私が試したもう 1 つのことは、SetMenuItemInfo を呼び出すことでしたが、エラー 87 (無効なパラメーター) が引き続き発生します。

SetMenuItemInfo を呼び出す前の MENUITEMINFO 構造体は次のようになります。

ここに画像の説明を入力

SetMenuItemInfo で呼び出すパラメーターの値は次のとおりです。

hMenu - ContextMenu へのハンドル?

uItem - 0 (最初のアイテム インデックス?)

fByPosition - 真

lpmii - (上記の構造体の内容)

4

1 に答える 1

1

メニュー項目を追加するときは、フラグを設定して構造体のメンバーにMIIM_BITMAP渡すだけです。ビットマップが 32bpp で事前にアルファが乗算されている場合、正しく表示されます。HBITMAPhbmpItemMENUITEMINFO

于 2013-10-10T22:23:08.713 に答える