问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样在任务栏显示图标

发布网友 发布时间:2022-04-23 09:45

我来回答

2个回答

热心网友 时间:2023-09-08 19:43

---- Windows95/WindowNT 任 务 栏 的 右 边 是 一 状 态 区,
Windows95/WindowsNT 在 其 上 显 示 时 间 和 一 些 小 图 标, 这 些 图
标 代 表 着 特 定 的 功 能 或 程 序, 用 鼠 标 单 击、 右 击 或 双 击
这 些 图 标, 就 会 弹 出 功 能 菜 单 或 程 序 窗 口 等。 如 你 用 过
金 山 词 霸 或 超 级 解 霸, 你 会 觉 得 这 些 图 标 使 软 件 用 起 来
很 方 便。 你 也 许 想 把 自 己 的 程 序 图 标 也 放 在 任 务 栏 的 状
态 区 上, 很 简 单,Visual C++ 5.0 提 供 了 一 个 函 数, 让 你 很 容
易 地 实 现 该 功 能。

---- Visual C++ 提 供 的 函 数 是Shell_NotifyIcon(), 该 函 数 发 送 消
息 给 系 统 在 任 务 栏 的 状 态 区 增 加、 删 除 或 修 改 图 标。
Shell_NotifyIcon() 有 两 个 参 数:

---- 1 . DWORD dwMessage

---- 消 息 标 志 值, 为 以 下 三 个 中 之 一:

NIM_ADD 在任务栏状态区增加图标
NIM_DELETE从任务栏状态区删除图标
NIM_MODITY修改任务栏状态区的图标

---- 2 . PNOTIFYICONDATA pnid

---- 指 向NOTIFYICONDATA 结 构 的 指 针。NOTIFYICONDATA 结 构 如 下:

typedef struct _NOTIFYICONDATA { // nid
DWORD cbSize; // NOTIFYICONDATA结构的大小
HWND hWnd; //接收回调消息的窗口句柄
UINT uID; //自定义的图标标志值
UINT uFlags; //标志后面的三个数据成员哪个有效,
//可由NIF_ICON,NIF_MESSAGE和NIF_TIP组合。
UINT uCallbackMessage; //回调消息
HICON hIcon; //图标句柄
char szTip[64]; //提示字符。当把鼠标移到任务栏
//状态区该图标上时,系统显示该字符
} NOTIFYICONDATA, *PNOTIFYICONDATA;

---- 以 下 举 例 如 何 在 任 务 栏 状 态 区 实 现 程 序 图 标 及 其 功 能。

---- 1. 首 先 生 成 一 个 单 文 档 的 工 程 文 件。

---- 2. 在StdAfx.h 添 加 自 定 义 的 消 息:

//回调消息
#define MYWM_NOTIFYICON WM_USER+1
//在任务栏状态区显示图标的消息
#define MYWM_SHOWAPPICONIC WM_USER+2

---- 3. 在MainFrm.h 里 添 加 定 义 消 息 处 理 函 数 说 明, 该 部 分 看 起 来 如 下:

protected:
//{{AFX_MSG(CMainFrame)<br/>afx_msg void OnSysCommand( UINT nID, LPARAM lParam ); <br/>// 手 工 加<br/>afx_msg void OnMyIconNotify( WPARAM wParam, LPARAM lParam ); <br/>// 手 工 加<br/>afx_msg void OnShowAppIconic( WPARAM wParam, LPARAM lParam ); <br/>// 手 工 加<br/>afx_msg void OnClose(); <br/>// 系 统 生 成<br/>//}}AFX_MSG

DECLARE_MESSAGE_MAP()

---- 另 外, 需 在MainFrm.h 定 义 一 开 关 值, 记 录 程 序 窗 口 是 打
开 或 关 闭 状 态:

BOOL boolWndHadShow;

---- 4. 在MainFrm.cpp 里 实 现 消 息 映 射 和 消 息 处 理 函 数。 消 息
映 射 部 分 看 起 来 如 下:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)<br/>ON_MESSAGE(MYWM_NOTIFYICON, OnMyIconNotify)<br/>ON_MESSAGE(MYWM_SHOWAPPICONIC, OnShowAppIconic)<br/>ON_WM_SYSCOMMAND()<br/>ON_WM_CLOSE()<br/>//}}AFX_MSG_MAP
END_MESSAGE_MAP()

---- 消 息 处 理 及 相 关 函 数 如 下 所 示:

//在任务栏状态区添加图标
BOOL MyTaskBarAddIcon(HWND hwnd,
UINT uID, HICON hicon, LPSTR lpszTip)
{
BOOL res;
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = hwnd;
tnid.uID = uID;
tnid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
tnid.uCallbackMessage = MYWM_NOTIFYICON;
tnid.hIcon = hicon;
if (lpszTip)
lstrcpyn(tnid.szTip, lpszTip, sizeof(tnid.szTip));
else
tnid.szTip[0] = '\0';
res = Shell_NotifyIcon(NIM_ADD, &tnid);
if (hicon)
DestroyIcon(hicon);
return res;
}

//从任务栏状态区删除图标
BOOL MyTaskBarDeleteIcon(HWND hwnd, UINT uID)
{
BOOL res;
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = hwnd;
tnid.uID = uID;
res = Shell_NotifyIcon(NIM_DELETE, &tnid);
return res;
}

//处理图标回调消息MYWM_NOTIFYICON
void CMainFrame::OnMyIconNotify
( WPARAM wParam, LPARAM lParam )
{
UINT nID;
UINT uMouseMsg;
nID = (UINT)wParam;
uMouseMsg = (UINT) lParam;
if (uMouseMsg == WM_LBUTTONDOWN) //点击图标
{
if ( boolWndHadShow ) //如果窗口已打开,隐藏窗口
ShowWindow( SW_HIDE );
else //否则,显示窗口
ShowWindow( SW_SHOWNORMAL );
boolWndHadShow = ~boolWndHadShow;
}
}

//消息MYWM_SHOWAPPICONIC
处理函数,在任务栏显示图标并隐藏窗口
void CMainFrame::OnShowAppIconic
( WPARAM wParam, LPARAM lParam )
{
HICON theIcon = LoadIcon(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDR_MAINFRAME) );
MyTaskBarAddIcon(GetSafeHwnd(), 100, theIcon, _T("示范程序"));
ShowWindow( SW_HIDE );
boolWndHadShow = FALSE;
}

---- 当 程 序 关 闭 时, 需 把 图 标 从 任 务 样 状 态 区 删 除, 你 可
以 添 加 一 个 处 理WM_CLOSE 消 息 的 函 数 来 删 除 图 标。 通 过
ClassWizard 来 添 加 处 理WM_CLOSE 的 函 数OnClose(), 该 函 数 如 下:

void CMainFrame::OnClose()
{
// TODO: Add your message handler
code here and/or call default
MyTaskBarDeleteIcon( GetSafeHwnd(), 100 );
CFrameWnd::OnClose();
}

---- 当 用 户 把 窗 口 最 小 化 时, 你 应 隐 藏 整 个 窗 口, 所 以 要
处 理ON_SYSCOMMAND 消 息。 首 先 在MainFrm.h 添 加 函 数 说 明, 如 第3
步 所 示; 然 后 在MainFrm.cpp 里 说 明 消 息 映 射 和 实 现 函 数。 消
息 映 射 如 前 面 所 示, 函 数 实 现 如 下:

void CMainFrame::OnSysCommand
( UINT nID, LPARAM lParam )
{
if ( nID==SC_MINIMIZE )
{
ShowWindow( SW_HIDE );
boolWndHadShow = FALSE;
}
else
CWnd::OnSysCommand( nID, lParam );
}

---- 5. 在InitInstance() 函 数 返 回 前, 添 加 一 语 句

m_pMainWnd- >PostMessage( MYWM_SHOWAPPICONIC );

---- 它 是 发 送 一 个 自 定 义 的 消 息MYWM_SHOWAPPICONIC 使 程 序 启
动 后 隐 藏 程 序 窗 口 并 在 任 务 栏 状 态 区 显 示 小 图 标。

---- 6. 现 在, 你 可 编 译 和 运 行 该 程 序 了。 程 序 运 行 后, 点
击 任 务 栏 状 态 区 该 程 序 的 图 标, 系 统 会 弹 出 程 序 窗 口,
再 点 击 一 下, 又 隐 藏 了。 怎 么 样, 象 不 象 金 山 词 霸 ?

热心网友 时间:2023-09-08 19:43

请看图: 图中最后一个选项.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
万能粉碎机清洁规程 中药粉碎机如何清洗比较好 磨粉机能用水洗吗 正确的家用粉碎机清洗方法 粉碎机清洗不干净粉碎机怎么清洗才干净 励志语句长句精选123句 caxa如何保存图幅模板 美迪特MDT-IN158重要参数 打玻尿酸已一个月眼睛疼,会不会打玻尿酸一个月,突然眼睛疼会不会... 玻尿酸失明概率真的小吗-玻尿酸失明有光感还能恢复吗 陈华军人物简介 华熙生物科技(天津)有限公司怎么样? 有一款卫生纸,边上印的有花知花语的字是什么牌子 白酒的批发价和零售价一般相差多少呢? 华熙生物帮人OEM吗 电脑状态栏显示异常? 谁知道这首诗?? 建议零售价598元的白酒实际价格多少 手机屏裂了两道小口,不是很大怎么办 九州通医药集团股份有限公司员工收入怎样呀? 急..... 雾鸟花知后面是什么字? 秘乐魔方里我的私藏视频怎么删除? 消瘦损,凭谁问?只花知,泪空垂。旧日堂前燕,和烟雨,又双飞。人自老,春长好,梦佳期。 为什么秘乐短视频每次都有版本更新,怎样把版本更新删掉? 华熙生物这家企业怎么样? 回头一笑花间去。只恐被花知。是什么意思? 秘乐视频审核不过关怎么删除? 华熙生物怎么样? 秘乐豆点赞视频怎么删掉? 心有木兮木有枝,心悦花兮愿花知 是什么意思 湖南华熙生物科技有限公司怎么样 怎么从建议零售价中分辨出白酒多少钱? 秘乐视频桌面上有个&#x2757;怎么消除? 花知述和花莳园艺哪家好 怎么把电脑里的调打字的字幅栏显示栏调出来? 建议零售价跟统一零售价有什么区别? 秘乐短视频秘藏怎么取消? 怎么退出支付宝体育服务花知先享赛呢? 知花知果里的东西是正品吗? 华熙生物这家公司怎么样?华熙生物股吧今天怎么了?华熙生物2021年分红情况? 怎么让任务栏显示出来? 白酒的批发价和零售价一般相差多少呢 鲜花知茶注册过商标吗?还有哪些分类可以注册? 华熙生物怎么样的企业?华熙生物股吧688363?华熙生物2021分红发放日? 电脑下方显示栏怎么调整成原来的样子 怎么清空秘乐视频任爷奖励? 都知道华熙生物是华熙集团董事长赵燕创立的,这家公司怎么样? 花知岚(深圳)餐饮管理有限公司怎么样? 唐代三李分别是谁? 夜来风雨声,花开知多 “三李”是指?