托盘程序开发

托盘程序

OninitDialog()

在主界面的OninitDialog()函数里添加代码


BOOL CMFC07trayiconDlg::OnInitDialog()
{

    // TODO: 在此添加额外的初始化代码
    NOTIFYICONDATA m_tnid;

    m_tnid.cbSize = sizeof(NOTIFYICONDATA);//设置结构大小//
    m_tnid.hWnd = this->m_hWnd;//设置图标对应的窗口
    m_tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;//图标属性
    m_tnid.uCallbackMessage = WM_ICON_NOTIFY;//应用程序定义的回调消息ID

    CString szToolTip;
    szToolTip = _T("INeed 客户端程序");
    _tcscpy_s(m_tnid.szTip, szToolTip);//帮助信息
    m_tnid.uID = IDR_MAINFRAME;//应用程序图标
    m_tnid.hIcon = m_hIcon;//图标句柄
    PNOTIFYICONDATA m_ptnid = &m_tnid;
    ::Shell_NotifyIcon(NIM_ADD, m_ptnid);//增加图标到系统盘

}

定义一个自定义的消息。代码放在主界面【.CPP】文件顶部。

#define     WM_ICON_NOTIFY  WM_USER+100

关闭程序后自动关闭托盘

在主界面对话框中的【属性】-【消息】选项卡里的【WM_CLOSE】添加一OnClose()函数,在程序关闭后,关闭托盘。


void CMFC07trayiconDlg::OnClose()
{

    // TODO: Add your message handler code here and/or call default

    NOTIFYICONDATA   nd = { 0 };
    nd.cbSize = sizeof(NOTIFYICONDATA);
    nd.hWnd = m_hWnd;
    nd.uID = IDR_MAINFRAME;
    nd.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    nd.uCallbackMessage = WM_ICON_NOTIFY;
    nd.hIcon = m_hIcon;
    Shell_NotifyIcon(NIM_DELETE, &nd);

    CDialogEx::OnClose();
}

托盘最小化支持

在【属性】-【Minimize Box】设置为【True】。设置为支持最小化按钮。

在OnSyscommand()函数里,在最后的位置加入

    if(nID == SC_MINIMIZE)
    {
        ShowWindow(FALSE); //隐藏窗口
    }

OnSysCommand()代码。

void CMFC07trayiconDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialogEx::OnSysCommand(nID, lParam);
    }
    if (nID == SC_MINIMIZE)
    {
        ShowWindow(FALSE); //隐藏窗口
    }
}

定义消息,托盘菜单实现

在MFC主界面的CPP文件代码里找到【BEGIN_MESSAGE_MAP(CMFC07trayiconDlg, CDialogEx)】这个宏,往里面添加【ON_MESSAGE(WM_ICON_NOTIFY, OnTrayNotification)】,实现之前自定义消息的宏。

BEGIN_MESSAGE_MAP(CMFC07trayiconDlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_WM_CLOSE()
    ON_MESSAGE(WM_ICON_NOTIFY, OnTrayNotification)  // 添加的代码
END_MESSAGE_MAP()

在主界面的【.h】文件里声明函数OnTrayNotification()

LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam);

定义代码:

响应鼠标的左键和右键消息。

LRESULT CMFC07trayiconDlg::OnTrayNotification(WPARAM wParam, LPARAM lParam)
{
    switch (lParam)
    {
    case WM_LBUTTONDOWN:
    {
        AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOWNORMAL);
        SetForegroundWindow();
        break;
    }
    case WM_RBUTTONUP:
    {
        POINT point;
        HMENU hMenu, hSubMenu;
        GetCursorPos(&point); //鼠标位置
        hMenu = LoadMenu(NULL,
            MAKEINTRESOURCE(IDR_MENU_TRAY)); // 加载菜单
        hSubMenu = GetSubMenu(hMenu, 0);//得到子菜单(因为弹出式菜单是子菜单)
        SetForegroundWindow(); // 激活窗口并置前

        TrackPopupMenu(hSubMenu, 0,
            point.x, point.y, 0, m_hWnd, NULL);

    }
    }
    return LRESULT();
}

IDR_MENU_TRAY是加载了一个菜单,所以要自己自定义【恢复 ID_TRAY_RESTORE】、【退出 ID_TRAY_EXIT】

【恢复 ID_TRAY_RESTORE】,OnTrayRestore()

void CmyfirstmfcDlg::OnTrayRestore()
{
    AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOWNORMAL);
    SetForegroundWindow();
}

【退出 ID_TRAY_EXIT】,OnTrayExit()


void CMFC07trayiconDlg::OnTrayExit()
{
    // TODO: 在此添加命令处理程序代码
    OnClose();
}

原文地址:https://www.cnblogs.com/17bdw/p/10354679.html

时间: 2024-08-30 10:08:05

托盘程序开发的相关文章

玩转VC++系统托盘程序(WIN8)

 WINDOWS系统托盘是一个特殊区域,通常在桌面的右下角,也就是任务栏的右边.系统常驻在托盘的程序有时钟,音量控制,输入法,网络状态等.第三方应用如QQ程序也是一个典型的托盘程序,当最小化时企鹅会乖乖的待在屏幕右下角等待主人的呼唤. 系统托盘的方便之处在于,程序在暂时不用时,将它放到托盘里,随用随叫,不必将其关闭.而QQ在接收到消息后,也会在托盘中闪动提示,十分人性化. 那么如何用VC++来开发托盘程序呢?下面会用一个例子来玩转WINDOWS托盘程序. 首先,定义一下需要的功能.(需求确定

Java微信小程序开发_00_资源帖

1.微信小程序开发:http://blog.csdn.net/column/details/13721.html?&page=1 2.微信小程序栏目:http://blog.csdn.net/column/details/14653.html?&page=2 3.

微信小程序开发视频教程

课程:拜师学艺,微信小程序从入门到大神必经之路(第一季,共四季) 课程观看地址:http://www.xuetuwuyou.com/course/172/lesson/list 课程出自学途无忧网:http://www.xuetuwuyou.com 讲师:风舞烟 课时列表: 第一部_诞生 - 天降大任:名门贵族,互联网开发新宠--小程序横空出世 第1章 : 忽如一夜春风来--小程序的前世今生 课时1:课程开场 课时2:本章目标及任务 课时3:第一回合_小王子出世-微信小程序_小程序为什么这么火

Office 365 - SharePoint 2013 Online之应用程序开发工具

1.新建一个网站集,模板选择开发人员模板,如下图: 2.确定以后,需要稍等一会儿; 3.点击网站内容,添加app,如下图: 4.进入SharePoint Store,选择Napa,如下图: 5.选择ADD IT,如下图: 6.可能需要登录,如果没有微软账号,可以注册一个,如下图: 7.点击继续,如下图: 8.Return to site,如下图: 9.点击信任他,如下图: 10.稍等片刻,就添加成功了,如下图: 11.点击进入Napa,可以在这里创建app,如下图: 总 结 试用了一下Napa,

微信小程序开发心得

微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司认证信息如,营业执照等 再次就是用一个未曾开通过公众号的QQ号或微信号来注册一个微信小程序号. 最后,下载微信小程序开发工具. 由于这里,我们更多的关注如何去开发一些app,而不是科谱微信小程序,故在此不在过多的解释,详细的说明,可以去官网帮助文档. 首先,我们拿自己的项目在一步一步的说明并开发吧,

微信小程序开发 --02

微信小程序在开发中,难度系数不是很大,其中应用的技术也是web开发中常用的技术,虽然在微信开发者工具中的叫法与常见的web开发的叫法不太一样. 首先,在微信小程序开发中,代码文件格式大体有以下四中: .wxml .wxss .js .json 首先,wxml后缀的文件类似于html和xml的结合,例如在html中常用的div在微信小程序开发中被替换成了view,而在html中输出文本用的p标签被替换成了text标签,引入图像由html中的img 标签变成了image标签,等等.如果你之前开发的w

微信小程序开发之数据存储 参数传递 数据缓存

微信小程序开发内测一个月.数据传递的方式很少.经常遇到页面销毁后回传参数的问题,小程序中并没有类似Android的startActivityForResult的方法,也没有类似广播这样的通讯方式,更没有类似eventbus的轮子可用. 现在已知传递参数的方法只找到三种,先总结下.由于正处于内测阶段,文档也不是很稳定,经常修改,目前尚没有人造轮子. 先上GIF: 1.APP.js 我把常用且不会更改的参数放在APP.js的data里面了.在各个page中都可以拿到var app = getApp(

微信小程序开发(3) 热门电影

在这篇微信小程序开发教程中,我们将介绍如何使用微信小程序开发热门电影及预览功能. 本文主要分为两个部分,小程序主体部分及计算器业务页面部分 一.小程序主体部分 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 1. 小程序逻辑 App({ onLaunch: function() { // Do something initial when launch. }, onShow: function() { // Do something when show. }, onHide: f

[转]灯灯小程序开发手记:仿今日头条(上)

本文转自:http://www.jianshu.com/p/a1e0b8abb12d 写在前面 新的一年,祝大家新年快乐!当然对于程序员来说,新的一年,也要有新的改变.因此灯灯决定凑热闹编写微信小程序啦! 上一篇文章<记一次小程序开发过程>中,灯灯大致写了下自己第一次开发小程序的感受和流程.这一次灯灯会详细记录下自己制作一个小程序的思路.遇到的问题.涉及到的代码等和大家分享.    视频教程地址:http://study.163.com/course/introduction.htm?cour