您的位置:首页 > 其它

VC 制作系统托盘程序实现将窗口最小化到系统托

2011-09-09 16:47 483 查看
VC 制作系统托盘程序实现将窗口最小化到系统托盘


前段时间因为要用到系统拖盘,所以研究了一下,在这里记录一下,免得以后忘了 ^_^

先在类中定义一个结构变量NOTIFYICONDATA pnid;然后在OnInitDialog进行初始化

pnid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);//该结构体大小

pnid.hWnd=m_hWnd; //窗口句柄

pnid.uID=(UINT)m_hIcon; //图标句柄

pnid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; //图标有效|自定义消息有效|鼠标指向显示文字有效

pnid.uCallbackMessage=WM_MYMESSAGE;//自定义的消息名称

pnid.hIcon=m_hIcon; //图标句柄

strcpy(pnid.szTip,"这是一个测试");//鼠标指向所显示的文字

实现最小化到系统拖盘,这定义一个窗口的OnSize事件

void CMyDlg::OnSize(UINT nType, int cx, int cy)

{

CDialog::OnSize(nType, cx, cy);

// TODO: 在此处添加消息处理程序代码

if (nType==SIZE_MINIMIZED)//如果事件为最小化

{

Shell_NotifyIcon(NIM_ADD,&pnid);//在托盘区添加图标

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

}

}

还原功能则先在CMyDlg.h做下列操作:

#define WM_MYMESSAGE WM_USER+101 //定义自定义消息,加的这个值一般都要大于100

afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); //在类中定义消息响应函数

然后就在CMyDlg.app中定义消息映射,函数实现了。



BEGIN_MESSAGE_MAP(CMyDlg, CDialog)

END_MESSAGE_MAP() 之间查入消息映射ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)

然后建立OnMyMessage函数。

LRESULT CMyDlg::OnMyMessage(WPARAM wParam, LPARAM lParam){

if( lParam == WM_LBUTTONDOWN )//如果在图标中单击左键则还原

{

Shell_NotifyIcon(NIM_DELETE,&pnid);//删除托盘图标

ShowWindow(SW_SHOWNORMAL);//显示主窗口

this->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);//使窗口总是在最前面

}

return 0;

}

如果要更改显示图标则先更改pnid结构里的值,然后使用Shell_NotifyIcon(NIM_MODIFY,&pnid);来更改。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: