MFC:怎么将程序窗口最小化到系统托盘

本文详细介绍了使用MFC将应用程序窗口最小化至托盘区域,并通过特定消息响应实现窗口恢复的过程。包括自定义消息WM_SHOWTASK、消息映射、最小化到托盘的函数实现以及恢复界面的处理逻辑。

(一)原理

1、最小化的原理:首先要将窗口隐藏,然后在右下角绘制图标

2、恢复的原理:将窗口显示,再将托盘中的图片删除。

(二)程序实现

1、自定义消息WM_SHOWTASK:

#define WM_SHOWTASK (WM_USER +1)

2、在MFC的::OnSysCommand(UINT nID, LPARAM lParam)   函数体中增加一个命令响应

if(nID==SC_MINIMIZE)

ToTray();  //最小化到托盘的函数

3、在消息映射中添加

ON_MESSAGE(WM_SHOWTASK,OnShowTask);  //其中WM_SHOWTASK是消息名,

OnShowTask是自己定义的消息响应函数,后面有说明。

(三)具体函数内容

1、最小化到托盘函数

void CMyDlg::ToTray()

{

NOTIFYICONDATA nid;

nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);

nid.hWnd=this->m_hWnd;

nid.uID=IDR_MAINFRAME;

nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;

nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称

nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

strcpy(nid.szTip,”程序名称”);    //信息提示条

Shell_NotifyIcon(NIM_ADD,&nid);    //在托盘区添加图标

ShowWindow(SW_HIDE);    //隐藏主窗口

}

2、恢复界面函数

在头文件中定义消息响应函数

afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;

//wParam接收的是图标的ID,而lParam接收的是鼠标的行为

LRESULT CMyDlg::OnShowTask(WPARAM wParam,LPARAM lParam)

{

if(wParam!=IDR_MAINFRAME)

return 1;

switch(lParam)

{

case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”

{

LPPOINT lpoint=new tagPOINT;

::GetCursorPos(lpoint);//得到鼠标位置

CMenu menu;

menu.CreatePopupMenu();//声明一个弹出式菜单

menu.AppendMenu(MF_STRING,WM_DESTROY,”关闭”); //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。

menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); //确定弹出式菜单的位置

HMENU hmenu=menu.Detach();

menu.DestroyMenu(); //资源回收

delete lpoint;

}  break;

case WM_LBUTTONDBLCLK:   //双击左键的处理

{

this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿

DeleteTray();

}  break;

default:   break;

}

return 0;

}

3、删除托盘图标函数

void CMyDlg::DeleteTray()

{

NOTIFYICONDATA nid;

nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);

nid.hWnd=this->m_hWnd;

nid.uID=IDR_MAINFRAME;

nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;

nid.uCallbackMessage=WM_SHOWTASK;   //自定义的消息名称

nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

strcpy(nid.szTip,”程序名称”);    //信息提示条为“计划任务提醒”

Shell_NotifyIcon(NIM_DELETE,&nid);    //在托盘区删除图标

}

请关注  李木空间   www.limou.net   更多MFC知识。

转载于:https://www.cnblogs.com/naxiesuowei/archive/2011/12/13/2285746.html

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值