您的位置:首页 > 其它

最小化托盘

2017-03-21 18:09 113 查看
第一步:在BOOL CXXDlg::OnInitDialog()中添加

///最小化托盘
ShowWindow(SW_HIDE);
ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW, 0);


第二步:添加函数 在头文件中添加消息处理函数

#define WM_TASKBAR WM_APP+1000


类中添加函数

LRESULT OnTaskbar(WPARAM wParam, LPARAM lParam);


在.cpp中添加

BEGIN_MESSAGE_MAP(CAutoAddDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_TASKBAR, OnTaskbar)
ON_WM_DESTROY()
END_MESSAGE_MAP()


第三步:添加函数实现

BOOL CAutoAddDlg::AddIcon()
{
HICON hIcon=theApp.LoadIcon(IDI_ICON_Time);//图标句柄
CString lpszTip = _T("little chock!");

//给NOTIFYICONDATA结构赋值
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = m_hWnd;
tnid.uID = IDI_ICON_Time;
tnid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
tnid.uCallbackMessage = WM_TASKBAR;
tnid.hIcon = hIcon;
lstrcpyn(tnid.szTip, lpszTip, sizeof(tnid.szTip));

return Shell_NotifyIcon(NIM_ADD, &tnid);
}

BOOL CAutoAddDlg::DeleteIcon()
{
//提供结构大小,窗口句柄和图标ID
NOTIFYICONDATA tnid;

tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = m_hWnd;
tnid.uID = IDI_ICON_Time;

//用NIM_DELETE删除图标
return Shell_NotifyIcon(NIM_DELETE, &tnid);
}
///处理托盘事件-鼠标覆盖-鼠标点击(左击-右击)
LRESULT CAutoAddDlg::OnTaskbar(WPARAM wParam, LPARAM lParam)
{
UINT uMouseMsg = (UINT)lParam;
switch (uMouseMsg)
{
case WM_LBUTTONDOWN://鼠标左键消息
ShowWindow(SW_SHOWNORMAL);
break;
case WM_RBUTTONUP: // 鼠标右键消息
break;
//添加其他响应消息
default:
break;
}

return 0;
}


第四步:添加释放函数,如果删除图标,则在关闭窗口后托盘图标仍然存在,不过仍然存在一些问题,如果程序非正常关闭,则托盘图标仍然存在,有待后续研究

void CAutoAddDlg::OnDestroy()
{
CDialog::OnDestroy();

// TODO: Add your message handler code here
DeleteIcon();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: