QQ登陆画面的最小化显示机制(使程序不在任务栏显示)
2013-11-06 16:44
316 查看
2007-05-21 19:17
怎么使自己的程序不在任务栏显示?去网上找一下答案,关于Delphi的无非是以下一句:
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOWINDOW);
在Application窗口的窗口属性中添加工具窗口属性,这样它就不会在任务栏显示了.在Delphi中,主窗口最小化的时候,实际上应该是隐藏了,只有Application窗口显示出来,这时候在屏幕的左下角就会出现最小化的一个标题栏:
系统菜单的样子:
我感觉这样很不好看,这就是标准的Windows中的ToolWindow.QQ的登陆界面在运行时也不出现在任务栏,但是它最小化之后是什么样子呢?
系统菜单的样子:
这样比ToolWindow风格漂亮的多了,但是这是怎么实现的呢?我们来研究研究.使用VC的Spy++工具找到登陆界面窗口
这是一个对话框(#32770)的窗口,试着定位到它的密码框,发现这个编辑框居然是个对话框!怪不得功能这么强大呢:
还有"隐身登陆"和"自动登陆"两个复选框居然是Button:
不过这不是我们要关注的,下面我们看一写登陆界面窗口的窗口属性:
发现登陆界面是有一个父窗口的,也就是说登陆界面不是单独存在的,它很有可能只是一个弹出窗口,点击父窗口的句柄,查看父窗口的属性:
这个父窗口是一个不可用的不可见的后台窗口,我们使用ShouWindow函数把它强制显示出来:
图中的黑线标识的部分是父窗口句柄,看到左上角那个标题为ChenkIdle的窗口了吧,那个就是父窗口,因为正常使用中它不会显示,所以连背景刷子都没有定义,它的界面是不重新绘制的,它只是一个有标题的父窗口而已.父窗口显示以后,尝试用鼠标去激活它,发现登陆界面窗口在闪烁,登陆界面分明就是一个模态弹出的窗口.父窗口率先启动,然后把登陆界面模态显示出来,自己始终不可见.我们使用Delphi尝试模拟这种效果,首先设计不可见的也不在任务栏显示的父窗口,窗体的大小无关紧要:
添加一个Form2为弹出窗口,这个窗口会由Form1弹出来,和QQ登陆界面的地位相同,注意在这个窗口关闭时通知它的父窗口关闭:
下面是Form1弹出Form2的问题,直接在Form1的创建过程中弹出Form2这样不行,因为这样的效果会比较像Form2成了Application的主窗体,最小化之后依然是ToolWindow的样子.还容易想到的是在Form1的OnShow中添加代码,但是这样也行不通,因为Form1根本就不会显示出来,它是不可见的.这里我采用了使用定时器的办法,在Form1中添加一个定时器,响应的时间间隔很小,而且只需响应一次就够了.在响应代码中使这个不再有用的定时器无效,然后再弹出Form2:
注意在这里Form在动态创建的,首先要把它从工程的自动创建窗体列表中把它删除.这样编译运行我们的程序,最小化它,发现这正是我们想要的效果:
多运行几个看看,最小化的小窗口的排列是有序的,这些都由系统自动完成:
QQ登陆画面的最小化显示机制(使程序不在任务栏显示)
本页例程下载怎么使自己的程序不在任务栏显示?去网上找一下答案,关于Delphi的无非是以下一句:
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOWINDOW);
在Application窗口的窗口属性中添加工具窗口属性,这样它就不会在任务栏显示了.在Delphi中,主窗口最小化的时候,实际上应该是隐藏了,只有Application窗口显示出来,这时候在屏幕的左下角就会出现最小化的一个标题栏:
系统菜单的样子:
我感觉这样很不好看,这就是标准的Windows中的ToolWindow.QQ的登陆界面在运行时也不出现在任务栏,但是它最小化之后是什么样子呢?
系统菜单的样子:
这样比ToolWindow风格漂亮的多了,但是这是怎么实现的呢?我们来研究研究.使用VC的Spy++工具找到登陆界面窗口
这是一个对话框(#32770)的窗口,试着定位到它的密码框,发现这个编辑框居然是个对话框!怪不得功能这么强大呢:
还有"隐身登陆"和"自动登陆"两个复选框居然是Button:
不过这不是我们要关注的,下面我们看一写登陆界面窗口的窗口属性:
发现登陆界面是有一个父窗口的,也就是说登陆界面不是单独存在的,它很有可能只是一个弹出窗口,点击父窗口的句柄,查看父窗口的属性:
这个父窗口是一个不可用的不可见的后台窗口,我们使用ShouWindow函数把它强制显示出来:
图中的黑线标识的部分是父窗口句柄,看到左上角那个标题为ChenkIdle的窗口了吧,那个就是父窗口,因为正常使用中它不会显示,所以连背景刷子都没有定义,它的界面是不重新绘制的,它只是一个有标题的父窗口而已.父窗口显示以后,尝试用鼠标去激活它,发现登陆界面窗口在闪烁,登陆界面分明就是一个模态弹出的窗口.父窗口率先启动,然后把登陆界面模态显示出来,自己始终不可见.我们使用Delphi尝试模拟这种效果,首先设计不可见的也不在任务栏显示的父窗口,窗体的大小无关紧要:
添加一个Form2为弹出窗口,这个窗口会由Form1弹出来,和QQ登陆界面的地位相同,注意在这个窗口关闭时通知它的父窗口关闭:
下面是Form1弹出Form2的问题,直接在Form1的创建过程中弹出Form2这样不行,因为这样的效果会比较像Form2成了Application的主窗体,最小化之后依然是ToolWindow的样子.还容易想到的是在Form1的OnShow中添加代码,但是这样也行不通,因为Form1根本就不会显示出来,它是不可见的.这里我采用了使用定时器的办法,在Form1中添加一个定时器,响应的时间间隔很小,而且只需响应一次就够了.在响应代码中使这个不再有用的定时器无效,然后再弹出Form2:
注意在这里Form在动态创建的,首先要把它从工程的自动创建窗体列表中把它删除.这样编译运行我们的程序,最小化它,发现这正是我们想要的效果:
多运行几个看看,最小化的小窗口的排列是有序的,这些都由系统自动完成:
相关文章推荐
- 如何使对话框程序启动以及主窗口最小化时不在任务栏上显示
- 如何使对话框程序启动以及主窗口最小化时不在任务栏上显示
- MFC窗口程序启动时最小化到托盘、不在任务栏中显示、显示时在右小角
- 在VC中实现程序不在任务栏显示按钮, 标题栏与菜单栏的不显示
- 制作一个不在任务栏及任务列表中显示的幽灵程序
- 程序图标不在任务栏上显示
- 让程序不在任务栏小按钮显示
- win10 程序最小化不在任务栏了?在左下角
- MFC 使程序不在任务栏显示
- 让程序运行时不在任务栏显示图标
- WPF程序也可以很轻松的实现类似QQ那样最小化到任务栏的功能。
- WPF 程序点击任务栏图标显示隐藏最小化窗体
- MFC让程序运行时不在任务栏显示
- Windows XP中当最小化程序时,无法在任务栏显示图标的问题
- 用于修复XP中最小化程序 在任务栏显示图标的vbs脚本
- C#WinForm程序不不在任务栏显示的处理方法
- C# WinForm程序中不在任务栏显示的处理方法
- C#WinForm程序不不在任务栏显示的处理方法
- 教程-隐藏/显示任务栏-程序不在任务显示-全面控制Windows
- 程序不在任务栏显示的处理