C++之MFC系统图标任务托盘显示

来源:互联网 发布:c语言为什么叫c语言 编辑:程序博客网 时间:2024/05/08 20:22


    MFC支持将任务图标放在系统任务托盘中显示,通过NOTIFYICONDATA结构体实现,下面具体阐述其实现方法:

    1.定义结构体变量

        NOTIFYICONDATA m_NotifyIcon;

          2.结构体成员变量赋值

m_NotifyIcon.cbSize = sizeof(NOTIFYICONDATA);     // 结构大小m_NotifyIcon.hWnd = this->m_hWnd;                 // 接收托盘消息的窗口句柄m_NotifyIcon.uID = IDR_MAINFRAME;                 // 应用程序中定义的托盘图标IDm_NotifyIcon.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); // 托盘图标句柄wcscpy(m_NotifyIcon.szTip,_T("SunjianDlg System Icon Test")); // 图标显示提示字符串m_NotifyIcon.uCallbackMessage = WM_USER_NOTIFY;               // 自定义消息,接收图标发送的消息m_NotifyIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;       // 设置属性
      结构体成员变量还有其他其他内容项,经常使用的是以上几项内容。

    3.执行添加任务栏图标程序

       Shell_NotifyIcon(NIM_ADD,&m_NotifyIcon);

             NIM_ADD 表示添加图标;NIM_DELETE表示删除图标;NIM_MODIFY表示修改图标

    4.结束后删除图标

      Shell_NotifyIcon(NIM_DELETE,&m_NotifyIcon);

      其中任务栏图标和应用程序通过先前定义的自定义消息(也可使用系统消息)进行通信,

// 托盘图标消息响应函数,其中wParam参数标示了消息事件发生的任务栏图标ID,// lParam参数根据事件的不同,包含了鼠标或键盘的具体消息。LRESULT CSunjianDlgTestDlg::OnNotifyMsg(WPARAM wparam, LPARAM lparam){if( wparam != IDR_MAINFRAME ){return -1;}switch(lparam){case WM_LBUTTONDOWN:{if( TRUE == m_ShowFlag ){m_ShowFlag = FALSE;ShowWindow(SW_HIDE);}else{m_ShowFlag = TRUE;ShowWindow(SW_SHOW);}}break;case WM_RBUTTONDOWN:{// 注意:菜单是弹出式菜单,菜单索引项是弹出式菜单,子菜单不是CMenu menu;menu.LoadMenuW(IDR_MENU2);CMenu* pPopup = menu.GetSubMenu(0);  // 获取菜单句柄,参数表示菜单位置,索引值POINT pt;GetCursorPos(&pt);pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,pt.x,pt.y,this); // 其中可添加TPM_RETURNCMD选项,返回值表示选中的菜单ID项pPopup->DestroyMenu();               // 菜单销毁                        // 在此直接使用菜单项处理程序}break;}}



      

原创粉丝点击