托盘化(最小化)处理 MFC

//===================================================================================================================================

2.关于图标的更改,和托盘化。

    2.1如何加图标:资源ICON里面把要导入的图标加入(注意图标有一定的要求,一般很小),注意icon的ID。

    2.2如何设置托盘菜单:相应的在menu里面插入资源,写上字。

    2.3最小化托盘和删除托盘...:  函数名 void ToTray();    void DeleteTray();

     afx_msg LRESULT OnShowTask(WPARAM  wParam, LPARAM  lParam);//响应鼠标对托盘图标左键点击,右键点击等事件的处理函数

     afx_msg  void OnShow();//自定义消息连接(将消息跟窗口函数挂钩)

     afx_msg  void  OnClose();

//============================================

BEGIN_MESSAGE_MAP(CDBToolDlg,CDialog)//系统消息函数连接

。。。。。。。

 ON_MESSAGE(WM_SHOWTASK, &CDBToolDlg::OnShowTask)

 ON_COMMAND(ID_SHOW, &CDBToolDlg::OnShow)//ID_SHOW是menu打开主界面的字的ID

 ON_COMMAND(ID_CLOSE, &CDBToolDlg::OnClose)

 

END_MESSAGE_MAP()

//========================================

void CDBToolDlg::ToTray()//在托盘区显示图标

{

    NOTIFYICONDATA   nid;

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

     nid.hWnd=this->m_hWnd;

    nid.uID=IDI_ICON3;//次ID就是软件图形的id

     nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;

     nid.uCallbackMessage=WM_SHOWTASK;//  #define WM_SHOWTASK     (WM_USER+1)//自定义消息名称

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

     strcpy(nid.szTip,"数据库工具");//信息显示条

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

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

}

void CDBToolDlg::DeleteTray()//托盘区图标撤去

{

NOTIFYICONDATA   nid;

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

nid.hWnd=this->m_hWnd;

nid.uID=IDI_ICON3;//次ID就是软件图形的id

nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;

nid.uCallbackMessage=WM_SHOWTASK;//  #define WM_SHOWTASK     (WM_USER+1)//自定义消息名称

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

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

shell_NotifyIcon(NIM_DELETE, &nid);// 在托盘区删除图标//其中只有shell命令换了NIM_DELETE   vs      NIM_ADD

  }

//=========================================================

void CDBToolDlg::OnShow()

{

 this->ShowWind(SW_SHOW);

DeleteTray();//主界面显示后,退去托盘图标

}

void CDBToolDlg::OnClose()

{

 DeleteTray();//点击托盘菜单显示的推出按钮后,推出程序,删掉图标

 exit(1);

}

//=====================================================================

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

{

 if(wParam!=IDI_ICON3)

      return 1;//如果鼠标位置不是移动在ID为IDI_ICON3的ICON上,则程序返回

switch(lParam)//如果移动到该图标,且鼠标做了iParam的信息则根据信息选择函数功能执行

{

case WM_RBUTTONUP://右键起来时的消息,做出如下

    {

     CMenu menu;

     Cpoint point;

       ::GetCursorPos(& point);//将显示的位置委托给point变量来操作

       menu.LoadMenu(IDR_MENU1);//显示我们先前创建的Menu资源
      menu.GetSubMenu(0)->TrackPopupMenu(TPM_CENTERALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON,point.x,point.y,this);

}

break;

case WM_LBUTTONDBLCLK://双击左键

{

  OnShow();//显示主界面,并撤掉图标

}

default::

break;

}

return 0;

}

//====================================修改关掉界面的操作============

void CDBToolDlg::OnSysCommand(UINT nID,LPARAM lParam)//修改系统函数

{

    if(nID== SC_MINIMIZE )//窗口上最小化图标点击后,就托盘化(最小化)

          ToTray();

     else if(nID== SC_CLOSE)//窗口上关闭图标点击后,就关闭

          OnClose();

      else

          CDialog::::OnSysCommand(nID,lParam);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值