托盘的实现:

原创 2005年05月25日 22:32:00
托盘的实现:
   [ color=#FF00FF]1.[/color]了解NOTIFYICONDATA结构;
typedef struct _NOTIFYICONDATA {
  DWORD cbSize;          // 结构大小(sizeof struct),必须设置
  HWND hWnd;            // 发送通知消息的窗口句柄
  UINT uID;                //  图标ID ( 由回调函数的WPARAM 指定)
  UINT uFlags;           
  UINT uCallbackMessage;    // 消息被发送到此窗口过程
  HICON hIcon;            // 图标句柄
  CHAR szTip[64];          // 提示文本
} NOTIFYICONDATA;
BOOL Shell_NotifyIcon(
    DWORD dwMessage,
    PNOTIFYICONDATA pnid
);     
第一个参数dwMessage类型为DWORD,表示要进行的动作,它可以是下面的值之一:      NIM_ADD:      添加一个图标到任务栏。
      NIM_MODIFY:    修改状态栏区域的图标。
      NIM_DELETE:    删除状态栏区域的图标。
      NIM_SETFOCUS:  将焦点返回到任务栏通知区域。当完成用户界面操作时,任务栏图标必须用此消息。例如,如果任务栏图标正   
                      显示上下文菜单,但用户按下"ESCAPE"键取消操作,这时就必须用此消息将焦点返回到任务栏通知区域。
      NIM_SETVERSION:指示任务栏按照相应的动态库版本工作。   
2.增加一个函数用来增加删除托盘图标:
BOOL TrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, PSTR pszTip)
{
    BOOL bReturn;
    NOTIFYICONDATA NofityData;
    NofityData.cbSize = sizeof(NOTIFYICONDATA);
    NofityData.hWnd = hWnd;
    NofityData.uID = IDR_MAINFRAME;
    NofityData.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
    NofityData.uCallbackMessage = WM_MY_TRAY_NOTIFICATION;
    NofityData.hIcon = hIcon;
    lstrcpyn(NofityData.szTip, pszTip, sizeof(NofityData.szTip));
    bReturn = Shell_NotifyIcon(dwMessage, &NofityData);
    if (hIcon)
        DestroyIcon(hIcon);
    return bReturn;
}
3.在TestDlg.cpp 文件中定义一个消息:
#define  WM_MY_TRAY_NOTIFICATION  WM_USER+100
4.定义一个消息处理函数,用于响应当鼠标单击或双击
LRESULT CTestDlg::OnTrayNotification(WPARAM wparam, LPARAM lparam)
{
switch (lparam )
{
case WM_RBUTTONUP:
case WM_LBUTTONDBLCLK:
ShowWindow(SW_SHOW);
    TrayMessage(m_hWnd, NIM_DELETE, NULL, ""); 
}
return 0;
}
5。最后就是实用拉。

void CTestDlg::OnBnClickedBtntray()
{
TrayMessage(m_hWnd, NIM_ADD, NULL, "我的托盘");
    TrayMessage(m_hWnd, NIM_MODIFY, m_hIcon, "我的托盘");
ShowWindow(SW_HIDE);
}
#函数的定义在***DLGDlg.h
protected:
// Generated message map functions
//{{AFX_MSG(CHideDLGDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnShow(WPARAM wparam, LPARAM lparam);
afx_msg LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

JFrame实现系统托盘功能缩放在任务栏,窗体图标自定义

窗体设置默认的关闭操作,在很多软件中为避免关闭按钮退出程序,会设定关闭最小化托盘的操作,JFrame同样可实现该功能;另外,自定义的窗体图标导出为jar可执行文件后,常常不显示,解决办法是将图片资源放...

C#实现WinForm程序的动态系统托盘图标

1.在主窗体中添加一个 NotifyIcon 控件-notifyIcon12.在主窗体中添加一个 ContextMenu 控件-contextMenu1,并添加菜单项3.设置 notifyIcon1 ...

【VB.NET】实现动态托盘图标

前言 NotifyIcon 代码实现 需要的控件 定义类 说明 属性设置 方法类 对于窗体主要控件的编写 对于NotifyIcon的编写 对于Timer的编写 总结 前言有时候觉得也想给自己做的小软件...

用JAVA实现程序最小化到托盘区

下面的这个程序简单地实现了把java应用程序缩小到托盘的方法. 程序运行的jdk要是1.6才行,因为这是J2SDK1.6新加的一些类和方法. import java.awt.*; imp...

paip.提升用户体验------c++ Qt5 实现程序图标以及动态托盘闪烁图标

paip.提升用户体验------c++ Qt5 实现程序图标以及动态托盘闪烁图标 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 ...
  • attilax
  • attilax
  • 2013年09月23日 13:34
  • 3974

Win32 API 实现系统托盘程序

托盘程序就是运行在Windows系统托盘的程序,就是在桌面右下角的显示区域的一个小图标。通常托盘程序带有几种功能:托盘菜单,托盘图标,气泡提示,托盘提示。例如QQ收到消息后,会在系统右下角显示闪动QQ...
  • cwqcwk1
  • cwqcwk1
  • 2013年11月05日 17:53
  • 3882

实现将程序图标显示在系统托盘

长久以来,一直很好奇类似QQ等软件的图标是如何显示在系统托盘的,这次有个项目正好用到,所以就研究了一下。具体方法如下:1、首先我们需要在工具栏找到NotifyIcon这个控件,找到后将其拖到Form中...

Java swing 仿QQ实现系统托盘图标(下)

接着上次更新的java swing 仿QQ实现系统托盘图标(上),现在更新下篇,主要为托盘图标的弹出菜单添加菜单项图标。 TrayIcon只能添加PopupMenu弹出菜单,而PopupMenu弹出菜...
  • MH_ANG
  • MH_ANG
  • 2017年07月23日 13:26
  • 567

VC++实现小托盘的处理

// 实验一Dlg.cpp : implementation file // #include "stdafx.h" #include "实验一.h" #include "实验一Dlg.h" //...
  • jpday
  • jpday
  • 2013年07月11日 20:17
  • 1736

C#Windows 窗体设计-实现欢迎界面-显示About窗体-在托盘中写入应用程序图标

1. private void Form1_Load(object sender, EventArgs e) { //MessageBox.Show("将窗...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:托盘的实现:
举报原因:
原因补充:

(最多只允许输入30个字)