【原创】终结版 窗口前置 方案 最前面 Z 轴 窗体 最前面

要真正的理解和解决这个问题,确实不容易。当我花了好几天时间才搞明白之后(每天都会纠结新的问题),我真想写一本书。

首先说明下让窗口前置的方法非常多,但现有(2011年1月26号)网上(公开中文论坛资料)的99%(还有1%我是没发现)的回答和论点都是不全面或者错误的。所以我觉得写这样一篇文章是由必要的,真理谈不上,就希望给大家点参考,防止走弯路。

以下是我自己钻研出来的经过BCB RAD测试得到的结论。(过程就不说了,两个字:辛酸)

一、原理讨论。(想直接看“实现从属窗体前置”的翻到二部分)

有必要了解Windows 窗口机制的Z 轴坐标的原理才能再实践中更上一层楼。(一部分最后Note里会讲到)

BCB-RAD(其他没有尝试,可能只是部分适用)里要让一个窗体(设为Form)能和任务管理器一样在所有窗口之上,必须具有两个条件:

1.必须是父窗体(主窗体),换句话说Form没有parent form。——这里要说明的是,父窗体可以理解为主窗体MainForm(只是在一定范围内可以,其本质也不相同),但是子窗体不能理解为从属窗体,至于为什么,我只知道MDI子窗体和从属窗体是完全的两回事,没有深究,这里不阐述。

2.必须要用WindowAPI 或者是窗体属性来设置Form的EXSTYLE为TOPMOST。(BCB提供的SetZOrder什么的都没有用)以下是两种方式:

1)API-SetWindowPos:在窗体初始化函数__fastcall TForm::TForm(TComponent* Owner) : TForm(Owner) 里或者Create函数里加上

 

SetWindowPos(带设置窗体的句柄,ExStyle(HWND_TOPMOST),坐标x,y,xx,yy,Style);

2)参数传递法:添加一个参数传递函数:

在.h文件里TForm类__published成员下添加:

 void   __fastcall CreateParams(TCreateParams   &Param) ;

表示这个参数将在窗体创建的时候传递给窗体,使之按这个参数创建窗口

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值