[学习笔记]Windows窗口概念汇总(转载)

 

从属窗口在z次序中总是在它的属主窗口的上面。

windows系统在销毁属主窗口时自动地销毁从属窗口。

从属窗门在其属主窗口最小化时是被隐藏

只有覆盖或弹出窗口可以是一个属主窗口,子窗口则不能。

应用程序创建一个从属 窗口是通过在创建具有WS_OVERLAPPEDWS_POPUP风格的窗口时,把函数CreateWindowEx的参数hwndParent设置成属主窗门的句柄;参数hwndParent必须标识一个覆盖或弹出窗口。如果hwndParent标识的是一个子窗口,windows系统就会把所属关系赋给这个子窗口的顶层父窗口。创建了从属窗口之后,应用程序就不能再把窗口的

所属关系传给别的窗口。

对话框和消息框一般是从属窗口,因此应用程序在调用一个函数创建对话框或消息时要指定的属主窗口

程序可以通过设置GW_OWNER标志来调用GetWindow函数来检索属主窗口的句柄。

被禁止的窗口

窗口是可以被禁止的,被禁止的窗口不再接收键盘或鼠标输入,们它能接收来自其它窗口,或是来自其它应用程序以及windows系统的消息。应用程序禁止一个窗口是防止用户使用这个窗口,例如,应用程序可能会禁止对话框中的一个按钮防止用户对它的选择。应用程序可在任何时候再允许一个被禁止的窗口,允许一个窗口也就恢复了正常的输入。缺省情况下,一个窗口在刚被创建时是被允许的,但程序能够通过设置WS_DISABLED风格来禁止一个新窗口。应用程序通过函数EnableWindow允许或禁止一个存在的窗口,windows系统在窗口的允许状态将要改变时向它发送一条WM_ENABLE消息.应用程序使用函数IsWindowEnabled以确定—个窗口是否被允许。如果一个于窗口被禁止,windows系统就会把这个子窗口的鼠标输入传给其父窗口,父窗口通过这条消息确定是否需要允许这个子窗口。

在同一时间只有一个窗口能够接收键盘输入,也就是说这个窗口拥有键盘焦点。如果应用程序用函数EnableWindow来禁止一个拥有焦点的窗口.这个窗口在被禁止的同时也失去了键盘焦点,EnableWindow把键盘焦点设置成NULL,意思是说没有窗口具有焦点。如果一个子窗口或其它的子孙窗口有了键盘焦点、子孙窗口也会在父窗口被禁止时失去键盘焦点。

前台窗口和后台窗口

每一个进程可运行多个线程,每个线程部能创建窗口。创建正在使用窗口的线程称之为前台线程,这个窗口就称之为前台窗口。所有其它的线程都是后台线程.由后台线程所创建的窗门叫后台窗口.

每一个线程都有一个优先等级,它决定了该线程占有cpu的时间。尽管应用程序能够设留它的线程的优先等级,但通常前台线程具有比后台线程稍高的优先等级.正因为如此,前台线程所占cpu时间比后台线程要长。通常,前台线程具有的优先级是9,而后台线程是7。

用户是通过单击一个窗口、使用alt+tab或alt+esc组合键来设置前台窗口,应用程序则用函数SetForegroundWindow设置前台窗口如果新的前台窗口是一个顶层窗口,那么windows系统就激活它,换句话说,windows系统激活相应的顶层窗口。应

用程序通过函数GetForegroundWindow来检取前台窗口的句柄。

显示状态

在任何时候,窗口可以是活动的或是被禁止的;隐藏的或是可见的;最小化、最大化或是被恢复,这些统称为窗口的显示状态。

活动窗口

活动窗口是应用程序的顶层窗口,也就是当前使用的窗口,为了使用户能很容易地识别活动窗口,windows系统把它放在z次序的顶部,并把标题栏和边框的颜色设置成系统定义的活动窗口的颜色。只有个顶层窗口可以是活动窗口.如果用户使用的是一个子窗口,windows系统就激活与这个子窗口相应的顶层窗口。

任何时候系统中只能有一个项层窗口是活动的。用户是通过单击窗口(或其中的一个子窗口)、使用alt+esc或alt+tab组合键来激活一个顶层窗口,应用程序则调用函数SetActiveWindow来激活一个顶层窗口,还有另外一些函数windows系统用来激活不同的顶层窗口包括:SetWindowPos, DeferWindowPos, SetWindowPlacement,  DestroyWindow.。尽管一个应用程序也能在任何时候激活一个不同的顶层窗口,但为避免困惑用户,应该只根据用户的要求做出响应。应用程序通过函数GetActiveWindow来检取活动窗口的句柄。

如果活动状态从—个应用程序的某个顶层窗口改变到另一个应用程序的顶层窗口,windows系统就要向两个应用程序发送wM AcrIvATEAl)P消息来通知它们。如果是在同一个应用程序的不同顶层窗门之间改变活动特性,windows系统就向两个窗口发送WM_ACTIVATE消息。

可见性

窗口既可以是可见的,也可以被隐藏。windows系统只在屏幕上显示一个可见的窗口,对隐藏的窗口只是不画它罢了。如果一个窗口是可见的,用户可通过窗口进行输入以及查看窗口的输出。如果窗口是被隐藏着的,则相当于被有效地禁止了。隐藏的窗口可处理来自windows系统或其它窗口的消息,但它不能处理用户的输入或是显示输出。应用程序在创建某项口时就设置了它的可见状态,后面应用程序还可以改变其可见状态。

如果为窗口设置了WS_VISIBLE风格,则窗口是可见的。通常,除非应用程序设置了WS_VISIBLE风格.否则函数CreateWindowEx只是创建了一个隐藏的窗口。应用程序一般是在创建了一个窗口之后设置WS_VISIBLE风格,主要是不让用户看到创建过程的细节。例如,应用程序在定制窗口的外观时,新窗口是被隐藏的。如果在函数CreateWindowEx中指定了WS_VISIBLE风格,windows系统就会在创建了窗口之后,在显示该窗口之前向它发送WM_SHOWWINDOW消息.

应用程序可通过函数IsWindowVisible确认一个窗口是否可见,应用程序通过函数ShowWindow, SetWindowPos, DeferWindowPos, or SetWindowPlacement显示(使可见)或隐藏一个窗口,这些函数是通过设置或删除窗口的WS_VISIBLE风格来显示或隐藏窗口的,它们也在显示或隐藏窗口之前向其发送WM_SHOWWINDOW消息。

如果一个属主窗口被最小化了,windows系统会自动隐藏相应的从属窗口。同样,在一个属主窗口被恢复时,windows系统也会自动地显示相应的从属窗口。这两种情况下.windows系统都要在隐藏或显示拥有窗口之前,向其发送WM_SHOWWINDOW消息。偶尔,应用程序也有可能在不最小化或隐藏属主窗口情况下需要隐藏从属窗口.那么应用程序就使用函数ShowOwnedPopups,这个函数设置或删除所有从属窗口的WS_VISIBLE风格,并在隐藏或显示拥有窗口之前向它们发送WM_SHOWWINDOW消息.隐藏一个属主窗口并不影响其拥有窗口的显示状态。

如果一个父窗口是可见的,则与之相应的子窗口也是可见的。同样,在父窗口被隐藏时,子窗口也被隐藏。最小化父窗口也不影响子窗口的可见状态.这就是说,子窗口也随着父窗口被最小化,但其WS_VISIBLE风格依然没有改变.

尽管某一个窗口具有WS_VISIBLE风格,用户也有可能在屏幕上看不到这个窗口,因为其它的窗口可能会完全盖住了它,或是由于移动而超出了屏幕的边沿。一个可见的子窗口也是遵循由父子关系所建立的裁剪规则的.如果窗口的父窗口是不可见的,那么它也是不可见的。因为子窗口是相对于其父窗口的左上角,如果父窗口的移动超出了屏幕的边沿,子窗口也有可能这样。例如,尽管子窗口及其父窗口都具有WS_VISIBLE风格,但如果用户把父窗口移动到远远超出了屏幕的边沿,用户就不能看到子窗口。

最小最大化和恢复窗口

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值