一个完整托盘程序的实现

Qt系统托盘程序的实现 Qt程序创建系统托盘 阅读详情

先让托盘"托"出来吧,关键在于一个NOTIFYICONDATA结构体,我的做法是建立一个SDI或Dialog程序,以SDI为例:

A,在frame.h中声明一个全局的NOTIFYICONDATA  ntf;

B,在OnCreate中,实例化ntf的各个数据成员:  -------------------------------------------唉,优快云这个编辑器没做好:)ntf.cbSize=sizeof NOTIFYICONDATA;
 ntf.hWnd=this->m_hWnd;
 ntf.uID=IDR_MAINFRAME;
 ntf.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
 strcpy(ntf.szTip,"femalelover is a good man");
 ntf.uCallbackMessage=WM_MESSAGE;
 ntf.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;                                         OK,下面就是托盘产生了.   Shell_NotifyIcon(NIM_ADD,&ntf);

C,在托盘程序中,人们一般喜欢去PreCreateWindow中给窗口加上WS_EX_TOOLWINDOW属性来使窗口在任务栏不可见. 我发现,这大可不必,因为这样一来会改变窗口的样子,变得很难看. 这就是困扰我的一个地方.我的解决办法是不管它 ^_^.   因为人性化的操作应该是程序运行时,窗口显示在桌面上, 这时,任务栏上会有程序图标,(如果要使窗口显示在桌面上而任务栏中没有图标,则好像只能使用WS_EX_TOOLWINDOW属性). 当最小化时,则显示托盘. 达到目的的做法相当简单:在OnSize中用这一句:   if (SIZE_MINIMIZED==nType) ShowWindow(SW_HIDE); 就OK了.

D,上面,托盘的样子是出来了. 接下来就是给托盘添加左右键处理, 在B步就,ntf.uCallbackMessage=WM_MESSAGE;
这里的WM_MESSAGE是一个自定义消息,当鼠标移动到托盘上时,系统会自动发送这个消息,俺要做的就是在自定义处理函数时判断是左键还是右键按下了,以及鼠标事件发生时干点什么. 唉,有的菜鸟朋友可能不知道怎么定义消息,这里也说一下(我自己也是菜鸟嘛,呵):--------------------------------------------------------------------------------------------------------  先定义: #define WM_MESSAGE   (WM_USER+101)                                                                                                     -----   然后去.H中添加为成员函数:     afx_msg LRESULT  OnMsage(WPARAM wparam,LPARAM lparam);                 --------再到.CPP中添加消息映射:      ON_MESSAGE(WM_MESSAGE,OnMsage)       花架子就是这样,接下来真正定义啦,说起来麻烦,直接贴一段自产的代码算了:                                               

LRESULT  CMainFrame::OnMsage(WPARAM wparam,LPARAM lparam)
{

 switch(lparam)
 {
 case WM_LBUTTONDOWN:
  {
   if(wparam==IDR_MAINFRAME)
   {
    POINT pt;
    GetCursorPos(&pt);
    AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOWNORMAL);
    SetForegroundWindow();
    break;
   }
  
  }
 case WM_RBUTTONUP:
  {
   POINT point;
   HMENU hMenu, hSubMenu;
   GetCursorPos(&point); //鼠标位置
   hMenu = LoadMenu(NULL, MAKEINTRESOURCE(IDR_MENU1)); // 加载菜单
   hSubMenu = GetSubMenu(hMenu, 0);//得到子菜单(因为弹出式菜单是子菜单)
   SetMenuDefaultItem(hSubMenu, -1, FALSE);//设置缺省菜单项,-1为无缺省项
   SetForegroundWindow(); // 激活窗口并置前
  
   //显示快捷菜单,并跟踪其选项,返回值为菜单选项的id,必须设置 TPM_RETURNCMD
   CMainFrame::m_bAutoMenuEnable=FALSE;     //这句就是用来使用菜单项有效的.
  
   int n = TrackPopupMenu(hSubMenu, TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_LEFTALIGN|TPM_RETURNCMD, point.x, point.y, 0, m_hWnd, NULL);
  
   switch(n)            //上面返回的n值,当没有选中任何菜单项时,为0,否则,为被选中项的ID.
   {
   case IDM_EXIT:                                                 //只处理这一项啦,其他类似.
    SendMessage(WM_CLOSE,0,0);

   }
  }
 }
 return 0;
}

E,还应该在程序退出时删除图标,这就是我为什么要把前面的NOTIFYICONDATA设为全局的了.可在 ~Frame析构函数中使用这句:Shell_NotifyIcon(NIM_DELETE,&ntf);  则删除了图标.

就这样了,回过头来看,真是简单哪.可当初,因为ShowWindow(SW_SHOW)没有用SW_SHOWNORMAL,就让我晕了半天,左键点托盘,窗口不能浮上来.还以为哪里出了问题,粗心大意真是要不得呀. 呵呵.

Qt基础篇:Qt托盘QSystemTrayIcon的基础使用 1、点击“闪烁”按钮可以模拟消息闪动,点击后弹出消息详情对话框; 2、托盘右键菜单包括:“显示”和“关闭”。 3、双击托盘显示程序,关闭后隐藏到托盘。 阅读详情

相关推荐

打造WinForms托盘功能:教程与代码实现

NotifyIcon组件是.NET框架中System.Windows.Forms命名空间下的一个控件,它允许开发者在任务栏的通知区域(也称为系统托盘)中添加图标。这个功能对于那些需要在后台运行且不希望占据用户太多界面空间的应用程序特别有用。使用NotifyIcon,应用程序可以提供额外的用户交互方式,例如通过右键菜单来控制应用状态,或者显示通知。

weixin_35879493的博客 931

托盘程序

托盘程序的设计主要满足以下几个需求:               (1)程序启动时主窗口隐藏,只在托盘显示图标;               (2)主窗口隐藏时,在任务栏没有图标显示;               (3)在托盘图标点击右键弹出,菜单用来恢复、隐藏、退出程序。  实现托盘程序主要涉及一个shell函数Shell_NotifyIcon和一个用来描述托盘图标信息的结构体NOTIFYICO...

hitarcher的博客 1430

系统托盘程序(c++)

c++写的win32(MFCbased)系统托盘应用程序。systemtray_src封装了托盘类。systemtraySDK_demo,mfc演示程序。在vc6.0与vs2008下编译通过。

C# (江湖熟手)- 实现程序托盘

C# (江湖熟手)- 实现程序托盘

qq_25702235的博客 3554

教你怎么样把程序最小化到托盘

程序最小化到托盘显得你的程序更有水平,这里我们就用这个小软件来帮助你实现@

托盘程序示例

使用NotifyIcon控件,该控件的作用是程序运行时在Windows任务栏右侧的通知区域中(任务栏)显示图标。 使用contextMenuStrip控件,该控件可以关联到其它控件,作用是当右击关联的控件时显示菜单。 在NotifyIcon1的属性列表中的contextMenuStrip的下拉列表中选择你刚才创建的contextMenuStrip1菜单。你的托盘程序就拥有一个菜单了。 需要说明的是,我的Form1有一个Bool型私有变量CloseTag,另外我的程序有一个关闭按钮,该按钮才是真正的关闭程序。我的做法是当使用我的关闭按钮时将CloseTag设为True,否则CloseTag为false。这样就做到了完整的关闭重载。

【MFC】托盘程序开发示例(详细实现步骤)

概述: 什么是托盘应用程序?   当你打开后会在电脑最右下角的任务栏上生成一个系统托盘,当你点击最小化或者点击关闭按钮后,若想恢复窗口,可以左键双击或者单机这个系统图标,同时鼠标右键点击,又会有其他的菜单弹出,比如退出。像QQ等可以停靠在电脑桌面的右下方: 实现操作步骤 (1)首先新建一个MFC项目    (2)在CTrayIconDlg.cpp文件中的OnInitDialog...

渲染引擎开发 2308

一个c++做的托盘程序

一个c++的托盘程序,很经典的,经过调试运行成功的

VB托盘程序详解

为了学习方便,以下提供了源代码: '---------------------------------------------' 使用系统托盘程序演示'---------------------------------------------'程序说明:' 这是一个比较完整的使用系统托盘的程序实例,包括'了:添加托盘图标,删除托盘图标,动态改变托盘图标,'为托盘图标添加浮动提示信息,实现托盘图...

資料為我做事 440

托盘程序实现

编写Windows窗口程序最小化到托盘的技术细节, 以及相关的结构与消息等.

【东华大学oj】找到最大数(一维数组->中等)

一天,老师布置了一个作业,要求对一串数字各不相同的数字串进行排序,大的在前,小的在后。接着,我从数字串中的第二个数字开始往后找,找到最大的一个,然后与第二个数字交换,这样的话我就能够确定排序后数字串中的第二个数字;明明研究发现,他的这个想法中最重要的一环就是在一串数字中找到最大的那个,然后与第一个数字交换,可是明明毕竟刚刚开始学习程序设计不久,无法写出较复杂的程序,所以明明想让你这位程序设计专家帮他的忙,帮助他把这段核心程序写出来,然后明明只需模仿着写就可以了。时间限制: 1S类别: 一维数组->中等。

的博客 524

Qt窗口最小化到托盘,托盘菜单控制

作为Qt初学者,最近在编写窗口zui

shihoongbo的博客 4568

别再只设接触压力了!用ANSYS Workbench模拟O型圈密封泄漏的完整流程

本文详细介绍了在ANSYS Workbench中模拟O型圈密封泄漏的完整流程,重点解析了流体渗透压力载荷的设置与应用。通过双物理场耦合模型和精确的参数配置,帮助工程师准确评估密封性能,避免传统方法仅考虑接触压力的局限性。文章还提供了常见问题的解决方案和工程实践建议,提升密封设计的可靠性。

weixin_30372371的博客 399

VB.NET编程之托盘程序篇

由于本文中的托盘程序的图标并不是通过创建资源文件来实现的,而是通过创建Icon实例完成的。所以在程序运行的时候,必须在程序的当前目录存在一个图标文件,并且此图标文件的名称为"Tray.ico"。下面是这个静态托盘程序的完整的代码清单(Form2.vb):     Public Class Form1    Inherits System.Windows.Forms.Form   #Region "

jcc3120的专栏 943

基于FSL的DTI数据预处理流程

最近在学习处理DTI数据,总结了一份应用FSL做DTI数据预处理的流程与大家交流交流。如果有错误的地方欢迎大家指正!        我用的数据是Philips的数据,如果是GE或者西门子的数据可能会有所不同。   原始数据:包括3DT1数据和高分辨率DTI数据,均是dicom格式。 工具:MRICRON和FSL,所有的命令均在Linux的终端中运行。   1.格式转换:将后缀名为dcm

zaza_zaza的博客 2万+

WinForm制作文件传输助手,Tcp局域网传输文件,传输速度受限于宽带和硬盘速度上限

文件传输助手为什么会出现,是因为项目上有些特殊的地方限制太多了,连插硬盘都需要关软件,联网又要开很不方便,网络限制一般软件只能局域网通信,还要开特定的端口等,你才能在电脑上通信,这样和机房的服务器远程的时候文件就不好拿过去,又不可能每次都去开机房的门。现在这个功能比较简单,只能单文件发送,但是其实比U盘硬盘方便,一般的六类网线传输压缩包在50M/s以上,U盘硬盘复制就不行了,特别如果是像我们学校这种网络结构,一个学校都在一个局域网,那真的方便!普通的局域网用特定IP和端口,通信也是很方便的。

m0_69233031的博客 1671

VC中使程序最小化到系统托盘区

//定义托盘图标结构体 NOTIFYICONDATA nid; #define WM_ICONNOTIFY WM_USER + 909 //图标响应消息(lParam) #define ID_TASKBARICON 100 //参数(wParam) //初始化系统托盘图标 void OnBtnMinimize() { //初始化系统托盘图标 nid.cbSize = si

l1905的专栏 2288

基于表面肌电信号sEMG的手势识别——以Ninapro DB1数据集使用CNN网络识别为例

本文实验采用公共数据集Ninapro。该数据集数据量大,采集的动作丰富,每个单位数据集里面包括表面肌电信号、加速度计、手部运动学和动态数据等,记录了67名完整受试者和11名进行了至少50 次手部运动的截肢者的数据。NinaproDB1数据集包括27名完整的受试者(7 名女性和20名男性,其中2个左手和25 个右手) 的肌电信号。信号采集频率为100Hz。

树下一朵云的博客 2295

JAVA 编写托盘例子

效果如上图所示:本例子采用了JDIC(JDesktop Integration Components)组件,实现了JAVA托盘和消息提醒的功能。  例子源代码 以下是托盘类Tray.javaimport org.jdesktop.jdic.tray.*;import com.nci.ir.common.db.QuerierImpl;import com.nci.mi

1838

SAP PO开发-端到端配置

1.登录PO系统,选择system landscape,将外围系统的系统信息(Software Component以下简称SC)注册到PO系统中。2.点击products注册外围系统信息。3.选择New 新建 按钮:创建一个新的系统和版本。4.输入产品名称、供应商、版本号等信息。然后点击:Next。5.设置instance 名称,然后点击Next。6.最后设置软件组件的名称,然后点击Finish。

P9QCer的博客 1577

高阶玩法——Dify生成的数据自动写入mysql数据库

采用自定义工具方式,利用 python编写一个服务sql_save_post,将接收到的内容写入指定数据库的表中,并为该服务撰写一个 OpenAPI 的 schema。配置工作流:我们以写入天气预报为例,在生成天气预报内容后,连接自定义工具“sql_save_post”,将所需的字段配置完成后,实现将生成的内容自动写入mysql数据库中。编写OpenAPI的schema:在dify平台的工具栏目,创建自定义工具,输入工具名称“sql_save_post”。工具:sql_save_post;

qq_44493378的博客 8539

VB 系统托盘

VB 系统托盘 2011年04月19日   很多软件运行时会在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标,它作为程序运行的一个标志,我们可以通过使用小图标所弹出的菜单来控制应用程序的状态。本例就给出了一个功能比较完整的托盘程序,我们可以看到怎样用API函数Shell_NotifyIcon来添加、删除、更改托盘图标;而且例中还演示了为托盘图标添加右键菜单和浮动提示的方法。 ...

uslt43uslt 177

ARINC429协议分析

如下表所示,ARINC429在发送一帧过程中,首先发送以START开始,以END结束,共发送32bits数据,其中0~7bits为Lable数据,9~8bits为SDI数据,10~28bits为数据,29~30bits为SSM,31bit为校验位End30292827262524校验位SSM2322212019181716DATA15141312111098SDI7654321Start。

5222

Java JFrame设计及最小化到系统托盘的实现

  Java JFrame可以实现本地实例化窗口,通过向JFrame添加各种控件,实现各种相应的功能。  一、创建窗口实例  JFrame myFrame = new JFrame(); 二、设置JFrame的各种属性  myFrame.setLayout(new BorderLayout()); ---设置窗口中组件的排列方式  myFrame.setTitle("窗口标题"); --设置窗口的标题  myFrame.setLocation(x,y); --设置窗口的显示位置  myFrame.setSi

zmwg1的专栏 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: ATL初探(COM对象的创建过程)
下一篇: 冒泡与选择排序
biblereader
博客等级 码龄20年 11粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值