请问如何让应用程序不在任务栏显示,又如何还原出来?

分号 2009-08-12 11:14:08
我看了以前不少人发的帖子,大致用下面的代码实现:
。。。
::ShowWindow( GetSafeHwnd(), SW_HIDE );
ModifyStyleEx( 0, WS_EX_TOOLWINDOW );
::ShowWindow( GetSafeHwnd(), SW_SHOW );
。。。
几个问题:
1,这样的确不在任务栏显示了,但是应用程序窗口缩为了一个工具栏,跑到左下角去了,就像QQ的登录界面一样,你点最小化,它就缩小为一个标题栏,然后跑到了左下角。怎样完全不显示出来?
2,为什么一定要在修改窗口风格前后加上SW_HIDE,SW_SHOW二个操作?
3,我给程序创建了系统托盘,点左键就希望它还原出来,是这么写的,大家看一下对不对:
。。。
ModifyStyleEx( WS_EX_TOOLWINDOW, WS_EX_APPWINDOW );
ShowWindow(SW_RESTORE);
。。。
总之我想把我的应用程序实现类似金山词霸那样,点最小化,就只看见托盘,而且窗口最小化的动画不要向左飞下去,那样太囧了。
...全文
916 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zngsai 2009-08-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ghost90 的回复:]
晕,单文档

C/C++ code

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{if (!CFrameWnd::PreCreateWindow(cs))return FALSE;if (!m_bOwnerCreated)// "dialog-is-created" flag {// m_MainFrameOwner - CDialog object mapped to the resource dialog template m_bOwnerCreated= m_MainFrameOwner.Create(IDD_FRAMEOWNER);if (m_bOwnerCreated) m_MainFrameOwner.ShowWindow(SW_HIDE);
};// set the dialog as a parent of CMainFrame windowif (m_bOwnerCreated)
cs.hwndParent= m_MainFrameOwner.GetSafeHwnd();return TRUE;
}


BOOL CMainFrame::ShowTaskBarButton(BOOL bVisible)
{if (!m_bOwnerCreated)return FALSE;

ShowWindow(SW_HIDE);if (bVisible)
ModifyStyleEx(0, WS_EX_APPWINDOW);else
ModifyStyleEx(WS_EX_APPWINDOW,0);

ShowWindow(SW_SHOW);return TRUE;
}


[/Quote]

支持三楼!
Ghost90 2009-08-12
  • 打赏
  • 举报
回复
晕,单文档



BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CFrameWnd::PreCreateWindow(cs)) return FALSE;
if (!m_bOwnerCreated) // "dialog-is-created" flag
{
// m_MainFrameOwner - CDialog object mapped to the resource dialog template
m_bOwnerCreated = m_MainFrameOwner.Create(IDD_FRAMEOWNER);
if (m_bOwnerCreated) m_MainFrameOwner.ShowWindow(SW_HIDE);
};

// set the dialog as a parent of CMainFrame window
if (m_bOwnerCreated)
cs.hwndParent = m_MainFrameOwner.GetSafeHwnd();

return TRUE;
}


BOOL CMainFrame::ShowTaskBarButton(BOOL bVisible)
{
if (!m_bOwnerCreated) return FALSE;

ShowWindow(SW_HIDE);

if (bVisible)
ModifyStyleEx(0, WS_EX_APPWINDOW);
else
ModifyStyleEx(WS_EX_APPWINDOW, 0);

ShowWindow(SW_SHOW);

return TRUE;
}


分号 2009-08-12
  • 打赏
  • 举报
回复
谢谢,我忘了说了,我的应用程序是SDI的,不是对话框。
Ghost90 2009-08-12
  • 打赏
  • 举报
回复
Dialog 程序不再任务栏里显示方法:
在 App的 InitInstance() 函数里加(如:BOOL CUApp::InitInstance())

CFrameWnd *parentWnd = new CFrameWnd(); //新加语句
parentWnd->Create( 0, 0, WS_OVERLAPPEDWINDOW ); //新加语句

CYOUDlg dlg(parentWnd); //修改语句 CYOUDlg 是主对话框类
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
........................


在 BOOL CYOUDlg ::OnInitDialog() 加入
ModifyStyleEx(WS_EX_APPWINDOW,0);

15,979

社区成员

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

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