当前位置: 首页 > 编程日记 > 正文

基于Dialog的MFC程序在启动时隐藏为托盘程序(四)

这部分说一下如何加menu。。如果做小气球。。

mfc的menu确是不如C#活着java那么easy..

首先在rc里添加menu资源。。然后在ui界面里先设置一下你的菜单。。

在第(二)部分已经简单知道了怎么取得tray的鼠标左右点击事件。。下面我们就把左右点击事件分开。。

ContractedBlock.gifExpandedBlockStart.gifCode
 1LRESULT CDesktopDlg::OnNotifyIcon(WPARAM wParam,LPARAM lParam)
 2ExpandedBlockStart.gifContractedBlock.gif{
 3    switch (lParam)
 4ExpandedSubBlockStart.gifContractedSubBlock.gif    {
 5    case WM_LBUTTONDOWN:
 6                // 切换dialog状态。。
 7        if (dialogStatus)
 8ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 9            dialogToTray();
10        }

11        else
12ExpandedSubBlockStart.gifContractedSubBlock.gif        {
13            trayToDialog();
14        }

15        break;
16
17    case WM_RBUTTONDOWN:
18                // 添加menu
19        CMenu pMenu;        
20
21        if (pMenu.LoadMenu(IDR_MENU1)) // IDR_MENU1就是我们添加的menu的id
22ExpandedSubBlockStart.gifContractedSubBlock.gif        {
23            CMenu* pPopupMenu = pMenu.GetSubMenu(0);
24            ASSERT(pPopupMenu != NULL); 
25            CPoint point; 
26            GetCursorPos(&point);
27            SetForegroundWindow();
28
29            pPopupMenu->TrackPopupMenu(
30                TPM_LEFTALIGN | TPM_RIGHTBUTTON,
31                point.x, point.y, this);
32        }

33        break;
34    }

35
36    return 0;
37}

ok,测试一下发现菜单运行良好。。不过这里还有个问题我有点疑问。。不知道是不是只有我的电脑有这个问题。。我在点右键的时候有一定概率把任务栏的那个菜单点出来。。不知道问什么。。

我们继续。

菜单是出来了。。下面开始添加事件。。

// .h
1afx_msg BOOL OnCommand(WPARAM wParam, LPARAM lParam);

// .cpp
ContractedBlock.gifExpandedBlockStart.gifCode
BOOL CDesktopDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
    
switch (wParam)
    {
        
// 这几个id是在rc里面定义的。。
    case ID_TRAYMENU_32771:
        trayToDialog();
        
break;
    
case ID_TRAYMENU_32772:
        dialogToTray();
        
break;
    
case ID_TRAYMENU_32773:
        OnExit();
        
break;
    
case ID_TRAYMENU_32774:
        showAboutDlg();
        
break;
        
// 添加这个command之后。。原来的button事件不管用了。。
        
// 经测试在这里好用。。原因不明。。
    case IDOK:
        OnBnClickedOk();
        
break;
    
case IDCANCEL:
        OnBnClickedCancel();
        
break;
    }

    
return true;
}

ok..现在再运行一下。。可以菜单就可以用了。。

下面来添加一下小气球的提示。。其实很简单。。写一个方法:
ContractedBlock.gifExpandedBlockStart.gifCode
 1BOOL CDesktopDlg::ShowBalloonTip(LPCTSTR szMsg,LPCTSTR szTitle, UINT uTimeout, DWORD dwInfoFlags)
 2ExpandedBlockStart.gifContractedBlock.gif{
 3
 4    m_notifyIcon.cbSize=sizeof(NOTIFYICONDATA);
 5    m_notifyIcon.uFlags = NIF_INFO;
 6    m_notifyIcon.uTimeout = uTimeout;
 7    m_notifyIcon.dwInfoFlags = dwInfoFlags;
 8    strcpy(m_notifyIcon.szInfo,szMsg ? szMsg : _T(""));
 9    strcpy(m_notifyIcon.szInfoTitle,szTitle ? szTitle : _T(""));
10
11    return Shell_NotifyIcon(NIM_MODIFY, &m_notifyIcon);
12}
  

然后在init的时候或者任何你需要的时候调用就可以了。。但是气球还是不要用太多为好。。或者像msn似的。。添加一下鼠标点击事件。。然后下回就再也不自动提示了。。当然这个可能就要借助注册表了。。

这四部份实际上是为了完成一个叫做女巫店 - 每周运程的一个小东东。。也是我第一次做mfc程序。。感觉还挺简单的。。程序分享出来吧。。就是通过网络连接nownow的女巫店。。然后读取rss文件(nownow..我要向你抗议。。你现在的文件格式我很难解析。。)。。然后到本地显示。。方便查询。。

ps.附上这个小东西。。顺便支持一下nownow。。你弄得这玩意太准了。。够意思的话一定要教教我。。嘿嘿。。

女巫店-桌面版

ok,关于托盘程序的mfc就此告一段落。。尽管写的很颓。。就这样吧。。:)





转载于:https://www.cnblogs.com/hudo/archive/2009/08/19/1549973.html

相关文章:

【通俗理解线性代数】 -- 理解二次型

本微信图文介绍了二次型的几何意义以及正定在函数极值中的应用。

《Clojure数据分析秘笈》——1.6节从JDBC数据库读取数据

本节书摘来自华章社区《Clojure数据分析秘笈》一书中的第1章,第1.6节从JDBC数据库读取数据,作者(美)Eric Rochester,更多章节内容可以访问云栖社区“华章社区”公众号查看 1.6 从JDBC数据库读取数据从关系型数据库中读…

java timer cron_Java之旅--定时任务(Timer、Quartz、Spring、LinuxCron)

在Java中,实现定时任务有多种方式。本文介绍4种。Timer和TimerTask、Spring、QuartZ、Linux Cron。以上4种实现定时任务的方式。Timer是最简单的。不须要不论什么框架,只JDK就能够。缺点是不过个时间间隔的定时器,调度简单。Spring和QuartZ都…

诗歌rails之如何写一个简单的Rails Plugin

生成plugin骨架代码: Ruby代码 ruby script\generate plugin MyPlugin ruby script\generate plugin MyPlugin 功能需求: 在BlogController中把所有符合条件的Post(Model)生成为xml 如果不使用插件,很easy : in BlogController Ruby代码 def export_to_xml posts Post.fin…

【通俗理解线性代数】 -- 施密特正交化与QR分解

我们介绍线性代数知识的时候,稍微扩展一点,就能演变成一个新的角度。

iOS实现tableViewCell或collectionCell中点击界面按钮跳转

//找到父类界面 - (UIViewController *)viewController { for (UIView* next [self superview]; next; next next.superview) { UIResponder *nextResponder [next nextResponder]; if ([nextResponder isKindOfClass:[UIViewController class]]) { return (UIViewControlle…

java web 怎么用solr_使用web过滤器增加solr后台登录验证

solr后台自带是没有登录功能的,默认访问地址是:http://localhost:8983/solr/#/(内置jetty运行)。要给sorl后台增加登录验证方法:1、使用web服务器的登录验证(例如jetty、tomcat)这种方式好处是不需要另外写代码,只需配置一下对应的…

《程序设计解题策略》——1.6 利用左偏树实现优先队列的合并

本节书摘来自华章计算机《程序设计解题策略》一书中的第1章,第1.6节,作者:吴永辉 王建德 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.6 利用左偏树实现优先队列的合并 优先队列在程序设计竞赛中十分常见,在统计问题、最值问…

Jquery JQZoom Plugin 放大鏡效果 Two

Jquery JQZoom Plugin 放大鏡效果 TwoJquery1.3.2Lib下載地址:http://files.cnblogs.com/davidzhou/jquery-1.3.2.rar插件下載地址:http://files.cnblogs.com/davidzhou/jqzoom_v2.2.rarDemo下載地址:http://files.cnblogs.com/davidzhou/MagnifySol.rar…

如何建立和维护自己的“人脉”

小故事1: 她打开房门,发现自家的门口竟然多了一条死鱼,她感到十分晦气,于是马上扔到垃圾桶了,过了一会儿,又有一条死鱼躺在自家门口,她还是扔了。为了抓住那个做恶作剧的人,她选择待…

java字符串统计英文字符用什么不同_JAVA程序。输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。...

展开全部一、问题分析:输入32313133353236313431303231363533e58685e5aeb931333363373764一行字母,那么会以换行结束。所以可以存入数组,也可以逐个输入,遇到换行结束。要统计各个类的个数,就要逐个判断是哪个分类的。…

COMVariantType的Date类型

刚跟一个同事讨论通过CCADOConnection读取外部数据库数据的问题,如果读取的数据是DateTime类型,只能得到Date部分,Time部分被忽略了。查看类CCADOField的value方法找到问题所在,下面是MSDN上关于COMVariant的Date方法的Remark&…

《树莓派Python编程指南》——2.2 一个Python游戏:猫和老鼠

本节书摘来自华章计算机《树莓派Python编程指南》一书中的第2章,第2.2节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区“华章计算机”公众号查看。 2.2 一个Python游戏:猫和老鼠 现在&#xff…

【通俗理解线性代数】 -- 理解行列式

本微信图文主要从几何与变换的角度介绍了行列式的意义。

solr java score_Solr 按照得分score跟指定字段相乘排序

CentOS6.5 mysql 5.5安装CentOS 6 mysql5.5安装配置 1 安装所需软件 2 安装cmake 3 tar.gz形式安装mysql 4 配置与启动 MySQL自5.5版本以后,就开始使用cmake编译工具了.tar ...access数据库select查询top时无效的解决办法access数据库select查询top时有时…

Mantis 缺陷管理系统配置与安装

搭建Mantis 缺陷管理系统 By Snooper 错误必有!欢迎指正! 什么是Mantis MantisBT is a free popular web-based bugtracking system (feature list). It is written in the PHP scripting language and works with MySQL, MS SQL, and PostgreSQL datab…

【Matlab数据的可视化】自适应绘图函数fplot

今天看到fplot这个函数,于是乎赶快整理出来放到“Matlab数据的可视化”这个板块中,以便更好的完善我们的知识结构。

大数据时代涉军网络舆情引导的“5个结合”

随着信息技术发展,大数据构成了一种新的传播技术环境,重塑了网络舆情生态,给社会舆情体系带来了重大而深刻的变化,使网络舆情在整个社会舆情体系中地位更加凸显、作用更加突出。必须从维护国家政治安全的高度,深入探索…

java http head 请求_http请求头header、请求体body、请求行介绍

HttpServletRequest对象代表客户端的请求,当客户端通过http协议请求访问服务器的时候,http请求头的所有信息都封装在这个对象中,通过这个对象,可以获取客户端请求的所有信息。http请求包含请求行/状态行、请求头、请求体。request如果是post才有请求体&a…

全球UML模型共享设计下载中心--www.euml.org上线

全球UML模型共享设计&下载中心euml.org上线euml.org是楚凡科技版权所有的公益站点,为全球UML用户和爱好者提供如下服务:1、在线UML建模工具Trufun eUML。Trufun eUML以Applet形式运行在客户的浏览器中,从而提供在线建模功能。2、模型共享…

你是否对它有一种责任感

它,指开发人员对开发出的产品;它是测试人员所面对的测试产品。你是否对它有一种责任感,是指开发人员是否对它开发出来的产品有责任感,为它骄傲,为它而开心;你是否对它有一种责任感,是指测试人员…

【机器学习】基于粒子群算法的非线性函数寻优

本微信图文介绍了基于粒子群算法的非线性函数寻优过程,并利用Matlab实现。

java递归排雷_C语言实现扫雷小游戏

源代码链接:https://github.com/Sasura321/Minesweeper扫雷游戏也算是一个简单的小项目,这儿是之前写的代码,来写成博文回顾一下。首先,代码要实现几个功能:第一下扫雷时,即使踩中了雷也不能直接炸死;扫雷时&#xff0…

任意角度旋转图片

/// <summary> /// 任意角度旋转 /// </summary> /// <param name"bmp">原始图Bitmap</param> /// <param name"angle">旋转角度</param> /// <param name"bkColor"…

如何切分用户故事

在把用户故事切分成小块&#xff0c;从而更好地利用敏捷技术时&#xff0c;很多新组建的敏捷团队都会遇到困难。 敏捷社区的成员在多篇文章中为如何有效地切分用户故事提供了指导。  当把庞大的用户故事切分成小块时&#xff0c;是否有一些一般的准则供我们遵循呢? Rachel D…

【机器学习】基于人工鱼群算法的非线性函数寻优

本微信图文介绍了人工鱼群算法的基本原理并对一元非线性函数进行极值寻优。

java9可执行jar_单个java文件打成可执行jar包

1 概述使用JDK自带的jar与java将单个java文件打成可执行jar包并运行。 当然也可以使用IDE完成&#xff0c;使用Maven只需要一个简单的package&#xff0c;但是单个文件嘛&#xff0c;没必要这么“凶狠”。2 新建测试文件著名的Hello World&#xff1a;public class Main{public…

简评游戏人工智能相关的中文书(下)

赖勇浩&#xff08;http://laiyonghao.com&#xff09; 游戏开发中的人工智能 2006 年 9 月第一版 AI for Game Develpoers 应该算得上一本质量在中等偏上的书&#xff0c;可惜的是即使中文版是由 O’Reilly Taiwan 公司编译&#xff0c;中文版的质量依然差强人意。小的翻译错误…

化敌为友 运营商组团拥抱OTT为哪般

2月15日&#xff0c;全球9大电信运营商宣布&#xff0c;成立“合作运营联盟”&#xff08;Partnering Operator Alliance&#xff09;&#xff0c;协力挖掘互联网企业为电信业带来的增长潜力。从几年前的抵御OTT进攻到如今的“合作运营”&#xff0c;这个180度的态度转变后面有…

【机器学习】基于自适应变异粒子群算法的非线性函数寻优

本微信图文详细介绍了自适应变异粒子群算法的基本原理以及在非线性函数寻优中的应用。 —————————–华丽分割线—————————— 我们免费提供本文介绍方法的源码&#xff0c;你可以私信我们领取&#xff0c;如果你在领取源码后觉得有帮助&#xff0c;希望能够转…