BHO多线程中实现右键菜单
在BHO中实现右键菜单网上相关文章很多,可以通过实现IDocHostUIHandler接口的ShowContextMenu、截获HTMLDocumentEvents2的OnContextMenu消息等。
但这两种方式都必须在浏览器线程中实现才能正常弹出右键菜单,当你需要在另外的线程中实现右键菜单,这就不行了,TrackPopupMenuEx的时候会直接略过。
我采取的方式是建一个看不见的窗口,TrackPopupMenuEx所需的窗口句柄设置为该窗口。
构建一个轻量级的窗体类:
#include <atlbase.h>
#include <atlwin.h> class CMenuWindow : public ATL::CWindowImpl < CMenuWindow >
{
public:
BEGIN_MSG_MAP(CMenuWindow)
END_MSG_MAP();
};
右键菜单例子:
HMENU hMenu = CreatePopupMenu();
AppendMenu(hMenu, MF_STRING, 1001, L"aaa");
AppendMenu(hMenu, MF_STRING, 1002, L"bbb");
AppendMenu(hMenu, MF_STRING, 1003, L"ccc");
POINT pt;
GetCursorPos(&pt);
RECT wndRect;
wndRect.left = pt.x;
wndRect.top = pt.y;
wndRect.right = wndRect.left + 1;
wndRect.bottom = wndRect.top + 1;
CMenuWindow wnd;
wnd.Create(NULL, wndRect, _T(""), WS_OVERLAPPED | WS_CAPTION);
SetForegroundWindow(wnd.m_hWnd); // 必须设置到最前面,否则取消会成问题
int cmd = TrackPopupMenuEx(hMenu, TPM_LEFTALIGN | TPM_NONOTIFY | TPM_RETURNCMD | TPM_LEFTBUTTON, pt.x, pt.y, wnd.m_hWnd, NULL);
DestroyMenu(hMenu);
wnd.DestroyWindow(); ATL::CString msg;
msg.Format(L"id = %d", cmd);
MessageBox(NULL, msg, L"", MB_OK);
BHO多线程中实现右键菜单的更多相关文章
- 仅在TabControl中的Tab中添加右键菜单
若想实现仅在TabControl中的Tab中添加右键菜单,可在XAML中通过使用样式得到: <TabControl> <TabControl.ItemContainerStyle&g ...
- WPF中ContextMenu(右键菜单)使用Command在部分控件上默认为灰色的处理方法
原文:WPF中ContextMenu(右键菜单)使用Command在部分控件上默认为灰色的处理方法 问题描述 今天发现如果我想在一个TextBlock弄一个右键菜单,并且使用Command绑定,结果发 ...
- 怎样在Windows资源管理器中添加右键菜单以及修改右键菜单顺序
有时,我们需要在Windows资源管理器的右键菜单中添加一些项,以方便使用某些功能或程序. 比如我的电脑上有一个免安装版的Notepad++,我想在所有文件的右键菜单中添加一项用Notepad++打开 ...
- Maven问题总结:Eclipse中项目右键菜单中点击Maven->Update Projects时JDK被重置
Eclipse中在项目右键菜单点击->Maven->Update Projects时,JDK总是切回 1.5 如果没有在Maven中配置过JDK版本,只是在Eclipse中项目的Prope ...
- DevExpress GridView加入DevExpress中的右键菜单PopuMenu
1. 添加一个Barmanager控件 2. 加入popumenu控件,点击该控件右上角的黑色三角号,编辑选项,点击编辑的选项,选择事件,编辑事件. 3. 在使用该右键菜单的控件添加MouseUp事件 ...
- Pyqt在QListWidget中添加右键菜单
Pyqt 的资料奇少, 攻破难点之后, 就在这里记一下笔记. QListWidget 是继承 QWidget 的, 所以 QListWidget 是有右键菜单的, 从文档上可以找到 QWidget 上 ...
- 关于JFace中的右键菜单Action类,ActgionGroup类,MenuManager类
Action类,ActionGroup类,MenuManager类介绍 SWT中菜单是Menu类,在前面章节中已经介绍过Menu类的使用. 菜单项用MeauItem类来实现.但是在实际开发中,同一种功 ...
- pyqt5的QListWidget中设置右键菜单
QListWidget 是继承 QWidget 的, 所以 QListWidget 是有右键菜单的, 从文档上可以找到 QWidget 上有以下两个与右键菜单有关的函数: Qt.ContextMenu ...
- Window7 定制 Explore中的右键菜单
win+R 命令 运行 regedit ,打开注册表 在 HKEY_CLASSES_ROOT\*\shell\VisualCode下创建针对文件的新增命令 command 在HKEY_CLASSE ...
随机推荐
- Solr4.4.0部署到tomcat上
主要步骤如下: 1.下载solr-4.4.0.tgz 2.解压缩solr-4.4.0.tgz,命令tar -xzvf solr-4.4.0.tgz 3.压缩后进入到solr-4.4.0目录,将 exa ...
- 【转】asp.net mvc webapi+angular.js案例
参考地址:http://www.mamicode.com/info-detail-892383.html 大家好,本文用一个简单的demo演示AngularJS在MVC中的使用,在学习这个demo之前 ...
- lesson1:threadlocal的使用demo及源码分析
本文中所使用的demo源码地址:https://github.com/mantuliu/javaAdvance 其中的类Lesson1ThreadLocal 本文为java晋级系列的第一讲,后续会陆续 ...
- UINavigation push 于 present到另一个页面详解
如果页面中没有导航栏,可以present到这个A页面,在A页面想要跳转到有个有导航栏的页面就需要添加给B页面添加一个UINavigationController 然后present到B页面,代码如下 ...
- 关于git的文件内容冲突解决
虽然以前我很怕git冲突,包括以前的版本控制器SVN上的冲突,但是昨天我决定好好的面对它,不去怕它,下面是我的解决过程... 话说一天的早上,我和同事(称为A)都同步了网络上的代码,然而A在中途提交了 ...
- Weka算法Clusterers-DBSCAN源代码分析
假设说世界上仅仅能存在一种基于密度的聚类算法的话.那么它必须是DBSCAN(Density-based spatial clustering of applications with noise).D ...
- Win8.1OS64位oracle11安装配置及PL/SQL Developer怎样连接64位oracle
Oracle 为什么选择oracle 1.oracle可以在主流的平台上执行,而相对于sql server仅仅支持windows,而windows在wr手里攥着呢,所以你懂的.在安全性上来讲,非常多地 ...
- android源代码百度网盘分享
转载请标明出处: http://blog.csdn.net/yujun411522/article/details/46334123 本文出自:[yujun411522的博客] 近期在使用Ubunt ...
- 使用AudioTrack播放PCM音频数据(android)
众所周知,Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的.MediaPl ...
- NS2仿真:两个移动节点网络连接及协议性能分析
NS2仿真实验报告2 实验名称:两个移动节点网络连接及协议性能分析 实验日期:2015年3月9日~2015年3月14日 实验报告日期:2015年3月15日 一.实验环境(网络平台,操作系统,网络拓扑图 ...