隐藏基于对话框程序
2007-03-05 17:04
148 查看
定义托盘响应消息:
#define WM_SYSTRAY WM_USER + 120
在头文件中定义变量:
WINDOWPLACEMENT m_wp; // 以便在恢复时使用
NOTIFYICONDATA m_tmid; // 托盘结构
CRect m_rectWnd; // 保存窗口区域
在初始化函数中加入:
GetWindowRect(&m_rectWnd); // 恢复时使用
GetWindowPlacement(&m_wp); //恢复时用
ModifyStyleEx (WS_EX_APPWINDOW, WS_EX_TOOLWINDOW); // 不在工具栏显示
WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
wp.flags = WPF_RESTORETOMAXIMIZED;
wp.showCmd = SW_HIDE;
SetWindowPlacement(&wp);
m_tmid.cbSize = sizeof (NOTIFYICONDATA);
m_tmid.hWnd = this->m_hWnd;
m_tmid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
m_tmid.uCallbackMessage = WM_SYSTRAY;
m_tmid.uID = IDR_MAINFRAME;
CString sz = _T("");
strcpy(m_tmid.szTip, "");
HICON hIcon;
hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_tmid.hIcon = hIcon;
PNOTIFYICONDATA m_ptnid = &m_tmid;
::Shell_NotifyIcon(NIM_ADD, m_ptnid);
if (hIcon)
::DestroyIcon(hIcon);
增加窗口消息函数 WM_DESTROY 增加如下
void CClientDlg::OnDestroy()
{
CDialog::OnDestroy();
::Shell_NotifyIcon(NIM_DELETE ,&m_tmid);
}
响应WindowProc消息
LRESULT CClientDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_SYSTRAY:
if (lParam == WM_LBUTTONDBLCLK)
{
// 恢复窗口
ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW);
SetWindowPlacement(&m_wp);
MoveWindow(m_rectWnd, TRUE);
CenterWindow();
}
break;
case WM_SYSCOMMAND:
if (wParam == SC_MINIMIZE)
{
AfxGetMainWnd()->ShowWindow (SW_HIDE);
return 0;
}
if (wParam == SC_CLOSE)
{
OnCancel();
return 0;
}
break;
}
return CDialog::WindowProc(message, wParam, lParam);
}
#define WM_SYSTRAY WM_USER + 120
在头文件中定义变量:
WINDOWPLACEMENT m_wp; // 以便在恢复时使用
NOTIFYICONDATA m_tmid; // 托盘结构
CRect m_rectWnd; // 保存窗口区域
在初始化函数中加入:
GetWindowRect(&m_rectWnd); // 恢复时使用
GetWindowPlacement(&m_wp); //恢复时用
ModifyStyleEx (WS_EX_APPWINDOW, WS_EX_TOOLWINDOW); // 不在工具栏显示
WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
wp.flags = WPF_RESTORETOMAXIMIZED;
wp.showCmd = SW_HIDE;
SetWindowPlacement(&wp);
m_tmid.cbSize = sizeof (NOTIFYICONDATA);
m_tmid.hWnd = this->m_hWnd;
m_tmid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
m_tmid.uCallbackMessage = WM_SYSTRAY;
m_tmid.uID = IDR_MAINFRAME;
CString sz = _T("");
strcpy(m_tmid.szTip, "");
HICON hIcon;
hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_tmid.hIcon = hIcon;
PNOTIFYICONDATA m_ptnid = &m_tmid;
::Shell_NotifyIcon(NIM_ADD, m_ptnid);
if (hIcon)
::DestroyIcon(hIcon);
增加窗口消息函数 WM_DESTROY 增加如下
void CClientDlg::OnDestroy()
{
CDialog::OnDestroy();
::Shell_NotifyIcon(NIM_DELETE ,&m_tmid);
}
响应WindowProc消息
LRESULT CClientDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_SYSTRAY:
if (lParam == WM_LBUTTONDBLCLK)
{
// 恢复窗口
ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW);
SetWindowPlacement(&m_wp);
MoveWindow(m_rectWnd, TRUE);
CenterWindow();
}
break;
case WM_SYSCOMMAND:
if (wParam == SC_MINIMIZE)
{
AfxGetMainWnd()->ShowWindow (SW_HIDE);
return 0;
}
if (wParam == SC_CLOSE)
{
OnCancel();
return 0;
}
break;
}
return CDialog::WindowProc(message, wParam, lParam);
}
相关文章推荐
- 基于对话框的MFC程序启动后自动隐藏对话框
- 如何让基于对话框的程序运行时隐藏界面
- 如何让基于对话框的MFC程序启动后自动隐藏对话框
- MFC中基于对话框的程序启动后自动隐藏
- 程序启动时,隐藏对话框的方法(基于vc的对话框工程)
- VC基于对话框,文档程序启动时隐藏窗口总结
- 如何让基于对话框的MFC程序一运行起来就完全隐藏
- 隐藏基于对话框程序
- 基于对话框的MFC程序启动时完全隐藏的简单方法
- 基于对话框的MFC程序启动时完全隐藏的简单方法
- MFC基于对话框程序启动时隐藏窗口的实现
- 基于对话框的程序,在任务栏隐藏对话框
- 基于对话框的程序工程改用非模式对话框作为主窗口
- 基于MFC对话框程序中添加菜单栏 (CMenu)
- 如何初始化基于对话框的MFC程序中对话框的大小
- 自己写的基于MFC对话框的用于调试程序的UDP客户端服务器端程序
- 基于Dialog的MFC程序在启动时隐藏为托盘程序(二)
- 基于Dialog的MFC程序在启动时隐藏为托盘程序(四)
- 孙鑫VC学习笔记:第十五讲 编写一个基于MFC对话框的聊天程序
- 基于对话框程序中让对话框捕获WM_KEYDOWN消息的实现方法