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

羊绒之美

羊绒之美

2016-01-29 11:54

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

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


作者:NorthTibet

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

下载源代码


    最近有个朋友做了一个基于对话框的小程序,大家知道,一般具有用户界面的 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;CStaticLinkm_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:CStaticLinkm_wndLink1;CStaticLinkm_wndLink2;CStaticLinkm_wndLink3;// Implementationprotected://{{AFX_MSG(CAboutDlg)virtual BOOL OnInitDialog();//}}AFX_MSGDECLARE_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      
展开更多 50%)
分享

猜你喜欢

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

C语言教程 C语言函数
如何隐藏显示在任务栏中的对话框程序

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

C语言教程 C语言函数
也谈如何隐藏显示在任务栏中的对话框程序

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在对话框程序中插入DialogBar

C语言教程 C语言函数
在对话框程序中插入DialogBar

将非模态对话框显示为模态对话框

电脑网络
将非模态对话框显示为模态对话框

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在对话框中动态显示位图

编程语言 网络编程
在对话框中动态显示位图

Win10怎么将QQ从通知栏显示在任务栏?

电脑入门
Win10怎么将QQ从通知栏显示在任务栏?

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

AUTOCAD三维实体速成最简单入门法[第九集]

AUTOCAD三维实体速成最简单入门法[第九集]

如何画好与圆相切的的圆弧(视频)

如何画好与圆相切的的圆弧(视频)
下拉加载更多内容 ↓