在VS6.0工程中创建系统状态栏图标显示?

VS6.0工程中创建系统状态栏图标显示?

第一步:创建自定义消息

a、在CMainFrame类的 .cpp文件中定义消息名称

#define WM_TRAY WM_USER + 103

b、在CMainFrame类的 .cpp 文件中声明消息映射

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

      //{{AFX_MSG_MAP(CMainFrame)

           // NOTE - the ClassWizard will add and remove mapping macros here.

           //    DO NOT EDIT what you see in these blocks of generated code !

      ON_WM_CREATE()

      //}}AFX_MSG_MAP

      ON_MESSAGE(WM_TRAY, OnTrayNotification)

END_MESSAGE_MAP()

c、在CmainFrmae类中手动添加 OnTrayNotification 函数的定义及实现

头文件中做函数定义

protected:

      //{{AFX_MSG(CMainFrame)

      afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

           // NOTE - the ClassWizard will add and remove member functions here.

           //    DO NOT EDIT what you see in these blocks of generated code!

      //}}AFX_MSG

      DECLARE_MESSAGE_MAP()

      LONG OnTrayNotification(WPARAM wparam, LPARAM lparam);

};

.cpp文件中做实现代码

//系统状态栏显示程序图标

LONG CMainFrame::OnTrayNotification(WPARAM wparam, LPARAM lparam)

{

      switch ( lparam )

    {

      case WM_RBUTTONDOWN:

           {

                 // 用户在托盘图标上单击鼠标右键,弹出上下文菜单隐藏/显示对话框。

                 CMenu oMenu;

                 if (oMenu.LoadMenu(IDR_MENU_TRAY))       

                 {

                       CMenu* pPopup = oMenu.GetSubMenu(0);

                       ASSERT(pPopup != NULL);

                       CPoint oPoint;

                       GetCursorPos( &oPoint );

                       SetForegroundWindow();

                       pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,oPoint.x, oPoint.y, this);

                 }

           }

            break;

      case WM_LBUTTONDBLCLK:      // 单击/双击鼠标左键均显示出对话框

      case WM_LBUTTONDOWN:

            Show();

            break;

    }

    return 0;

}

第二步:此时编译工程会提示:

D:/工作室/PDT3000系统/PDT30001/DCMS3000Main/MainFrm.cpp(125) : error C2065: 'IDR_MENU_TRAY' : undeclared identifier

D:/工作室/PDT3000系统/PDT30001/DCMS3000Main/MainFrm.cpp(138) : error C2065: 'Show' : undeclared identifier

aIDR_MENU_TRAY 是菜单资源,在ResourceView中添加新Menu,属性设置为 IDR_MENU_TRAY,可以创建相应的菜单项,如果用户右击会弹出菜单,注:如果在ID_MENU_TRAY菜单中,创建的子项ID与主菜单ID一致,便可执行同样的操作

bShow函数主要用来控制主程序的显示与隐藏,添加函数即可,实现代码如下:

void CMainFrame::Show()

{

      if ( !IsWindowVisible() )

      {

            ShowWindow(SW_SHOW);

      }

      else

      {

            ShowWindow(SW_HIDE);

      }

}

第三步:在CMainFrameOnCreate中加入下述代码,实现图标显示

      //实现系统图标的系统状态栏显示.......................................

      //

    NOTIFYICONDATA IconData;

      IconData.cbSize  =  sizeof(NOTIFYICONDATA);

      IconData.hWnd    =  this->m_hWnd;

      IconData.uID     =  IDR_MAINFRAME;

      IconData.uFlags  =  NIF_MESSAGE|NIF_ICON|NIF_TIP;

      IconData.uCallbackMessage =  WM_TRAY;

      IconData.hIcon           

           = LoadIcon(AfxGetInstanceHandle(),

            MAKEINTRESOURCE(IDR_MAINFRAME));

      strcpy(IconData.szTip, "数据采集映射子系统 3.3/n版权归 (C) 优化佳");

      ::Shell_NotifyIcon(NIM_ADD, &IconData);

//

第四步:在适当位置中加入下述代码,实现图标删除,我是在CMainFrameWM_CLOSE消息中添加的下述代码

      //在系统状态栏中删除系统托盘图标

      NOTIFYICONDATA IconData;

      IconData.cbSize  =  sizeof(NOTIFYICONDATA);

      IconData.hWnd    =  this->m_hWnd;

      IconData.uID     =  IDR_MAINFRAME;

      ::Shell_NotifyIcon(NIM_DELETE, &IconData);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
trayicon类的使用 //新建一个基于单文档的工程 //将trayicon类引入工程,并引入图标作为动态显示用 //在工程新建一个菜单ID为IDR_TRAYPOPUP,添加两个命令ID:ID_SHOWWINDOW 和 ID_HIDEWINDOW //并利用类向导在CMainFrame类为它们添加命令处理函数 void CMainFrame::OnShowwindow() { // 显示窗口 this->ShowWindow(SW_SHOW); } void CMainFrame::OnHidewindow() { // 隐藏窗口 this->ShowWindow(SW_HIDE); } //在类CMainFrame头文件前添加 #include "ntray.h" #define MAXICONS (int)9 //定义图标的最大数目,具体工程具体修改数目 #define DELAY (DWORD)100 //定义动画图标的时间延迟 //在DECLARE_MESSAGE_MAP()前添加自定义消息 afx_msg LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam); //声明trayicon类对象 CTrayNotifyIcon m_TrayIcon; //声明图标数组 HICON m_hIcons[MAXICONS]; //在CMainFrame的实现文件添加消息宏ID #define WM_TRAYNOTIFY (WM_USER + 100) //在BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 和 END_MESSAGE_MAP()之间添加消息映射 ON_MESSAGE(WM_TRAYNOTIFY, OnTrayNotification) //在CMainFrame的实现文件定义消息处理函数 LRESULT CMainFrame::OnTrayNotification(WPARAM wParam, LPARAM lParam) { //Delegate all the work back to the default implementation in //CTrayNotifyIcon. return m_TrayIcon.OnTrayNotification(wParam, lParam); } //在CMainFrame的构造函数添加icon的初始化代码 for (int i=0; i<MAXICONS; i++) { //任务栏图标,注意引入的图标的ID值为连续的,且IDI_ICON1的值为图标ID最小的 m_hIcons[i] = AfxGetApp()->LoadIcon(IDI_ICON1 + i); } //在CMainFrame的OnCreate(LPCREATESTRUCT lpCreateStruct) 函数添加 if (!m_TrayIcon.Create(this, IDR_TRAYPOPUP, _T("提示信息"), m_hIcons, MAXICONS, DELAY, WM_TRAYNOTIFY)) { AfxMessageBox(_T("Failed to create tray icon"), MB_OK | MB_ICONSTOP); return -1; } //在需要使用动态图标或静态图标处加入以下代码 if (m_TrayIcon.UsingAnimatedIcon())//判断是否处于动态显示状态 { m_TrayIcon.SetIcon(m_hIcons[0]);//设置通知区为静态图标 m_TrayIcon.SetTooltipText(_T("静止也美!")); } else { m_TrayIcon.SetIcon(m_hIcons, MAXICONS, DELAY);//设置通知区为动态图标 m_TrayIcon.SetTooltipText(_T("运动才美!")); }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值