当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 如何隐藏显示在任务栏中的对话框程序

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 如何隐藏显示在任务栏中的对话框程序


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 129 ::
收藏到网摘: n/a

如何隐藏显示在任务栏中的对话框程序


作者:NorthTibet

下载源代码


    最近有个朋友做了一个基于对话框的小程序,大家知道,一般具有用户界面的 Windows 程序运行起来后,通常都会在任务栏里体现出来。我的这个朋友不想让她做的对话框程序运行的时候显示在任务栏里。问我如何隐藏?我参考了 MSDN 后告诉她说使用 WS_EX_TOOLWINDOW 扩展窗口式样。她按照我说的方法试了一下,结果没有成功。后来我琢磨了半天,发现这件事情并不像文档中说的那么简单。MSDN 里对 WS_EX_APPWINDOW 的描述是这样的:

 用 WS_EX_TOOLWINDOW 可以创建一个工具窗口,被作为浮动工具栏使用。工具窗口的标 题栏比常规标题栏短,并且使用的窗口字体更小。工具窗口不会出现在任务栏里;当用户 按下 ALT+TAB 健后,也不会出现在任务表中......
显然,按照上面的文档所讲的方法无法实现对话框的隐藏。那么答案在哪里?下面就让我将诀窍和技巧告诉你吧:

第一、创建对话框时必须将它作为某个不可见框架窗口的子窗口;
第二、这个不可见窗口的扩展式样必须设置 WS_EX_TOOLWINDOW;
第三、保证对话框的扩展式样没有设置 WS_EX_APPWINDOW;

下面是例子代码的实现细节说明,这个例子程序(HideDlg)很简单,头文件和实现文件都在同一个文件中:
////////////////////////////////////////////////////////////////// HideDlg.cpp 声明部分// ////////////////////////////////////////////////////////////////#include "stdafx.h"#include "resource.h"#include "statlink.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifclass CMainFrame : public CFrameWnd {protected:	CString m_sClassName;	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);public:	CMainFrame() { }	~CMainFrame() { }};class CMyDlg : public CDialog {public:	CMyDlg(CWnd* pParent = NULL); // 标准构造函数protected:	HICON m_hIcon;	CStaticLink	m_wndLink;	virtual BOOL OnInitDialog();	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);	afx_msg void OnPaint();	afx_msg HCURSOR OnQueryDragIcon();	DECLARE_MESSAGE_MAP()};class CMyApp : public CWinApp {public:	CMyApp();	virtual BOOL InitInstance();	DECLARE_MESSAGE_MAP()};//////////////////////////////////////////////////////// HideDlg.cpp 实现部分////////////////////////////////////////////////////////// 创建不可见框架窗口:设置 WS_EX_TOOLWINDOW 式样BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){	/*	// 设置 WS_EX_TOOLWINDOW 扩展式样	if (CFrameWnd::PreCreateWindow(cs)) {	cs.dwExStyle |= WS_EX_TOOLWINDOW;	return TRUE;	}	return FALSE;*/	// 不设置 WS_EX_TOOLWINDOW 扩展式样	return CFrameWnd::PreCreateWindow(cs);}BEGIN_MESSAGE_MAP(CMyApp, CWinApp)	ON_COMMAND(ID_HELP, CWinApp::OnHelp)END_MESSAGE_MAP()CMyApp::CMyApp(){}CMyApp theApp;////////////////////////////////////////////////////////////////////////// InitInstance: 创建对话框时,把它作为不可见主框架窗口的子窗口对待//////////////////////////////////////////////////////////////////////////BOOL CMyApp::InitInstance(){	CMainFrame* pFrame = new CMainFrame;	m_pMainWnd = pFrame;	pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPED, NULL, NULL);	CMyDlg dlg(pFrame);	int nResponse = dlg.DoModal();	if (nResponse == IDOK) {	} else if (nResponse == IDCANCEL) {	}	return FALSE;}class CAboutDlg : public CDialog {public:	CAboutDlg();	enum { IDD = IDD_ABOUTBOX };protected:	CStaticLink	m_wndLink1;	CStaticLink	m_wndLink2;	CStaticLink	m_wndLink3;// Implementationprotected:	//{{AFX_MSG(CAboutDlg)	virtual BOOL OnInitDialog();	//}}AFX_MSG	DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()BOOL CAboutDlg::OnInitDialog() {	CDialog::OnInitDialog();	m_wndLink1.m_link = _T("http://www.vckbase.com");	m_wndLink2.m_link = _T("http://www.vckbase.com");	m_wndLink3.m_link = _T("http://www.vckbase.com");	m_wndLink1.SubclassDlgItem(IDC_STATIC_ICON, this);	m_wndLink2.SubclassDlgItem(IDC_VCKBASE, this);	m_wndLink3.SubclassDlgItem(IDB_STATIC_IMG, this);	return TRUE; // return TRUE unless you set the focus to a control