首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC怎么将对话框最小化到任务栏,点击之后还原到桌面

2012-03-14 
MFC如何将对话框最小化到任务栏,点击之后还原到桌面?如题,本人用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
);

[解决办法]

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);} 

热点排行