在上下文菜单中定位菜单项图像(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) 的相关文章

  • 为什么单线程异常会导致整个程序崩溃(如何防止这种情况?)

    例如 如果我跑步 int x 0x00000 程序崩溃了 但为什么整个程序崩溃而不是单个线程崩溃呢 我创建了多个连续睡眠的线程来测试这一点 有什么方法可以让当前线程退出 而不是整个程序 在Windows上使用winapi Thanks 但为
  • VB.NET 中的“阴影”与“覆盖”

    这两个关键词有什么意义Shadows http msdn microsoft com en us library 1h3wytf6 aspx and 覆盖 http msdn microsoft com en us library k777
  • 如何在 vb.net 中使用 Stacktrace 返回错误行号

    我正在尝试创建某种错误捕获方法来返回错误行号 当进程中止时 我们会发送一封中止电子邮件 该电子邮件为我们提供了错误号 and 错误描述但我想知道实际上哪里出了错误 我知道你可以执行以下操作 1 code here 2 code here 3
  • 如何判断一个类是否被某个特定属性修饰

    我试图确定接口是否用特定属性装饰 例如我有以下界面
  • 检查有效的 IMEI

    有人知道如何检查有效的 IMEI 吗 我找到了一个可以检查此页面的功能 http www dotnetfunda com articles article597 imeivalidator in vbnet aspx http www do
  • NtDll 真的导出 C 运行时函数吗?我可以在我的应用程序中使用这些函数吗?

    我在查看 Windows 10 计算机上的 NtDll 导出表 发现它导出标准 C 运行时函数 例如memcpy sprintf strlen etc 这是否意味着我可以在运行时动态调用它们LoadLibrary and GetProcAd
  • WinApi:获取 COM 表单的控件名称

    我想用 Net 框架替换我当前的 UI 自动化工具 QTP 我需要测试 VB6 COM 应用程序 框架的基础之一是使用表单名称 到目前为止 我未能找到使用 Win API 获取这些数据的方法 该解决方案只有一个约束 即该解决方案必须依赖 N
  • Visual Studio 2022 - 编译旧应用程序时出错

    我们正在尝试在 Visual Studio 2022 中使用 VB6 32 位应用程序 编译 2002 年以来非常旧的应用程序 我们需要调试此应用程序并能够在 Windows 10 计算机上运行此应用程序 编译时 我们发现以下错误 这似乎是
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前
  • Windows 窗口对接

    我想知道如何在 Windows 中将窗口停靠 捕捉到屏幕的一侧 最好使用直接的 Win32 API 我正在寻找的效果就像任务栏 一个在屏幕上有保留空间的窗口 因此最大化另一个窗口会使该窗口占据屏幕的其余部分 但使我的窗口保持在适当的位置并可
  • C# 的最佳替代“错误继续下一步”是什么?

    如果我为 C 代码放置空的 catch 块 它是否与 VB NET 的 On Error Resume Next 语句等效 try C code catch exception 我问这个问题的原因是因为我必须将 VB NET 代码转换为 C
  • 使用 CreateProcessAsUser 和 CreateEnvironmentBlock 创建进程后未设置 Clientname

    我编写了一个在本地系统帐户下运行的 C 服务 当用户登录终端服务器时 我用它来生成一个进程 该服务实现了OnSessionChange方法并接收SessionChangeDescription具有相应SessionID的消息 我使用此 Se
  • VB.NET 中的模块变量何时实例化?

    我想知道在程序的生命周期中 模块中的变量将被初始化 如下例所示 Module Helper Friend m Settings As New UserSettings Sub Foo End Sub Sub Bar End Sub End
  • 如何在vb.net中实现事务方式?

    我使用 VB net 200 开发一个连接到 MS Access 数据库的应用程序 我使用 TableAdapter 和 Dataset 连接到 Access DB 文件 我需要实现一个简单的事务方法 提交 回滚 来保存到数据库 有没有一种
  • F# 之于 IronPython/IronRuby 就像 C# 之于 VB.NET 一样?

    我刚刚听了Chris Smith 谈论 F 的播客 http www code magazine com codecast index aspx messageid 7feb501f 25c8 432a 9624 97082f1e75e8他
  • Newtonsoft.Json.JsonReaderException

    我的 Newtonsoft Json 有问题 我正在尝试从 URL 解析 JSON 但收到错误 这是 JSON ID 0 Nome we Data 2013 09 16 Orario 00 00 16 Prestazione dfg Sta
  • VB.NET 类或模块的用途是什么?

    这里是新手酱 所以 我试图找到答案 但找不到 拥有类或模块的目的是什么 我读到的所有内容都试图告诉我它是什么 但不是它的用途 为什么我需要制作一个 我读到的所有内容似乎都对阅读教程的人做出了假设 就好像我知道很多一样 模块实际上与仅包含共享
  • 我应该如何在 VB.NET 中进行转换?

    所有这些都相等吗 在什么情况下我应该选择其中一个而不是其他 var ToString CStr 变量 CType 变量 字符串 DirectCast 变量 字符串 编辑 来自的建议不是我自己 https stackoverflow com
  • 为 PInvoke 正确声明 SP_DEVICE_INTERFACE_DETAIL_DATA

    The SP DEVICE INTERFACE DETAIL DATA http msdn microsoft com en us library windows hardware ff552343 aspx结构 typedef struc
  • 可以在滚动条上绘画吗?

    是否可以在 TMemo TListbox 等标准控件的滚动条上进行绘制 我所需要的只是在滚动条上绘制一些基本形状 并且我试图避免从 stratch 实现整个滚动内容 有什么指点吗 蒂亚 确实有可能 你可能想看一下WM NCPAINT消息 这

随机推荐

  • 如何从终端运行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 中 它的位置不同 在