在上下文菜单中定位菜单项图像(MENUITEMINFO 的 hbmpItem)

2023-12-10

我正在将菜单项插入到主题文本控件的 Outlook 上下文菜单中。在这里您可以找到我之前提出的有关执行此操作的问题。

我遇到的问题是,菜单项的图像在 Outlook 2010 中的位置很奇怪。在 Outlook 2007 中,它的位置不同。在 Outlook 2010 中,菜单项似乎保留了选中图像的位置。

Menu Item with no unChecked image This shows how my menu item looks with the below code. Notice the large space to the left of the image.

Menu Item with an unChecked image This shows how it looks when i add the MIIM_CHECKMARKS flag to fMask and a bitmap to the hbmpUnchecked pointer.

            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)

那么我怎样才能告诉菜单项不为选中/取消选中图像保留空间呢?


对于这个问题我有两个答案。

我在上面指出,该问题存在于 Outlook 2010 的菜单上,但不存在于 Outlook 2007 中。事实并非如此。当然,这些 Office 版本位于不同的计算机上,并且 Windows 中的显示设置是导致问题的原因。当您在“性能选项”>“视觉效果”中关闭“使用 Windows 和按钮上的视觉样式”设置(Win 7)时,您会看到上面的菜单。如果启用此设置,则菜单的外观(尤其是行为)将非常不同。

但是如果用户禁用了这个设置怎么办(不确定这是否与Win10相关)。

您需要通过使用 Menuinfo 设置菜单样式特别是您需要设置标志 MNS_NOCHECK。然后空格就消失了,因为菜单不再需要复选标记。

这个解决方案也可以在这里看到在另一个 stackoverflow 答案中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在上下文菜单中定位菜单项图像(MENUITEMINFO 的 hbmpItem) 的相关文章

  • .net 应用程序中的内存泄漏

    我正在 VB net 2005 中开发一个桌面应用程序 该应用程序包含一个间隔为 1 分钟的计时器 每次计时器计时 就会执行一组函数 大部分与数据库相关 最初 应用程序运行良好 在进程 任务管理器 中 每次调用计时器时 CPU 使用率都会达
  • 您是否必须在 VB.NET 中显式创建表单实例? [复制]

    这个问题在这里已经有答案了 如果一个项目包含Form类 形式可以通过以下方式显示 Form1 Show 或者是否需要首先创建表单的实例 Dim frm As New Form1 frm Show 正如所建议的 使用表单名称使用默认实例 而第
  • 使用 WinAPI 连接禁用的显示设备

    我的问题是启用禁用的监视器ChangeDisplaySettingsEx 我想这不是火箭科学 但经过一番挖掘后 它看起来仍然是不可能的 我找到了一种根据找到的 Microsoft 代码示例禁用所有辅助显示器的方法here https msd
  • 有关 CredEnumerate 的帮助

    作为后续this https stackoverflow com questions 199518 how to programatically add mapped network passwords winxp我希望有人可以帮助解决这个
  • VB.net 应用程序保留以前的版本

    我有一个正在发布的 Visual Basic 项目 并且每次都会增加版本号 当我安装新版本时 它会打开 但一旦应用程序重新启动 它似乎就会恢复到以前的版本 我不知道为什么 尝试更新发布应用程序时所需的最低版本 转到应用程序属性 gt 发布
  • 这段代码有什么问题。如果用户选择或不选择复选框,为什么它仍然显示 MsgBox? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 无论我是否选择复选框 它仍然会给出
  • 使用 Rijndael 解密文本文件

    我用过本指南 https www codeproject com Articles 12092 Encrypt Decrypt Files in VB NET Using Rijndael加密的值txtCode Text到一个文本文件中 然
  • 将 DotNetZip ZipFile 转换为字节数组

    我已经构建了一个包含多个条目的 DotNetZip ZipFile 我想将其转换为字节数组 以便我可以使用下面的下载结构下载它 Using wrkZip As New ZipFile create zip add memory stream
  • 如何在 VB.NET 中输入文字二进制?

    如何在 VB NET 中输入二进制文字 HFF literal Hex OK b11111111 literal Binary how do I do this 从 VB NET 15 开始 现在支持二进制文字 Dim mask As In
  • 尝试添加注册表项时出现未处理的异常

    当我使用以下代码时 My Computer Registry LocalMachine OpenSubKey SOFTWARE Microsoft Windows CurrentVersion Run True SetValue Appli
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • VB.NET会自动生成ComClass属性和guid吗?

    我运行过一些 VB NET 代码 这些代码显式创建三个 GUID 常量并在类的 ComClass 属性中使用它们 我过去只是通过检查项目选项中的 使 COM 可见 和 注册 COM 互操作 选项来编写 COM 感知类 这个显式代码是否根本没
  • Gridview rowdatabound访问数据项vb

    我正在尝试将 ImageUrl 指向 GridView 中模板字段中的图像 但不断收到错误 你调用的对象是空的 在这一行 Dim imagePath As String rowView image path 我以前从未在 GridView
  • 禁用按钮上的实际文本颜色

    VB2012 我正在创建一个按钮控件并继承自 NET 按钮 从这里夺取基地https blogs msdn microsoft com jfoscoding 2005 11 10 building a splitbutton https b
  • 无法从 Windows 注册表查询值

    我为 Windows 注册表编写程序并尝试从中查询值 但即使我以管理员权限运行自己的程序 我也无法读取所有参数并收到错误代码 5 某些值的访问被拒绝 但同时标准的注册表可以向我展示这个价值 我做错了什么 我有一个注册表类RegistryCl
  • 如何使用 VB.NET 以编程方式在 Richtextbox 中添加粗体文本

    我有这个代码 print text Text Patient number ds Tables patients Rows 0 Item 0 print text AppendText Environment NewLine print t
  • 如果图像包含特定颜色则

    是否有一种简单的方法来检查图像是否包含特定的 RGB 颜色 例如 Dim img As Image Image FromFile C image png If img contains color red toRGB then 我认为检查这
  • Win32:是否可以构建一个容纳其他应用程序的应用程序?

    我想知道 您将如何编写一个基本上包含其他应用程序的应用程序 我问这个问题的原因是我想构建一个应用程序来 征服 我目前打开的窗口数量激增的情况 我以前使用过虚拟窗口管理器 它们非常好 但是我可以使用我提到的应用程序做很多事情 或者 有人知道有
  • Gridview 错误:对 Bind 的调用格式不正确

    我有以下 gridview 代码
  • 是否可以编写一个在另一个 Windows 应用程序中选择文本时收到通知的 Windows 应用程序?

    我很好奇是否可以编写一个程序来监视我的文本选择 一种可能的用途是编写一个与编辑器 IDE 无关的代码格式化程序 应用程序 服务 P 启动并以某种方式挂接到窗口中 以便在任何窗口中选择文本时收到通知 启动其他一些应用程序 A 用户选择 A 中

随机推荐

  • 如何从终端运行Java程序?

    我正在尝试从我的终端运行 Java 程序 我有 Mac OS X 10 7 teamL javac jar kxml2 2 3 0 jar XMLHandler java ServiceEndpoint java TeamL java 这是
  • 如何使ResourceResponse将请求转发到liferay portlet中的错误页面

    当生成 Excel 工作表期间发生错误时 我试图将我的请求转发到错误页面 下面是示例代码 我不确定为什么抛出异常时它没有转发到错误页面 它显示空白页面但肯定不会转到我的错误页面 ResourceMapping xyz public void
  • 如果我在应用程序内访问 iPhone 序列号,App Store 是否允许这样做?

    我读过有关 IOKit Extension 的信息 用于从应用程序内的 iPhone 获取序列号 博客 jdevelop eu 其实我知道应用程序商店中有一个应用程序可以读取序列号并显示它 现在怎么办 是否允许 有什么经验吗 来自开发者网站
  • 将整数转换为字符串以在运行时创建输出文件名

    我有一个 Fortran 程序 可以将结果保存到文件中 目前我使用打开文件 OPEN 1 FILE Output TXT 但是 我现在想运行一个循环 并将每次迭代的结果保存到文件中 Output1 TXT Output2 TXT Outpu
  • 为什么打开word文档时会生成~$开头的文件?

    我们都可能已经注意到创建了一个名为 filename docx 隐藏 打开时filename docx使用 MS Word 该文件的目的是什么 它为何被创建以及它包含什么 它维护有关文档当前状态的临时信息 您是否遇到过崩溃 当您打开 Wor
  • 即使 userInteractionEnabled 设置为 NO,UITextField 也会显示光标

    我有一个 UITextField 它必须让光标闪烁 即使它的 userInteractionEnabled 属性设置为 NO 我不希望 UITextField 成为FirstResponder 并显示键盘 现在你可能会问 1 如果要隐藏键盘
  • CALayers 没有因 UIView 的边界变化而调整大小。为什么?

    我有一个UIView其中大约有8种不同的CALayer添加到其图层的子图层 如果我修改视图的边界 动画 然后视图本身缩小 我用backgroundColor but 子层的大小保持不变 怎么解决这个问题呢 我使用了与 Solin 相同的方法
  • 来自 2D 数组 CUDA 的 2D 纹理

    我试图将 Nx3 数组传递给内核 并像在纹理内存中一样从中读取并写入第二个数组 这是我的简化代码 其中 N 8 include
  • 替换数据框中的字符串

    我正在尝试替换大型 data frame 中的某个字符串 我刚刚找到以下解决方案但是gsub不保留原始的 data frame 布局 我怎样才能做到这一点 我的意思是我想替换一个字符串 并且不想更改 df 的布局 考虑这个例子 test l
  • 嵌入式二进制

    错误 嵌入的二进制文件未使用与父应用程序相同的证书进行签名 验证嵌入式二进制目标的代码签名设置与父应用程序的代码签名设置是否匹配 另外 为什么我的个人资料不断被 XC 通配符个人资料替换 解决了问题 我按照这个步骤解决了 转到我的构建设置并
  • 字典中值的字典 KeyError

    我在字典中有一个字典 123456789 u PhoneOwner u Bob Frequency 0 98765431 u PhoneOwner u Sarah Frequency 0 这个想法是扫描号码拨打的电话列表并与字典进行比较 每
  • 使用 Flexbox 连续显示 4 个 div

    我试图使用下面的 html 在一行中显示 4 个框 所以一排应该有 4 个盒子 我总共有 8 个盒子 有 2 行 4 列 div class parent div class child box1 A Child div div class
  • Android WebView 在 WebView 中单击打开,而不是默认浏览器

    我使用 WebView 做了一个示例应用程序 在该 Web 视图中 URL 来自 Web 服务 它工作正常 但如果我单击该 WebView 中的任何链接 它会自动转到默认 Web 浏览器 但我只想在我的应用程序网络视图中打开 这是我的代码
  • “不是空格也不是连字符”的正则表达式是什么

    我尝试了这个 但它不起作用 s 有任何想法吗 s 应该有效 所以会的 s char 类 在 char 类内部 是个 否定词出现在开头时 s 空格的缩写 字面连字符 连字符是 元字符位于 char 类中 但不是 当它出现在开头或 在最后
  • Websocket 不支持 SSL

    https www hi todd com websocket 我使用 MQTT 协议创建了一个演示 它在 HTTP 连接下运行良好 但是当我尝试将 HTTP 更改为 https 时 出现连接错误 我已在 mosquitto conf 文件
  • 是否可以选择带有 nth-child 的最后 n 个项目?

    使用标准列表 我尝试选择最后 2 个列表项 我有各种排列An B但似乎没有选择最后两个 li nth child n 2 selects from the second onwards li nth child n 2 selects ev
  • 在 Perl 中,如果强制使用 foreach 循环,如何找到字符串中匹配的位置?位置

    我必须使用 while 循环找到较大字符串中匹配字符串的所有位置 并使用 foreach 循环作为第二种方法 我已经弄清楚了 while 循环方法 但我陷入了 foreach 方法 这是 while 方法 my sequence AACAA
  • 在iOS中,如何向下拖动来关闭模态框?

    关闭模态框的常见方法是向下滑动 我们如何允许用户向下拖动模态框 如果足够远 则模态框被关闭 否则它会动画回到原始位置 例如 我们可以发现它用于 Twitter 应用程序的照片视图或 Snapchat 的 发现 模式 类似的线程指出 当用户向
  • Android 10 版本之后如何验证 IMEI 号码?

    我需要验证 IMEI 号码 他们有验证输入 IMEI 的机制吗 我们可以获得 true 或 false 的验证状态吗 您不能 第三方应用程序不能使用 IMEI 也不能使用手机的序列号和其他不可重置的设备标识符 对不可重置设备标识符的限制 从
  • 在上下文菜单中定位菜单项图像(MENUITEMINFO 的 hbmpItem)

    我正在将菜单项插入到主题文本控件的 Outlook 上下文菜单中 在这里您可以找到我之前提出的有关执行此操作的问题 我遇到的问题是 菜单项的图像在 Outlook 2010 中的位置很奇怪 在 Outlook 2007 中 它的位置不同 在