托盘功能的实现(MFC)

来源:互联网 发布:斗鱼主播用的直播软件 编辑:程序博客网 时间:2024/05/18 13:25
托盘功能在很多地方都用到,比如我们每天用的QQ,当点击最小化的时候QQ主界面会自动隐藏,在桌面的右下角看到一个QQ图标,当双击QQ图片的时候又能将主界面显示出来。实现这种托盘功能的实现很简单,下面给出托盘功能的实现过程:

 

在类中添加一个NOTIFYICONDATA类型的成员变量m_nid

protected:

HICON m_hIcon;

NOTIFYICONDATA m_nid;

 

在类的初始化函数OnInitDialog中对结构体NOTIFYICONDATA进行初始化赋值

ZeroMemory(&m_nid, sizeof(m_nid));

m_nid.cbSize = sizeof(m_nid);

m_nid.hWnd = this->m_hWnd;

m_nid.uID = IDR_MAINFRAME;

m_nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;

m_nid.hIcon=LoadIcon(AfxGetInstanceHandle(),

MAKEINTRESOURCEA(IDR_MAINFRAME));

//WM_NOTIFYICON为点击托盘icon时产生的消息

m_nid.uCallbackMessage = WM_NOTIFYICON;

strcpy(m_nid.szTip, "hahaya");

 

定义WM_NOTIFYICON的处理过程

#define WM_NOTIFYICON WM_USER + 100

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void OnNotifyIcon(WPARAM wParam, LPARAM lParam);

 

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)

 
void CMyDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam){POINT pt;GetCursorPos(&pt);switch(lParam)    {        case WM_LBUTTONDBLCLK:            ShowWindow(SW_SHOW);            ShowWindow(SW_SHOWNORMAL);            Shell_NotifyIcon(NIM_DELETE, &m_nid);            break;
    }}



捕获发生在窗口上的窗口上大小发生变化的WM_SIZE消息(可以通过类向导给对话框添加WM_SIZE消息)

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void OnNotifyIcon(WPARAM wParam, LPARAM lParam);

afx_msg void OnSize(UINT nType, int cx, int cy);

 

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)

ON_WM_SIZE()

 

void CMyDlg::OnSize(UINT nType, int cx, int cy) {CDialog::OnSize(nType, cx, cy);// TODO: Add your message handler code hereif(nType == SIZE_MINIMIZED)    {        Shell_NotifyIcon(NIM_ADD, &m_nid);        ShowWindow(SW_HIDE);    }}
原创粉丝点击