win32进阶之路:程序托盘图标+右键弹出菜单
开场白
本次介绍两个非常棒且实用的技巧:程序托盘图标和右键弹出菜单,效果如下图。
程序托盘图标用了迅雷的图标,右键点击时候会弹出三个选项的菜单。
程序托盘图标设置
我会用尽可能清晰明了的步骤介绍方式来讲述,我假设大家已经动手写了属于自己的windows窗体,刚学习win32的朋友可以看一下我之前的博客,有介绍如何从头创建属于自己的第一个windows窗口,也可以直接参照本文末尾贴出的完整代码做一些参考。如果大家觉得其他方式更好或者对讲述不理解的可以评论或者发送给我的邮箱believing_dan@hotmail.com,QQ382128698.
步骤1:声明托盘图标对象并给关键成员赋值。
步骤2:通知windows在右下角区域添加图标。
步骤3:处理托盘图标的左键点击和右键点击消息。
步骤1/2的代码:
步骤3的代码,即如何处理托盘关联的消息。
再次假设大家已经有了自己的windows窗体,完整代码参考本文最后贴出的代码。
是不是太简单了!呵呵,就这么简单,在windows的窗体处理函数中增加一个case处理托盘关联的消息,鼠标对托盘的动作可以通过lparam参数来获取,这里我处理了左键和右键的单击消息,左键单击弹出一个提示框,右键单击托盘......好嘛,我已经漏题了,没错,右键的处理就是添加一个弹出菜单。
增加右键弹出菜单
步骤1:创建一个PopMenu对象。
步骤2:为新增加的弹出菜单增加菜单项。
步骤3:显示新增加的菜单。
步骤4:处理菜单项的消息。
又用4步就搞定了这么实用的技巧,是不是小激动呢?尽管前面已经漏题了,还是讲一下代码吧。
创建一个弹出菜单的HMENU句柄,菜单分很多种,需要用对应的创建API
HMENU hMenu = CreatePopupMenu();
插入一个菜单项,并给菜单项起一个字符名称,这里必须设置菜单项的类型是MF_STRING,并给菜单项关联一个ID
AppendMenu(hMenu, MF_STRING , IDM_FIR, "秘籍");
插入一个分隔符,让菜单更好看,啥?没错,就是更好看一点
AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
对比一下前面的截图,不一样的地方就是分隔符在搞鬼了。
获取到当前的鼠标位置并显示刚创建的弹出菜单,这里有一个小技巧,为什么不把弹出菜单和当前窗口关联起来呢,这样点选菜单后就会自动销毁菜单了。
POINT pt;
GetCursorPos(&pt);
TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, pt.x, pt.y, NULL, hwnd, NULL);
弹出菜单的响应消息属于WM_COMMAND命令系列,通过wparam可以区分点击的菜单项。
case WM_COMMAND:
switch (wparam)
{
case IDM_FIR:
MessageBox(NULL, TEXT("Recv popup menu idm_fir message"), TEXT("Popup"), MB_ICONINFORMATION);
break;
case IDM_SEC:
MessageBox(NULL, TEXT("Recv popup menu idm_sec message"), TEXT("Popup"), MB_ICONASTERISK);
break;
case IDM_THI:
MessageBox(NULL, TEXT("Recv popup menu idm_thi message"), TEXT("Popup"), MB_ICONEXCLAMATION);
break;
default:
break;
}
break;
源代码链接说明:完整代码是还在完善中的一个锁屏软件代码,可能要费些功夫去寻找一下本文介绍的功能,当然也可能会对大家有一些额外的帮助,下面是锁屏软件的截图,中间的妹子可是会眨眼卖萌的哟,子窗口会逐渐漂移,碰到屏幕边缘会反弹回来。
锁屏软件持续更新中,欢迎大家关注我的博客。
代码及示例 http://download.csdn.net/detail/hd770c/6920757
win32进阶之路:程序托盘图标+右键弹出菜单的更多相关文章
- vc++ 如何添加右键弹出菜单
一.创建新工程 二.编辑菜单资源 1.添加菜单 按"Ctrl+R",双击"Menu"图标 2.于菜单编辑器内编辑菜单 四.添加代码(红色部分) void CCM ...
- DirectUI界面编程(六)实现右键弹出菜单
本节向大家介绍一下右键弹出菜单是如何实现的.效果如下,在窗口中点击鼠标右键弹出菜单,点击菜单项能够响应菜单点击事件. 使用Duilib库实现的弹出菜单,实际上也是一个Windows窗口,因此我们需要创 ...
- Vue2的右键弹出菜单(vue-contextmenu)
给大家推荐一个基于Vue2的右键弹出菜单插件,支持单一SPA页面以及可以在循环绑定中使用. 项目地址为:https://github.com/chIIC/vue-...demo1: 父组件绑定右键事件 ...
- 关于MFC主菜单和右键弹出菜单
一.主菜单.弹出菜单和右键菜单的概念: 主菜单是窗口顶部的菜单,一个窗口或对话框只能有一个主菜单,但是主菜单可以被更改(SetMenu()更改): 创建方式:CMenu::CreateMenu(voi ...
- SWT中的Tree中 添加右键弹出菜单
先看一下效果: 如图:在树上单击鼠标右键会弹出 弹出式菜单.做法其实很简单,先做一个树: final TreeViewer treeViewer = new TreeViewer(group, SWT ...
- 微信小程序动画之弹出菜单
用微信小程序做了一个动画,效果如上图: 代码: js: Page({ data: { isPopping: false, animPlus: {}, animCollect: {}, animTran ...
- Win32建立右键弹出菜单(PopMenu)
自定义右键菜单: #ifndef _CONTEXTMENU_H_ #define _CONTEXTMENU_H_ #include <windows.h> //动态菜单 #define I ...
- win32 右键弹出菜单
#define CW_ABOUT 100 #define CW_DOCUMENT 200 POINT t; GetCursorPos(&t); HMENU hMenu,hPopupMen ...
- js+css实现带缓冲效果右键弹出菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- (转)HTML5实战与剖析之触摸事件(touchstart、touchmove和touchend)
HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享.今天为大家介绍的事件主 ...
- C#IEnumerator.MoveNext 方法 ()
将枚举数推进到集合的下一个元素. 命名空间: System.Collections程序集: mscorlib(mscorlib.dll 中) 语法: bool MoveNext() 返回值 Ty ...
- PC/UVa 题号: 110104/706 LC-Display (液晶显示屏)题解
#include <string> #include <iostream> #include <cstring> #include <algorithm> ...
- c#匿名类 anonymous学习
感谢http://blog.csdn.net/jjx0224/article/details/5887589 感谢http://hi.baidu.com/guodong828/blog/item/cc ...
- 使用C#开发纽曼USB来电小秘书客户端小结
在前面用C#开发完CRM的来电弹屏之后,有些客户有了新的要求,他们希望不但能够实现来电弹屏,更希望能够将呼入呼出的电话录音并上传到CRM服务器上,方便日后跟踪记录.于是便有了来电小秘书客户端的开发. ...
- apicloud+融云实现即时通讯
请尊重作者的辛勤劳动!!! 使用apicloud开发已经快2个月了,起初的目的就是为了实现安卓和苹果的兼容,属于一个试验项目,究竟apicloud是否能够满足公司的要求?最 终看来还是不错的,使用ap ...
- js获取网络图片的宽和高
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Linux用户及用户组设置
查看当前用户所属的组 groups 查看<user1>, <user2> 和 <user3>所属的组 groups <user1> <user2 ...
- iOS常用的存储方式介绍
在iOS App开发过程中经常需要操作一些需要持续性保留的数据,比如用户对于App的相关设置.需要在本地缓存的数据等等.本文针对OC中经常使用的一下存储方式做了个整理. 常用的存储工具/方式: NSU ...
- Mac OS 10.10 Yosemite正式版怎么升级 升级教程
苹果在2014年10月17号凌晨一点召开了新品发布会,推出了新的 iPad.iMac 产品,以及大家一直所期盼的 Mac OS 10.10 正式版系统.个人是从 Mac OS 10.10 的第一个测试 ...