VB的ShowInTaskbar功能分析以及用VC的实现

C++窗体编程 在任务栏中隐藏或显示窗体图标 时候我们创建的窗体,不想在任务栏中显示,那么怎么做到呢? 如果以0号窗体为父窗体创建窗体那么就会在任务栏中显示,如果创建一个空的父窗体,在基于这个窗体创建自己要用的窗体,那么就不会在任务栏中显示。 基于上述原理,就开始上代码 准备回调的消息函数: LRESULT CALLBACK MsgBack(HWND hWnd, unsigned int uMsg, _w64 unsigned int wParam, _w64 long lParam) { switch (uMsg) { case WM_CLOS 阅读详情
?

  在VB中想要显示或隐藏一个窗口在任务栏上的按钮很容易,直接设定一个form的ShowInTabkbar属性即可。但在SDK中却不是一件易事,一个窗口在什么情况下会在任务栏上显示一个按钮,在什么情况下不显示呢?这是有规定的:

0,无论什么情况,要让一个窗口在任务栏上显示按钮的前提是该窗口是可见的.

1.如果一个窗口是顶级窗口(也就是父窗口为NULL,也就是父窗口为桌面窗口),那么Windows将为它在任务栏上创建一个按钮.(有例外,见3)

2.如果一个窗口不是顶级窗口,但有WS_EX_APPWINDOW风格,那么Windows将为它在任务栏上创建一个按钮,否则不会有相应的任务栏按钮.

3.如果一个窗口是顶级窗口,但加了WS_EX_TOOLWINDOW,并去掉WS_EX_APPWINDOW风格,那么Windows不会为它在任务栏上创建一个按钮.

4....

  知道了这些规则,你就能随心所欲的控制你的窗口是否要ShowInTaskbar了,下面给出一个问题和解决方案.

问题:在MFC中一个基于对话框的工程,想要主对话框不在任务栏上显示按钮,该如何做?

解决方案1:

根椐上面的第三条规则,给该对话框加上WS_EX_TOOLWINDOW风格并去掉WS_EX_APPWINDOW风格.

代码:

在对话框类的OnInitDialog函数里加入:
?ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW,SWP_FRAMECHANGED);


备注:这种方法会有一个缺点,你的对话框的标题将会是一个小标题,所以大多数人不会采用这种方法.

解决方案2:

根椐上面的第二条规则,将该对话框变为非顶级窗口并去掉WS_EX_APPWINDOW,在app类的initinstance里的主对话框domodal之前生成一个隐藏的对话框,并将这个窗口的指针保存在CWinApp类的m_pMainWnd成员变量中,以后DoModal的对话框都将是它的子窗口.

代码:

在app的initinstance函数中加入以下加注释的代码
BOOL CTestDlgApp::InitInstance()
{
  ...
  CFrameWnd mainWnd; //生成一个框架窗口对象
  mainWnd.Create(NULL,"aa");//生成窗口,不带ws_visible,也就是说不会显示出来

  CTestDlgDlg dlg;
  m_pMainWnd = &mainWnd;//将这个隐藏窗口设为主窗口

  int nResponse = dlg.DoModal();
  ...
}

在对话框的OnInitDialog里加入?ModifyStyleEx(WS_EX_APPWINDOW,0);以便出掉WS_EX_APPWINDOW。

备注:这种方法较为麻烦,不过很实用,据我观察,C++Builder和Delphi生成的程序都应该有一个隐藏的窗口.

解决方案3:

在IE版本为4.0以上的系统中有一个叫ITaskbarList的接口,故名思义,这个接口可用来控制任务栏上的按钮是否显示,你只要给出一个窗口的句柄和是否显示,完全不需考虑上面那此乱七八糟的规则.

代码:

void ShowInTaskbar(HWND m_hWnd,BOOL bshow)
{
?//在app的InitInstance中加入::CoInitialize(NULL);
?HRESULT hr;
?ITaskbarList *pTaskbarList;

?hr=CoCreateInstance(CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,
???IID_ITaskbarList,(void**)&pTaskbarList);
?
?pTaskbarList->HrInit();//MSDN中说在使用这个接口的其它方法之前得调用这个方法以便做一些初始化动作,我发现不调用这个方法也可以的.
?if(bshow){
??pTaskbarList->AddTab(m_hWnd);
?}
?else{
??pTaskbarList->DeleteTab(m_hWnd);
?}
?pTaskbarList->Release();
?//在app的ExitInstance中加入::CoUninitialize();

}

在需要的时候调用这个函数就可以了,第一个参数为窗口的句柄,第二个参数指明是在任务栏上是否显示按钮.

备注:这种方法功能强大,使用也较为简便,不过低版本的windows可能不支持.

以上三种方案大家可根据情况自行选择.

WinForm窗体隐藏任务栏图标和系统托盘显示图标 功能实现窗体如何不在Window任务栏中显示和隐藏,窗体最小化后在Window系统托盘中显示 阅读详情

相关推荐

VB程序隐藏到系统托盘的实现方法

系统托盘区域,通常指的是一块位于Windows操作系统任务栏右侧的小区域,用于容纳应用程序的系统图标。在用户界面中,它是一个隐藏的、不可见的区域,只有在特定情况下才会显示出来,例如当应用程序需要向用户展示一些通知或状态更新时。系统托盘在用户与计算机交互中扮演着至关重要的角色。它不仅是应用程序通知用户的中心点,而且也提供了程序快捷操作的途径。

weixin_42602241的博客 699

Form的ShowInTaskBar属性

Form的ShowInTaskBar属性 此改属性主要用于窗体不显示在下方任务栏中。 默认实例化一个窗体对象后,下方任务栏会出现一个小窗体。尤其是在扁平化涉及程序时,新弹出的窗体如果在任务栏中可见,那就让用户识别出这原来是个窗体而已。 所以,往往在扁平化涉及程序时,先设置窗体的此属性值为false。然后再在需要调用此窗体的位置Show()或ShowDialog()。这样就用户就看不破了。...

奔跑的QQEE的笔记 4370

STM32L431电池供电项目实战:用STOP2模式把功耗降到5uA以下(CubeMX配置详解)

本文详细介绍了如何在STM32L431电池供电项目中利用STOP2模式实现5μA以下的超低功耗设计。通过CubeMX配置、硬件优化和软件策略,成功将农业温湿度监测节点的待机功耗控制在4.7μA,确保CR2032电池供电下3年以上的工作寿命。文章包含完整的低功耗实现路径和实测数据,特别适合物联网边缘设备开发者参考。

weixin_30345577的博客 393

WPF中Window的ShowInTaskbar、Owner和Topmost属性

1. ShowInTaskbar:设置窗口是否在任务栏上有一席之位,默认为true,          当在父窗口上新开一个子窗口时,任务栏上就会出现两个窗口,所以当要实现          不管开启多少个窗口,在任务栏上都只显示一个窗口时,就需要将子窗口的ShowInTaskbar设为false;     **注意:              尽管这样会解决任务栏上出现多个窗口的情况,但...

weixin_33981932的博客 838

写给音响工程师的科普文章(二)——从模电角度去了解调音台话放

    上一篇讲到调音台第一级放大电路为差分放大器,关于差分放大器的基础知识可以参考以下资料:https://wenku.baidu.com/view/e6a46aaa2af90242a995e537 在教材中的差分放大器基本形式是这样子的,在实际电路中把RE电阻换成两个2倍RE,于是变成这样 然后我们现在来对比调音台中的差分放大器和教材中的有什么区别,我就拿yamaha 01V 96来说...

huanghaoAudio的博客 7702

Ubuntu20.04安全重启后WiFi图标消失?MT7922网卡驱动修复全攻略

本文详细解析了Ubuntu20.04安全重启后WiFi图标消失的问题,特别是针对MT7922网卡驱动失效的情况。通过诊断命令和分步解决方案,包括禁用PCIe ASPM、更新无线固件和升级HWE内核,帮助用户快速恢复网络连接。文章还提供了进阶排查技巧和系统优化建议,确保WiFi稳定运行。

weixin_29202687的博客 369

WPF 设置 ShowInTaskbar 对窗口最小化的影响

在 WPF 中,如果设置了 ShowInTaskbar 为 False 那么窗口将不会在任务栏显示。此时如果设置窗口最小化,那么窗口将会收起来作为没有任务栏时的显示方法 如下面代码 <Window x:Class="BekairlilearDujalgereno.MainWindow" xmlns="http://schemas.microsof...

lindexi 1026

英伟达 Jetson AGX Thor 官方入门教程(一)系统U盘安装

NVIDIA Jetson AGX Thor开发套件快速安装指南 本指南详细介绍了NVIDIA Jetson AGX Thor开发套件的安装流程。该套件搭载T5000 SoM,为物理AI和机器人应用提供强大支持。安装过程采用全新的JetPack 7.0方案,通过USB闪存盘即可完成BSP(Jetson Linux)安装,无需依赖Ubuntu主机。指南包含硬件开箱说明、两种配置模式(带显示器/无显示器)、详细的ISO镜像下载和USB制作步骤(推荐使用Balena Etcher工具),以及首次启动后的初始设置流

机器人控制与仿真应用 2867

VB的ShowInTaskbar功能分析以及用VC的实现 (转)

VB的ShowInTaskbar功能分析以及用VC的实现 (转)[@more@]  在VB中想要显示或隐藏一个窗口在任务栏上的按钮很容易,直接设定一个form的ShowInTabkbar属性即可。但在SDK中却不是一件易事,一个...

csd3176的博客 193

VCAST创建单元测试工程

选择工作目录,后面创建胡UT工程将会生成到这个目录。

qq_42851449的博客 2482

华为OD机试 - TLV格式(Python/JS/C/C++ 2025 C卷 100分)

两端通过TLV格式的报文来通信,现在收到对端的一个TLV格式的消息包,要求生成匹配后的(tag,length,valueOffset)列表。和需要匹配的n个tag对应的n行匹配结果,每一行由长度和偏移量组成。第二行:需要匹配的tag数量n(0 < n < 1000)后面N行:需要匹配n个tag值(十进制表示),递增排列。标签10(0A)存在,长度3,valueOffset=2。标签15(0F)长度4,valueOffset=2。标签14(0E)长度2,valueOffset=8。

学Java,找哪吒 2038

VB的ShowInTaskbar功能分析以及用VC的实现 如何隐藏对话框在工具栏上的按钮

在VB中想要显示或隐藏一个窗口在任务栏上的按钮很容易,直接设定一个form的ShowInTabkbar属性即可。但在SDK中却不是一件易事,一个窗口在什么情况下会在任务栏上显示一个按钮,在什么情况下不显示呢?这是有规定的:0,无论什么情况,要让一个窗口在任务栏上显示按钮的前提是该窗口是可见的.1.如果一个窗口是顶级窗口(也就是父窗口为NULL,也就是父窗口为桌面窗口),那么Windows将

ponydph的专栏 2613

040、未来展望:MLIR与编译技术的演进方向

MLIR不是又一个编译框架,它更像是一套“元框架”——提供构建专用编译工具的能力。未来几年,我们会看到更多垂直领域(自动驾驶、射频信号处理、生物计算)出现基于MLIR的专用编译器,它们可能不会挂“MLIR”的名字,但内核都是这套可扩展的IR基础设施。不要等MLIR“成熟”再用,现在就该把它当成一把瑞士军刀,先挑刀口最锋利的那个功能(比如图优化、循环变换)用起来。编译技术的演进不再是学术界的独角戏,而是越来越贴近实际生产中的异构、动态、领域专用需求。

m0_50546716的博客 175

ShowInTaskbar

Public Declare Function GetWindowLong Lib "user32" Alias _"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPublic Declare Function SetWindowLong Lib "user32" Alias _"SetWindowLongA"

Code Corner 1564

OpenHarmony Stage模型深度解剖:从Ability Kit到沙箱隔离的全链路底层原理

基于微内核架构,提供进程管理、内存管理、IPC通信等基础能力:包含V8引擎、ArkTS运行时、渲染引擎等核心组件:Ability Kit框架,提供应用生命周期管理、组件调度等能力:基于Stage模型的应用程序。

m0_67505153的博客 191

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

第一篇博客 Winform ShowInTaskbar

第一篇博客 Winform ShowInTaskbar 用于程序不在系统任务栏中显示 Form.ShowInTaskbar = false; 但当我在System.runtime.interopServices.Marshal.UnsafeAddrOfPinnedArrayElement之后使用ShowInTaskbar会让我的托管方法不加载。 若是在之前使用ShowInTaskbar则一切安好。 ...

weixin_44763429的博客 651

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

02-WPF_基础(二)

尺寸:三种,固定:30;按照比例:1* 2*;auto:按照内容自动调整。没有设置height width,平均分配。Grid控件格局复杂,与DockPanel控件结合,

qq_45085522的博客 1144

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Visual Studio C# WinForm开发入门(3):各种控件介绍

除了可以使用Windows自带的标准对话框外,用户还可以把自己设计的窗体定义成对话框。使用自定义对话框有以下几个要点。(1)将窗体的FormBorderStyle属性值设置为FixedDialog。(2)根据需要向窗体上添加控件。(3)使用窗体的ShowDialog方法显示窗体,即显示出对话框。

a只如初见的博客 2万+

隐藏和显示WINDOWS任务栏

procedure hideTaskbar;var wndHandle : THandle; wndClass : array[0..50] of Char; //char数组保存任务栏类名begin //StrPCopy(@wndClass[0], 'Shell_TrayWnd'); wndHandle := FindWindow(PChar('Shell_TrayWnd')...

agsmigb80093的博客 229

C#如何让主窗体再后台运行,不在windows窗体显示。

将主窗体的ShowlnTaskbar属性设为 False,将其 WindowState属性设为 Minimized,程序即可变成后台运行程序。

csdn2990的博客 1636

this.ShowInTaskbar = false;///使窗体不显示在任务栏

this.ShowInTaskbar = false;///使窗体不显示在任务栏

m0_38006057的博客 1134

C# winform wpf 实现窗体最小化时显示到(桌面右下角)系统托盘

1、新建窗体 2、设置窗体 ShowInTaskbar=false(以及icon的图标属性) 这时窗体不会在任务栏中展示了,但是窗体最小化的时候我这里会在桌面左下角或某个位置展示一小块区域。这时需要彻底隐藏窗体,最小化时隐藏窗体。 3、最小化时彻底隐藏窗体 this.StateChanged += (o, e) => { if (WindowState == WindowState.Minimized) this.Hide(); }; 4、win_loaded中加入代

weixin_53370274的博客 4190

WPF常用控件-Window

这里重点记录一些关键且容易忘记的属性,那些很常用的如Title啥的就不在这里一一说明了。:是否在任务栏中显示应用按钮,默认为True。Topmost:应用是否始终在所有应用的最上层,默认为False。Icon:设置应用窗体左上角的图标。Loaded:指定窗体加载函数,例如。Closing:指定窗体的关闭事件处理函数。:指定窗体的双击事件处理函数。

SchuylerEX的博客 954

WPF 解决ShowInTaskbar=false的窗口在失去焦点后无法找到的问题

效果如图所示 这是失去焦点后找不到窗口,并且无法与主窗体交互的情况 这是修复后可以正常交互的情况 解决方法是设置Owner属性 关键代码 //GetForegroundWindow API [DllImport("user32.dll")] static extern IntPtr GetForegroundWindow(); //从Handle中获取Window对象 static Window GetWindowFromHwnd(IntPtr hwnd) { var window = Hwn

L.的博客 791
上一篇: 飞鸟与鱼
下一篇: 屏蔽CHtmlView/WebBrower控件右键菜单技巧合集
_foo
博客等级 码龄23年 1粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值