Delphi:什么是Application.Handle?
什么是TApplication.Handle?
>它从哪里来? Delphi帮助说:
如果我专注于单词“应用程序的主窗体的窗口句柄”,我认为这意味着应用程序的主窗体的窗口句柄,然后我可以比较: >“窗体句柄的主窗体的应用程序”,带 但是他们不一样: Application.MainForm.Handle: 11473728 Application.Handle: 11079574 那么什么是Application.Handle呢? >它从哪里来? 真正的问题是:Application.Handle存在的设计理由是什么?如果我能理解为什么,如何应该变得明显。 更新通过游戏的二十个问题了解: 在谈论解决方案使窗口出现在任务栏通过使其所有者null,Peter Below in 2000 said:
>为什么一个模态形式最终被卡在其他形式之后? 他还谈到了通过添加WS_EX_APPWINDOW扩展样式,使用新的Windows扩展样式强制窗口显示在任务栏上(当使其不拥有的正常规则不够,不切实际或不受欢迎时) procedure TForm2.CreateParams(var Params: TCreateParams); begin inherited CreateParams( params ); Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; end; 但后来他警告:
当表单的所有者仍然是Application.Handle时,谁将所有的表单带到前端。应用程序这样做吗?为什么要这样做?而不是这样做,不应该不是这样做吗?不这样做的缺点是什么?我看到这样做的缺点(系统菜单不正常工作,任务栏按钮缩略图不准确,Windows?外壳不能最小化窗口。 在另一个处理应用程序的帖子中,Mike Edenfield says that the parent window sends other window’s their minimize,maximize and restore messages:
如何最小化/最大化/恢复消息的Windows?窗口不会到我的窗口?这是因为发送到窗口的消息被Windows?发送到窗口的所有者?在这种情况下,Delphi应用程序中的所有表单都是由应用程序“拥有”的?这不意味着使所有者null: procedure TForm2.CreateParams(var Params: TCreateParams); begin inherited; Params.WndParent := 0; //NULL end; 将删除应用程序,它的窗口句柄干扰我的形式,Windows应该再次发送我我的最小化/最大化/恢复消息? 也许如果我们比较和对比现在一个“正常的”Windows应用程序做事情,Borland最初设计Delphi应用程序做事情 – 对于这个Application对象和它的主循环。 >什么解决方案是Application对象解决? 显然,Borland意识到他们初始设计的缺陷。他们的初始设计是什么,解决什么问题,缺陷是什么,重新设计是什么,以及如何解决问题? 解决方法
应用程序窗口的原因有一点sordid历史。当开发Delphi 1时,我们知道我们想要使用“SDI”(分散在整个桌面上的窗口)ui模型。我们还知道Windows吸引(并仍然)在那个模型。但是我们也注意到,当时的Visual Basic采用了这个模型,它似乎工作得很好。经过进一步的研究,我们发现VB使用了一个特殊的“隐藏”停车窗口作为“所有者”(Windows模糊了父和所有者的概念,但有区别是类似于VCL)所有其他可见窗口。
这是我们如何解决“问题”,其中包含主菜单的窗口很少集中,所以处理Alt-F文件菜单根本不工作。通过使用这个中央停车窗口作为中介,我们可以更容易地跟踪和路由消息到适当的窗口。 这种布置也解决了另一个问题,其中通常多个顶级窗口是完全独立的。通过使应用程序处理所有这些窗口的“所有者”,他们都将一致行动。例如,您可能已经注意到,当您选择任何应用程序窗口时,所有应用程序窗口移动到前面并保持它们相对于彼此的z顺序。这也将使应用程序最小化和恢复为功能分组。 这是使用这个模型的结果。我们可以手动完成所有这些工作,以保持事情的直线,但设计哲学是不重新创造Windows,而是在我们可以利用它。这也是为什么一个TButton或TEdit真的是一个Windows“用户”BUTTON和EDIT窗口类和样式,为什么。 随着Windows的发展,“SDI”模式开始失去了青睐。事实上Windows本身开始变得“??敌对”的那种风格的应用程序。从Windows Vista开始,继续到7,用户shell似乎不适合与使用停车窗口的应用程序。所以,我们开始在VCL中洗牌,以消除停车窗口并将其功能移动到主窗体中。这提出了几个“鸡和鸡蛋”问题,因此我们需要在应用程序初始化中足够早地提供停车窗口,以便其他窗口可以“附加”到它,但主窗体本身可能不会很快构建。 TApplication必须跳过几个圈来让这个工作,并有一些微妙的边缘情况下引起问题,但大多数的问题已经解决了。然而,对于任何应用程序,您向前移动,它将保持使用旧的停车窗口模型。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |