VC最小化托盘问题```
发布网友
发布时间:2024-01-04 19:56
我来回答
共1个回答
热心网友
时间:2024-08-31 22:33
vc中有时候要实现程序最小化,实际上那是的隐藏.那么如何实现那,下面我将给出我自己的粗浅建议.
程序最小化到托盘,是把程序隐藏,并在托盘上加上响应的图标,对图标操作发送消息来实现的.下面给出做法供大家参考:
首先在.h文件里加入自定义消息:
#define WM_SHOWTASK (WM_USER + 0x100) //一般数值大于100
//{{AFX_MSG(CMPARTDlg)
中间加入:
afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
在.cpp文件里加入如下代码:
BEGIN_MESSAGE_MAP(CMPARTDlg, CDialog)
//{{AFX_MSG_MAP(CMPARTDlg)
中间加入消息声明:
ON_MESSAGE(WM_SHOWTASK,onShowTask)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
要实现最小话到托盘的函数里加入:
void CMyDlg::OnMenuHpanel()
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK; //自定义的消息名称
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
// IDR_MAINFRAME 是在托盘显示的图标
strcpy(nid.szTip,"计划任务提醒"); //信息提示条为“计划任务提醒”
Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标
ShowWindow(SW_HIDE); //隐藏主窗口
}
LRESULT CMPARTDlg::onShowTask(WPARAM wParam,LPARAM lParam)
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
{
if(wParam!=IDR_MAINFRAME)
return 1;
switch(lParam)
{
case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
{
//其中代码前面文章有可查
}
break;
case WM_LBUTTONDBLCLK://双击左键的处理
{
this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿
}
break;
}
return 0;
}
//应用程序退出时,主窗口销毁消息响应处理函数
void CMyDlg::OnDestroy()
{
CDialog::OnDestroy();
//程序退出,从托盘区删除图标
NOTIFYICONDATA nc;
nc.cbSize = sizeof(NOTIFYICONDATA);
nc.hWnd = m_hWnd;
nc.uID = IDC_NOTIFYICON;
Shell_NotifyIcon(NIM_DELETE, &nc);
}