AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

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

51自学网 2015-08-30 http://www.wanshiok.com

  最近有个朋友做了一个基于对话框的小程序,大家知道,一般具有用户界面的 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_FILE
static char THIS_FILE[] = __FILE__;
#endif

class 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;

<

 

 

 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
上一篇:利用WinSock进行无连接的通信  下一篇:VC控件&nbsp;TreeCtrl&nbsp;与&nbsp;ListCtrl&nbsp;演示