社区
Delphi
帖子详情
顶层窗口与任务栏
larryuan
2000-05-30 02:59:00
form1运行后创建form2,想让form2在顶层,
设置form2的formstyle为fsstayontop,
但只是在form1的顶层,其他程序都可以覆盖它。
又:form2.ParentWindow:=GetDesktopWindow();
可以实现顶层,但form2失去焦点,
而且在任务栏又出现了一个form2的按钮。
如何解决?
解决form2在顶层或是使form2不出现在任务栏均可。
...全文
366
12
打赏
收藏
顶层窗口与任务栏
form1运行后创建form2,想让form2在顶层, 设置form2的formstyle为fsstayontop, 但只是在form1的顶层,其他程序都可以覆盖它。 又:form2.ParentWindow:=GetDesktopWindow(); 可以实现顶层,但form2失去焦点, 而且在任务栏又出现了一个form2的按钮。 如何解决? 解决form2在顶层或是使form2不出现在任务栏均可。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ExitWnidows
2001-08-08
打赏
举报
回复
up
ace
2000-06-01
打赏
举报
回复
CreateParams是在form的CreateWindow之前调用的,不能再调用了..
还会出现在任务栏,应该是你的form2不是toolwindow吧.
还有要焦点的话
在form2的formshow里
SetWindowPos( ... HWND_TOPMOST...)
SetForegroundWindow(...)
larryuan
2000-06-01
打赏
举报
回复
to ace:
在程序中我需要调用updatewindow,
这样form2又出现在任务栏上。
是不是需要在updatewindow前先调用CreateParams,
那如何获得它的参数呢?
larryuan
2000-06-01
打赏
举报
回复
to ace:
谢谢,这样可以基本解决了。但form2还是没有焦点。
ace
2000-06-01
打赏
举报
回复
我的方法:
直接设置form2的parentwindow是不行的
应该重载CreateParams(var Params: TCreateParams),就可以使form2不出现在
任务栏
procedure CreateParams(var Params: TCreateParams); override;
procedure TDragForm.CreateParams(var Params: TCreateParams);
begin
Inherited;
Params.ExStyle := Params.ExStyle or WS_EX_TOOLWINDOW;
Params.WndParent := GetDeskTopWindow;
end;
larryuan
2000-05-31
打赏
举报
回复
to lin:
这样整个应用就在顶层了,但form1还是可以盖住form2,
而且我只想让form2在定层,其它程序可以盖住form1,
类似网络蚂蚁的窗口。
这该如何实现呢?
larryuan
2000-05-31
打赏
举报
回复
to patpat:
试过好象不行
radish
2000-05-31
打赏
举报
回复
可以实现,很久一起我试过,你看看下面的文章再改改就可以了
做一个多主窗口的应用程序
成都 谢慧强 xiehuiqiang@21cn.com
用过DreamWeaver的人都会发现DreamWeaver将每一个编辑的文件显示在任务栏上,并且用户任意关闭一窗口而不影响其他窗口,好象每一个窗口间没有关联,没有主窗口似的。但我们也能发现其实这些窗口间也有数据是共享的,如存盘的路径。
经过研究我发现其实这些窗口其实是属于同一程序的,并且实现方法也非常的简单。下面我用Inprise公司的C++ Builder为大家举一个简单的例子。
首先我们创建一个普通的应用程序。在这个程序中包含两个Form,其中Form1为主窗口,我们将Form2设为不由应用程序自动创建。在Form1中加入一新的Public的属性: int FormCount; 此属性用于记录系统建立的From2的实例的个数,在Form1的OnCreate事件中加入如下代码:
int i=GetWindowLong(this->Handle,GWL_STYLE);
TForm2 *F,*G;
F=new TForm2(NULL);
G=new TForm2(NULL);
F->ParentWindow=GetDesktopWindow();
F->Caption="F";
G->ParentWindow=GetDesktopWindow();
G->Caption="G";
this->FormCount=2;
SetWindowLong(G->Handle,GWL_STYLE,i);
SetWindowLong(F->Handle,GWL_STYLE,i);
F->Show();
G->Show();
//注意,改变FORM的ParentWindow和GWL_STYLE FORM的HANDLE值将改变
其中GetWindowLong,SetWindowLong为获取/设置Window属性的API函数,具体请看C++ Builder带的Win32帮助。然后运行程序,我们就能发现程序在任务栏上显示了属于此程序的三个任务条。 接下来我们要做的事情有两个:
1、 隐藏Form1及Application
2、 让Form2的实例关闭应用程序
实现第一件事情的方法在网上很多地方都提到了,即修改WinMain函数下面是具体的代码(粗斜体为加入的代码):
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->ShowMainForm=false;
ShowWindow(Application->Handle, SW_HIDE);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
在这个地方要注意的是光用"Application->ShowMainForm=false;"是不能隐藏主Form(Form1)的,必须将Form1的Visibled属性变为false。 实现第二件事情需要用到Application的Terminate方法(结束应用程序)。我们只要在TForm2的OnClose事件中简单加入以下几句程序:
if (Form1->FormCount>1)
Form1->FormCount--;
else
Application->Terminate();
运行程序,你就能发现程序在有任务拦上有两个提示,窗口F及窗口G,而且这两个窗口看起来就象独立的应用程序。 至此,一个多主窗口程序就做完了,是不是很简单呢。
Lin
2000-05-31
打赏
举报
回复
Larryuan:
Application.Handle是程序的主窗口,其他所有的窗口都是他的子窗口。使用SetWindowPos(Application.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);应该可以达到目的。
patpat
2000-05-30
打赏
举报
回复
用Api: ShowWINDOW试试 设为TOPMOST
larryuan
2000-05-30
打赏
举报
回复
这个handle是form1还是Application的一个内置窗口?
如何用这个handle?
Lin
2000-05-30
打赏
举报
回复
很好解决:设置Application.Handle所代表的窗口Always on top就可以了。
Qt之程序最小化托盘显示及操作
对于GUI程序,如果想要实现当最小化时,程序从
任务栏
消失,在系统托盘显示一个图标,表示此程序,并能在托盘内通过双击或者菜单使程序界面恢复。
常用MFC界面工具菜单的添加
1、往基于对话框的程序添加菜单: 1 ...8、隐藏程序在
任务栏
的图标: 5 9、无title对话框的移动: 5 10、设置对话框为最
顶层
: 6 11、向对话框
窗口
添加右键菜单: 6 12、托盘菜单不点击不能消失的解决办法: 6
智慧政务专题-如何编制政务
顶层
规划
针对以上智慧政务建设过程中的共性问题和障碍,需要通过政务
顶层
规划来统筹设计解决,本课程以实际地级城市政务项目
顶层
规划案例为蓝本分享,抛砖引玉,以期帮助大家提升项目
顶层
统筹能力和减少项目推进阻力。...
《精通Visual C++实效编程280例》光盘源代码
1.22 实例22:枚举桌面所有
顶层
窗口
第2章 菜单和光标 2.1 实例23:动态添加和删除菜单项 2.2 实例24:在系统菜单中添加和删除菜单项 2.3 实例25:禁用关闭按钮 2.4 实例26:启用和禁用...
VC++ 20个窗体编程实例
内容索引:VC/C++源码,界面编程,透明窗体 VC++ 20个窗体编程实例源码,既简单又实用,这些实例主要有: 如何通过HWND获得CWnd指针 如何获得应用程序主
窗口
的指针... 如何获得
任务栏
窗口
如何实现动画
窗口
……
Delphi
5,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章