我将菜单项插入到主题文本控件的Outlook上下文菜单中。 Here you can find a previous question I had on doing this.
我遇到的问题是,Outlook 2010中的菜单项图像位置奇怪。在Outlook 2007中,它的位置不同。似乎菜单项在Outlook 2010中保留了已选中图像的位置。
这显示了我将MIIM_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 :(得分:1)
我对这个问题有两个答案。
我在上面指出,问题存在于Outlook 2010中的菜单上,但不存在于Outlook 2007中。但事实并非如此。这些办公室版本当然是在不同的计算机上,它是Windows中的显示设置,是导致问题的原因。上面的菜单是您在Windows上使用视觉样式和按钮"在“效果选项”中>视觉效果关闭(Win 7)。如果启用此设置,则菜单看起来会有很大不同。
但是如果用户禁用此设置怎么办呢(不确定这是否与Win10相关)。
You need to set the menu style through the use of the Menuinfo特别需要设置标志MNS_NOCHECK。然后空间消失,因为菜单不再需要复选标记。
此解决方案can also be seen here在另一个stackoverflow答案中。