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开发漂亮的前端界面之实现原理> 网页中的自定义右键菜单越来越普遍,自定义右键菜单可以增强用户体 ...
随机推荐
- sql中把字符串转化为数字的方法
1. convert(int,字段名) 2. cast(字段名 as int)
- Building a Space Station---poj2031(最小生成树)
题目链接:http://poj.org/problem?id=2031 n个球型的cell,如果任意两个球表面没有接触或者没有包含关系,就选择最近的表面建立通道: 所以用maps[i][j]表示i,j ...
- 【python-opencv】15-图像阈值
[微语]立志要如山,行道要如水.不如山,不能坚定,不如水,不能曲达 import cv2 as cv import numpy as np from matplotlib import pyplot ...
- sql server 基本问题解决思路
1.数据库故障排查步骤,如何处理紧急数据库问题;首先根据报错信息找到故障原因.然后实施对应的解决方案.2.SQL调优步骤,如何来判断SQL语句存在问题,怎么定位问题,如何解决这些问题:可以建立一个Pe ...
- 为帝国cms模板添加站内搜索小教程
由于客户的需要,最近都在整帝国cms,很多东西还是不熟悉,特别是帝国cms模板,以前用的那些网站模板一般是保存在ftp文件中,而帝国cms模板是直接保存在数据库中,修改是在网站后台的模板管理,得慢慢适 ...
- 通过Tacker将NFV引入OpenStack
14年的这个时候,我们还在OpenStack社区中为NFV是否属于OpenStack而争论不休.如今这一争议已经被解决了.OpenStack已经成为NFV讨论中的重要部分,正如下面的ETSI MANO ...
- for与while的特点及其if在什么情况下使用情况
for和while的特点: 什么时候使用循环结构呢? 1:当对某些代码执行很多次时,使用循环结构完成. 2:当对一个条件进行一次判断时,可以使用if语句. 3:当对一个条件进行多次判断时,可以使用wh ...
- eclipse向svn提交代码的时候忽略部分资源配置
eclipse向svn提交代码的时候有 .settings, .project, .classpath, target等不需要上传,所以在eclipse中配置一下就不会显示了,方法如下图:
- PAT 1018 Public Bike Management[难]
链接:https://www.nowcoder.com/questionTerminal/4b20ed271e864f06ab77a984e71c090f来源:牛客网PAT 1018 Public ...
- 在Keras模型中one-hot编码,Embedding层,使用预训练的词向量/处理图片
最近看了吴恩达老师的深度学习课程,又看了python深度学习这本书,对深度学习有了大概的了解,但是在实战的时候, 还是会有一些细枝末节没有完全弄懂,这篇文章就用来总结一下用keras实现深度学习算法的 ...