2016-12-18 9 views
1

件名のテキストコントロールのOutlookコンテキストメニューにメニュー項目を挿入しています。 Here you can find a previous question I had on doing this.コンテキストメニューのメニュー項目イメージ(MENUITEMINFOのhbmpItem)の配置

問題は、Outlook 2010でメニュー項目の画像が妙に配置されていることです。Outlook 2007では、配置が異なっています。 Outlook 2010では、チェックされた画像の位置がメニューアイテムによって空いているように見えます。

Menu Item with no unChecked image これは、私のメニュー項目が以下のコードでどのように見えるかを示しています。画像の左側に大きなスペースがあることに注目してください。

Menu Item with an unChecked image これは、MIML_CHECKMARKSフラグをfMaskに追加し、ビットマップをhbmpUncheckedポインタに追加する方法を示しています。

  Dim bmp As Drawing.Bitmap = My.Resources.olContextMenuIcon 
      bmp.MakeTransparent(bmp.GetPixel(10, 10)) 

      hbitmap = bmp.GetHbitmap 

      Dim mii As New NativeMethodsEX.MENUITEMINFO 
      With mii 
       .cbSize = Marshal.SizeOf(mii) 
       .fMask = NativeMethodsEX.MIIM.MIIM_BITMAP Or NativeMethodsEX.MIIM.MIIM_STRING Or NativeMethodsEX.MIIM.MIIM_FTYPE Or NativeMethodsEX.MIIM.MIIM_STATE Or NativeMethodsEX.MIIM.MIIM_ID 
       .wID = WM_APP 
       .fType = NativeMethodsEX.MFT.MFT_STRING 
       .dwTypeData = String.Concat("Wrong Position") 
       .fState = NativeMethodsEX.MFS.MFS_ENABLED 
       .hbmpItem = hbitmap 
      End With 

      If ShowTop Then 
       NativeMethodsEX.InsertMenuItem(aHwnd, 0, True, mii) 
       NativeMethodsEX.InsertMenu(aHwnd, 1, NativeMethodsEX.MFT.MFT_BYPOSITION Or NativeMethodsEX.MFT.MFT_SEPARATOR, Nothing, Nothing) 
      Else 
       Dim menuItemCount As Integer = NativeMethodsEX.GetMenuItemCount(aHwnd) 
       NativeMethodsEX.InsertMenu(aHwnd, menuItemCount, NativeMethodsEX.MFT.MFT_BYPOSITION Or NativeMethodsEX.MFT.MFT_SEPARATOR, Nothing, Nothing) 
       NativeMethodsEX.InsertMenuItem(aHwnd, menuItemCount + 1, True, mii) 
      End If 

      NativeMethodsEX.DrawMenuBar(subjectRegionHwnd) 

メニューの項目にチェック/チェックを外すためのスペースを予約しないように指示するにはどうすればよいですか?

+0

他のメニュー項目がどのように追加されたかを制御することはできません。確かに、それらは問題の根本にあります。 hbmpItemとab/hbmpUncheckedを使用してビットマップを表示しないで*進む*に進む必要があると思われます。うまくいくかもしれない。 –

+0

はい私はそれが1つの回避策であることに同意します。私はそれを解決し、問題の解決方法を書いていきます。 – darbid

答えて

1

この問題は2つあります。

Outlook 2010ではメニューに問題が存在していましたが、Outlook 2007では問題が存在しませんでした。これは当てはまりません。これらのオフィスバージョンはもちろん、別々のコンピュータ上にあり、問題の原因となったのはウィンドウの表示設定でした。上記のメニューは、[パフォーマンスオプション]> [ビジュアルエフェクト]をオフ(Win 7)で[Windowsとボタンでビジュアルスタイルを使用する]設定を使用した場合に表示されます。この設定を有効にすると、メニューが表示され、特に非常に異なる動作をします。

しかし、ユーザーがこの設定を無効にするとどうなりますか(これがWin10に関係するかどうかはわかりません)。

You need to set the menu style through the use of the Menuinfo特に、フラグMNS_NOCHECKを設定する必要があります。メニューがもはやチェックマークを期待していないので、スペースはなくなります。

この解決策は、別のスタックオーバーフローの答えでcan also be seen hereです。

関連する問題