MFC怎么将对话框最小化到任务栏,点击之后还原到桌面
MFC如何将对话框最小化到任务栏,点击之后还原到桌面?
如题,本人用MFC做了一游戏登陆器,但是没有最小化按钮,系统自带的按钮不符合要求,请问MFC如何将对话框最小化到任务栏,点击之后还原到桌面?
------解决方案--------------------
最小化到托盘可以吗http://wenku.baidu.com/view/b5c0482c453610661ed9f4e0.html
------解决方案--------------------
SetWindowPlacement Function
这个函数设置指定窗口的显示状态和恢复,最小化,最大化时的位置。
--------------------------------------------
The SetWindowPlacement function sets the show state and the restored, minimized, and maximized positions of the specified window.
Syntax
BOOL SetWindowPlacement( HWND hWnd,
WINDOWPLACEMENT *lpwndpl
);
------解决方案--------------------
如题,本人用MFC做了一游戏登陆器,但是没有最小化按钮,系统自带的按钮不符合要求,请问MFC如何将对话框最小化到任务栏,点击之后还原到桌面?
------解决方案--------------------
最小化到托盘可以吗http://wenku.baidu.com/view/b5c0482c453610661ed9f4e0.html
------解决方案--------------------
SetWindowPlacement Function
这个函数设置指定窗口的显示状态和恢复,最小化,最大化时的位置。
--------------------------------------------
The SetWindowPlacement function sets the show state and the restored, minimized, and maximized positions of the specified window.
Syntax
BOOL SetWindowPlacement( HWND hWnd,
WINDOWPLACEMENT *lpwndpl
);
------解决方案--------------------
- C/C++ code
// 先添加一个成员变量 NOTIFYICONDATA m_Nid; // 托盘 // 然后添加如下成员函数 // 初始化显示托盘 void CRunDlg::InitPrompt(void) { // 设置托盘图标 m_Nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); m_Nid.hWnd = m_hWnd; m_Nid.uID = IDR_MAINFRAME; m_Nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP; m_Nid.uCallbackMessage = WM_SHOWTASK; // 自定义托盘菜单消息 m_Nid.hIcon = ::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)); wcscpy(m_Nid.szTip, _T("仓库管理系统")); Shell_NotifyIcon(NIM_ADD, &m_Nid); // 在托盘区添加图标 } // 添加托盘消息响应 afx_msg LRESULT OnShowTask(WPARAM wParam, LPARAM lParam); ON_MESSAGE(WM_SHOWTASK, &CRunDlg::OnShowTask) // 托盘菜单消息函数 LRESULT CRunDlg::OnShowTask(WPARAM wParam, LPARAM lParam) { if(wParam != IDR_MAINFRAME) // 判断图标ID是否相符 return 1; switch(lParam) { case WM_RBUTTONUP: {// 按鼠标右键 CPoint point; GetCursorPos(&point); CMenu menu; menu.CreatePopupMenu(); menu.AppendMenu(MF_STRING, [color=#FF0000]IDM_SHOW_WINDOW[/color], _T("显示")); menu.AppendMenu(MF_STRING, WM_DESTROY, _T("退出")); SetForegroundWindow(); // 解决菜单失去焦点不消失的BUG menu.TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); menu.DestroyMenu(); } break; case WM_LBUTTONDBLCLK: // 双击鼠标左键 OnShowWindow(); break; } return 0; } // 菜单项单击"显示"响应函数 afx_msg void OnShowWindow(); ON_COMMAND(IDM_SHOW_WINDOW, &CRunDlg::OnShowWindow) // 托盘菜单"显示"响应函数 void CRunDlg::OnShowWindow() { if(IsWindowVisible()) SendMessage(WM_SYSCOMMAND, SC_RESTORE, (LPARAM)m_hWnd); else ShowWindow(SW_SHOW); } // 重写窗口过程函数,来拦截MFC窗口“最小化”按钮点击消息响应让程序最小化到托盘 LRESULT CRunDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: 在此添加专用代码和/或调用基类 // 单击最小化按钮 if (message == WM_SYSCOMMAND && wParam == SC_MINIMIZE) { //AfxMessageBox(_T("是否最小化窗口到托盘")); ShowWindow(SW_HIDE); // 隐藏主窗口 return 0; } return CDialog::DefWindowProc(message, wParam, lParam); }