win32 自定义右键菜单
/****************************************************************************
几大主要问题:
1.通过处理WM_MOUSEACTIVATE,并返回MA_NOACTIVATE可以实现点窗口时不激活窗口(父窗口不会失去焦点)
2.CreateWindowEx时窗口的样式一定要有 WS_EX_TOPMOST 和 WS_POPUP ,并且设置窗口的父句柄。
3.用 ::ShowWindow(hWnd,SW_SHOWNOACTIVATE); 让窗口显示时无焦点
4.消息阻塞:用 GetMessage 来阻塞父窗口,不让代码继续往下执行直到菜单窗口消失为止。 未解决的问题:
1.菜单窗口不处于激活状态,所以未能收到键盘消息
2.窗口点击其他程序时,菜单不会自动消失
****************************************************************************/ /****************************************************************************
创建窗口 (不需要注册窗口类,只能创建一个)
****************************************************************************/
class CMyMenu
{
private:
static WNDPROC OldWndProc;
static LRESULT CALLBACK WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
public:
static void CreateWnd(int x,int y,HWND PareWnd=NULL) //创建窗口函数
{
HWND hWnd = CreateWindowEx(WS_EX_TOPMOST,
_T("#32770"),
_T("Demo"),
WS_POPUP| WS_BORDER,
x,y,,,PareWnd,NULL,NULL,NULL) ; ::ShowWindow(hWnd,SW_SHOWNOACTIVATE); //把hWnd的默认窗口过程替换为WindowProc,返回默认函数过程的函数指针
OldWndProc=(WNDPROC)SetWindowLong(hWnd,GWL_WNDPROC, (LONG) (WindowProc)); MSG msg;
while (GetMessage(&msg, NULL, , ))
{
//点击的不是菜单窗口就返回
if ( msg.message==WM_LBUTTONDOWN || msg.message==WM_RBUTTONDOWN )
{
if ( msg.hwnd != hWnd )
::PostMessage(hWnd,WM_CLOSE,NULL,NULL);
} TranslateMessage(&msg);
DispatchMessage(&msg);
} }
}; WNDPROC CMyMenu::OldWndProc=NULL;
LRESULT CALLBACK CMyMenu::WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_LBUTTONDOWN:
{
::PostMessage(hWnd,WM_CLOSE,NULL,NULL);
}
break; case WM_MOUSEACTIVATE:
return MA_NOACTIVATE ; case WM_CLOSE:
DestroyWindow(hWnd);
break; case WM_DESTROY:
PostQuitMessage(); //会退出消息循环 GetMessage
break; default:
return ::CallWindowProc(OldWndProc, hWnd, message, wParam, lParam); //如果我们没有处理的再交给原窗口默认处理
}
return ;
} void CDemoDlg::OnRButtonUp(UINT nFlags, CPoint point)
{ POINT pt;
::GetCursorPos(&pt);
CMyMenu::CreateWnd(pt.x,pt.y,m_hWnd) ; CDialog::OnRButtonUp(nFlags, point);
win32 自定义右键菜单的更多相关文章
- ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单
前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...
- JavaScript自定义右键菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 自定义右键菜单,禁用浏览器自带的右键菜单[右键菜单实现--Demo]
许多从事Web开发的会发现有些事,我们需要禁用浏览器本事自带的右键菜单,而实现自定义的右键菜单下面我们也来实现一个自定义的右键菜单 首先来创建JSP页面 <%@ page language=&q ...
- JS简单实现自定义右键菜单
RT,一个简单的例子,仅仅讲述原理 <div id="menu" style="width: 0;height: 0;background: cadetblue;p ...
- antd Tree组件中,自定义右键菜单
最近项目中,有一个需求是自定义antd的Tree组件的右键菜单功能. 直接上代码 class Demo extends Component { state = { rightClickNodeTree ...
- AS3.0 自定义右键菜单类
AS3.0 自定义右键菜单类: /** * 自定义右键菜单类 * 自定义菜单项不得超过15个,每个标题必须至少包含一个可见字符. * 标题字符不能超过100个,并且开头的空白字符会被忽略. * 与任何 ...
- js之自定义右键菜单
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [ActionScript 3.0] 自定义右键菜单
将自定义右键菜单的一些属性和方法归纳到AddRightMenu.as,通过实例化此类,调用相关方法即可测试! package { import flash.display.Sprite; import ...
- 【连载】Bootstrap开发漂亮的前端界面之自定义右键菜单
连载: 1<教你用Bootstrap开发漂亮的前端界面> 2.<Bootstrap开发漂亮的前端界面之实现原理> 网页中的自定义右键菜单越来越普遍,自定义右键菜单可以增强用户体 ...
随机推荐
- spring读取配置文件内容并自动注入
添加注解: @PropertySource(value={"classpath:venus.properties"}) 示例: import org.springframework ...
- QtCreator 可以通过 Clang-Tidy 和 CLazy 对你的代码进行静态检查
QtCreator 可以通过 Clang-Tidy 和 CLazy 对你的代码进行静态检查 打开你的工程,点击Analyze -> Clang-Tidy and CLazy 选择你想分析的 cp ...
- Ubuntu安装mysql及设置远程访问方法
ubuntu上安装mysql非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-server 2. apt-get isntall mysql-clie ...
- kettle 安装mysql 驱动
错误连接数据库 [mysql] : org.pentaho.di.core.exception.KettleDatabaseException: Error occurred while trying ...
- iphone传照片还是用QQ比较好
之前设置相机格式为高效,通过用91助手的苹果助手导出来文件格式为HEIC,window下没法打开.网上介绍用微信传,发现传的是缩略图,不清楚.最后选择通过qq传比较高清.注意,如果从相册中进行选择的话 ...
- 使用浏览器,调试js代码
1:创建html网页和js文件 <!doctype html> <html> <head> <meta charset="utf-8"&g ...
- Oil Deposits(poj 1526 DFS入门题)
http://poj.org/problem?id=1562 ...
- Linux文本编辑器快捷方式
- 爆出的法拉第未来(Faraday Future,以下简称“FF”)
在本次融资"乌龙"之前,FF已经传出过两次融资消息,传闻对象既有印度大型财团,也是捷豹路虎的控股方塔塔集团,也有香港李嘉诚之子"小巨人"李泽楷,但最后都被各方否 ...
- .net MVC 下拉多级联动及编辑
多级联动实现,附源码.当前,部分代码是参与博客园其它网友. 新增,前台代码: <script src="~/Scripts/jquery-1.10.2.js">< ...