个人笔记MFC - 实现系统托盘_FT MYmfc_百度空间

.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

具体步骤:在头文件声明全局变量 和一个宏定义;

#define WM_NOTIFYICON    WM_USER+1 //鼠标点击托盘图标时发消息用;

NOTIFYICONDATA                    m_Nid;                                  //托盘结构体对象,用于结构赋值

1)初始化:

在主控件CPP构造函数内执行初始化:

::memset(&m_Nid,0,sizeof(m_Nid));
m_Nid.cbSize=sizeof(NOTIFYICONDATA);
m_Nid.hWnd=m_hWnd;
m_Nid.uID=IDD_CENTERSERVER_DIALOG;          //注意这个是主控件(窗口)的ID;
m_Nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
m_Nid.uCallbackMessage=WM_NOTIFYICON;       //消息宏定义
m_Nid.hIcon=(HICON)LoadImage(AfxGetInstanceHandle(),
   MAKEINTRESOURCE(IDR_MAINFRAME),IMAGE_ICON,16,16,NULL);
StrCpy(m_Nid.szTip,_T("中心服务器"));               //鼠标放到托盘图标上的信息提示
   

结构体赋值完毕后下面这句代码是添加图标到右下角的托盘位置

Shell_NotifyIcon(NIM_ADD,&m_Nid);

这个时候 当软件启动的时候就已经添加图标到托盘位置了 如图“中心服务器”;

2)隐藏主窗口:

{dy}步完成初始化并添加托盘后 主窗口仍然处于显示状态,当鼠标点击窗口右上角最小化按钮时需要隐藏窗口;这里需要截获用户操作消息!完整步骤如下:

选择编译器的 视图->类试图->找到控件的Dlg类->右键属性 在右侧弹出的属性框内选择“消息”,如图

->在列表内查找WM_SIZE消息并添加,如图->

如图选择后系统自动添加这个消息函数到Dlg类,当窗口大小被改变时系统都会调用添加的这个OnSize函数;

void CCenterServerDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

switch(nType)
{
case SIZE_MINIMIZED://最小化
     ShowWindow(SW_HIDE);//隐藏窗口
    break;
   }
// TODO: 在此处添加消息处理程序代码
}

到此已经xx隐藏窗口,只剩下右下角的托盘图标;

3)恢复窗口:

当鼠标左键点击右下角的图标时需要恢复窗口 或者鼠标右键点击图标时能弹出菜单->设置->退出等提示;

在{dy}步初始化的时候有这么一条:

m_Nid.uCallbackMessage=WM_NOTIFYICON;       //消息宏定义

WM_NOTIFYICON 就是点击右下角的图标时系统返回的一个消息 收到这个消息后会调用一个自己写的函数 从而进行相应的处理 包括右键单击 左键单击 双击等等;

具体步骤:

添加注册消息表

BEGIN_MESSAGE_MAP(CCenterServerDlg, CDialog)

..

ON_MESSAGE(WM_NOTIFYICON,OnNotifyIcon)//消息

....

END_MESSAGE_MAP()

其中 OnNotifyIcon 为自己写的函数 具体如下:

头文件声明:afx_msg LRESULT OnNotifyIcon(WPARAM wParam, LPARAM lParam);

CPP文件定义:

LRESULT CCenterServerDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)

{

if((int)wParam==IDD_CENTERSERVER_DIALOG)//确认是目标窗口发来的消息(可以省略)
{
     if(lParam==WM_LBUTTONDOWN) //左键单击事件
      {
       ShowWindow(SW_SHOWMINIMIZED);//显示窗口
       }

   }

}

到此 只要左键单击托盘图标 窗口就会弹出,弹出后 只要点击窗口的最小化按钮就会隐藏到托盘位置;

注意:当退出程序时要删除托盘图标:Shell_NotifyIcon(NIM_DELETE,&m_Nid);

4)右键单击图标显示菜单:

如图:

----》明日继续...累了



郑重声明:资讯 【个人笔记MFC - 实现系统托盘_FT MYmfc_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——