2015年1月14日水曜日

Context Menu Handlerで、きちんとアイコンを付ける方法

MSDNのHow to Implement the IContextMenu Interfaceとうで紹介されています、エクスプローラの右クリックメニュー拡張機能。

テキストの隣に画像を付ける方法が、実はいくつも有り、困っています。。。

正しい方法を模索しています。

主にWindows 7でテスト中。

ーーー
次図は、InsertMenuとSetMenuItemBitmapsを使った例です。あげとさげを追加しました。



お馴染みのDropboxやTortoise系を並べる事で、どのような塩梅か、比べています。

表示した直後は普通ですが、一度でもハイライトすると、背景色が白くなります。これはマズい。

ーーー
次図は、IContextMenu3+MF_OWNERDRAW+WM_DRAWITEMで対応した例です。


一応目的は果たしているように思えますが、、、どうも周囲とのバランスが取られていません。

ーーー
次図は、InsertMenuItem+MIIM_BITMAPで行った例です。hbmpItemには、ビットマップハンドルを渡しています。


最初と同じ動作のようです。

ーーー
次図は、HBMMENU_SYSTEMを用いた例です。hbmpItem = HBMMENU_SYSTEM


しかし、如何様に頑張ってみても、図のような、ウィンドウのアイコンしか出てきません。。。

ーーー
次図は、HBMMENU_CALLBACK+WM_DRAWITEM+WM_MEASUREITEMを用いた例です。hbmpItem = HBMMENU_CALLBACK


意図したような表示になり、一応成功していますが、メニューデザインがXP時代の物に退化してしまっています。

ーーー
次図は、先のInsertMenuItem+MIIM_BITMAPで行った例です。hbmpItemには、32bppのビットマップハンドルを渡しています。


どうもこれが正解のようです。TortoiseSvnのソースコードを覗いたら、そのような実装になっていました。

PArgbかArgbか、どちらが良いのか、そこまでは判りませんが。。。 PArgbでないと、表示が変になっていました。

0 件のコメント:

コメントを投稿