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

qq328422353 2011-12-19 04:29:23
如题,本人用MFC做了一游戏登陆器,但是没有最小化按钮,系统自带的按钮不符合要求,请问MFC如何将对话框最小化到任务栏,点击之后还原到桌面?
...全文
1475 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
蚯蚓哥 2014-09-11
  • 打赏
  • 举报
回复
引用 9 楼 schlafenhamster 的回复:
ShowWindow(SW_MINIMIZE);
你还活着吗斑竹?
汪达人 2014-08-11
  • 打赏
  • 举报
回复
引用 10 楼 xianglitian 的回复:
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
都过了两年了。。
向立天 2012-01-16
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
schlafenhamster 2011-12-19
  • 打赏
  • 举报
回复
ShowWindow(SW_MINIMIZE);
zh359780498 2011-12-19
  • 打赏
  • 举报
回复


// 先添加一个成员变量
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, IDM_SHOW_WINDOW, _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);
}

zhumengshu1 2011-12-19
  • 打赏
  • 举报
回复
参考MSDN
zhumengshu1 2011-12-19
  • 打赏
  • 举报
回复
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
);
qq328422353 2011-12-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zq282502532 的回复:]
可以试试


引用 2 楼 a3250028 的回复:

ShowWindow(SW_HIDE);
用这个试试看
[/Quote]
这个只能隐藏对话框,但是点击任务栏图标对话框显示不出来,网上有隐藏到系统托盘的讲解,但不符合要求啊,要求是要显示在任务栏。求救啊...各位大大们
shen_wei 2011-12-19
  • 打赏
  • 举报
回复
托盘,隐藏随你选择了。。。
猿创日记 2011-12-19
  • 打赏
  • 举报
回复
可以试试

[Quote=引用 2 楼 a3250028 的回复:]

ShowWindow(SW_HIDE);
用这个试试看
[/Quote]
a3250028 2011-12-19
  • 打赏
  • 举报
回复
ShowWindow(SW_HIDE);
用这个试试看
zyrr159487 2011-12-19
  • 打赏
  • 举报
回复
最小化到托盘可以吗http://wenku.baidu.com/view/b5c0482c453610661ed9f4e0.html

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧