谈谈父窗口和所有者窗口

上传人:daj****de2 文档编号:149758435 上传时间:2022-09-07 格式:DOCX 页数:11 大小:129.40KB
收藏 版权申诉 举报 下载
谈谈父窗口和所有者窗口_第1页
第1页 / 共11页
谈谈父窗口和所有者窗口_第2页
第2页 / 共11页
谈谈父窗口和所有者窗口_第3页
第3页 / 共11页
资源描述:

《谈谈父窗口和所有者窗口》由会员分享,可在线阅读,更多相关《谈谈父窗口和所有者窗口(11页珍藏版)》请在装配图网上搜索。

1、谈谈父窗口和所有者窗口2007年07月13日 星期五 下午08:55谈谈父窗口和所有者窗口 一、概念和区别在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表。系统的窗口管理 器通过这个list来获取窗口信息和管理每个窗口。这个数据结构中有四个数据用来构建list,即child、 sibling、parent、owner 四个域。所以我们可以看到,窗口之间的关系有两种:owner-owned关系和parent-child关系。前者称之 为拥有/被拥有关系,后者称之为父/子关系。在这篇文字中,我把owner窗口称之所有者窗口。换句话 说,一个窗口在有一个父窗口(pare

2、nt)的同时,还可能被不同的窗口拥有(owner),也可以有自己的 子窗口(child)。在MFC的CWnd类中,所有者窗口保存在m_hWndOwner成员变量中,父窗口则保存在 m_hParent中,但是这两个值并不一定和窗口对象数据结构中的 值相对应。窗口之间的关系,决定了窗口的外在表现。比如显示、销毁等。如果一个窗口数据的owner域非NULL,则它和该窗口建立了 owner-owned关系,拥有关系决定了:(1)被拥有的窗口永远显示在拥有它的那个窗口的前面;(2)当所有者窗口最小化的时候,它所拥有的窗口都会被隐藏;(3)当所有者窗口被销毁的时候,它所拥有的窗口都会被销毁。需要注意的是,

3、隐藏所有者窗口并不会影响它所拥有的窗口的可见状态。比如:如果窗口A拥有 窗口 B,窗口 B拥有窗口 C,则当窗口 A最小化的时候,窗口 B被隐藏,但是窗口 C还是可见。如果一个窗口的parent域非NULL,则它和该窗口之间就建立了 parent-child关系。父子决定了:(1)窗口在屏幕上面的显示位置。父窗口提供了用来定位子窗口的坐标系统,一个子窗口只能显 示在它的父窗口的客户区中,之外的部分将被裁减。这个裁减法则决定了如果父窗口不可见,则子窗口 肯定不可见。如果父窗口移动到了屏幕之外,子窗口也一样。(2)当父窗口被隐藏时,它的所有子窗口也被隐藏。(3)父窗口被销毁的时候,它所拥有的子窗口

4、都会被销毁。注意!最小化父窗口不会影响子窗口的可见状态,子窗口会随着父窗口被最小化,但是它的 WS_VISIBLE属性不会变。Windows系统为什么要使用两种关系呢?这是为了更加灵活的管理窗口。举个例子:组合框 (combobox)的下拉列表框(list box)可以超出组合框的父窗口的客户区,这样有利于显示,因此系 统创建该list box的时候,是作为控制台窗口(desktop window)的子窗口,它的父窗口 hWndParent 是NULL,这样,list box的显示区域是限制在整个屏幕内,但是该list box的所有者却是组合框的第 一个非子窗口祖先(比如对话框),当它的所有者

5、窗口销毁后,该list box自动销毁。另外,窗口之间消息的传递也和窗口关系有关,通常,一个窗口会把自己的通知消息发送给它的 父窗口,但不全是这样,比如,CToolBar发送通知消息给它 的所有者窗口而不是父窗口。这样以来, 就可以允许工具条作为一个窗口(比如一个OLE容器程序窗口)的子窗口的同时,能够给另一个窗口 (比如in-place框架窗口)发送消息。至于某类窗口到底是把消息发送给谁,是父窗口还是所有者窗口, microsoft并没有明示。还有,在现场(in-place)编辑的情况下,当一个server窗口激活或者失效 的时候,框架窗口所拥有的子窗口自动隐藏或者显示,这也是通过直接调用S

6、etOwner函数实现的。二、窗口类型的说明和限制(1)控制台窗口 (desktop window)。这是系统最早创建的窗口。可以认为它是所有WS_OVERLAPPED类 型窗口的所有者和父窗口。Kyle Marsh在他的文章“Win32 Window Hierarchy and Styles”中指出, 当系统初始化的时候,它首先创建控制台窗口,大小覆盖整个屏幕。所有其它窗口都在这个控制台窗口 上面显示。窗口管理器所用的窗口 list中第一个就是这个控制台。它的下一层窗口叫做顶级窗口(top-level),顶级窗口是指所有非child、没有父窗口,或者父窗口是desktop的窗口,它们没有 W

7、S_CHILD 属性。(2)WS_OVERLAPPED类型的窗口可以显示在屏幕的任何地方。它们的所有者窗口是控制台。Overlapped类型的窗口属于顶级窗口,一般作为应用程序的主窗口。不论是否给出了 WS_CAPTION、WS_BORDER属性,这类窗口创建后都有标题栏和边框。Overlapped窗口可以拥有其它顶 级窗口或者被其它顶级窗口所拥有。所有overlapped窗口都有WS_CLIPSIBLINGS属性。系统可以自动 设置overlapped窗口的大小和初始位置。当系统shuts down的时候,它将销毁所有overlapped类型的窗口。(3)WS_POPUP类型的窗口可以显示在

8、屏幕任何地方,它们一般没有父窗口,但是如果明确调用 SetParent,这类窗口也可以有父窗口。WS_POPUP类型的窗口的所有者是在CreateWindow函数中通过设置hWndParent参数给定的,如果 hWndParent不是子窗口,则该窗口就成为这个新的弹出式窗口的owner,否则,系统从hWndParent的 父窗口向上找,直到找到第一个非子窗口,把它作为该弹出窗口的owner。当owner窗口销毁的时候, 系统自动销毁这个弹出窗口。Pop-up类型的窗口也属于顶级窗口,它和overlapped窗口的主要区别是弹出式窗口不需要有标 题栏,也不必有边框。弹出式可以拥有其它顶级窗口或者

9、被拥有。所有弹出式窗口也都有 WS_CLIPSIBLINGS 属性。(4)所有者窗口(owner)只能是overlapped或者pop-up类型的窗口,子窗口不能是所有者窗口, 也就是说子窗口不能拥有其它窗口。overlapped或者pop-up类型的窗口在拥有其它窗口的同时,也可以被拥有。在使用 CreateWindowEx 创建 WS_OVERLAPPED 或者 WS_POPUP 类型的窗口时,可以在 hwndParent 参数中给出它的所有者窗口的句柄。如果hwndParent给出的是一个child类型的窗口句柄,则系统自 动将新创建窗口的所有权交给该子窗口的顶级父窗口。在这种情况下,参

10、数hwndParent被保存在新建 窗口的parent域中,而它的所有者窗口句柄则保存在owner域中。(5)缺省情况下,对话框和消息框属于owned窗口,除非在创建它们的时候明确给出了 WS_CHILD属 性,(比如对话框中嵌入对话框的情形)否则由系统负责给它们指定owner窗口。需要注意的是,一旦创建了 owned类型的窗口,就无法再改变 其所有关系,因为WIN32没有没有提供改变窗口所有者的方法。而且在Win32中,由于有多线程的存在,所以要注意保证父子窗口或者owner/owned窗口要同属 于一个线程。(6)对于WS_CHILD类型的窗口,它的父窗口就是它的所有者窗口。一个子窗口的父

11、窗口也是在 CreateWindow函数中用hWndParent参数指定的。子窗口只能在父窗口的客户区中显示,并随父窗口一 起销毁。子窗口必须有一个父窗口,这是它和overlapped以及pop-up窗口之间的主要区别。父窗口可 以是顶级窗口,也可以是其它子窗口。三、几个相关函数的说明(1) 获取/设置所有者窗口Win32 API提供了函数GetWindow函数(GW_OWNER标志)来获取一个窗口的所有者窗口句柄。GetWindow(hWnd, GW_OWNER)永远返回窗口的所有者(owner)。对于子窗口,函数返回NULL,因为 它们的父窗口就相当于所有者(注意,是“相当于”)。因为Wi

12、ndows系统没有维护子窗口的所有者信 息。MFC中则是通过如下函数得到所有者窗口指针:_AFXWIN_INLINE CWnd* CWnd:GetOwner() const( return m_hWndOwner != NULL ? CWnd:FromHandle(m_hWndOwner) : GetParent(); 从上述代码我们可以看出,它返回的值和GetWindow返回的有所区别,如果当前窗口没有owner, 那么将返回它的父窗口指针。但是Windows没有提供改变窗口所有者的方法。MFC中则提供了改变所有者的方法:_AFXWIN_INLINE void CWnd:SetOwner(C

13、Wnd* pOwnerWnd)( m_hWndOwner = pOwnerWnd != NULL ? pOwnerWnd-m_hWnd : NULL; 另外,mfc 还提供了 CWnd:GetSafeOwner( CWnd* pParent, HWND* pWndTop );函数,可以用来得 到参数pParent的第一个非child属性的父窗口指针。如果这个参数是NULL,则返回当前线程的主窗口 (通过AfxGetMainWnd得到)。框架经常使用这个函数查找对话框或者属性页的所有者窗口。(2) 获取/设置父窗口WIN32 API给出了函数GetParent和SetParent。而mfc也是完

14、全封装了这两个函数:_AFXWIN_INLINE CWnd* CWnd:SetParent(CWnd* pWndNewParent)( ASSERT(:IsWindow(m_hWnd); return CWnd:FromHandle(:SetParent(m_hWnd, pWndNewParent-GetSafeHwnd(); _AFXWIN_INLINE CWnd* CWnd:GetParent() const( ASSERT(:IsWindow(m_hWnd); return CWnd:FromHandle(:GetParent(m_hWnd); 对于SetParent,msdn里面说明了

15、父子窗口必须是同一个进程的。但是由于窗口句柄是系统全局 唯一的,不属于同一个进程的情况下,也可以成功调用,但是后果未知。GetParent的返回值比较复杂,对于overlapped类型的窗口,它返回0,对于WS_CHILD类型,它 返回其父窗口,对于WS_POPUP类型,它返回其所有者窗口,如果想得到创建它时所传递进去的那个 hwndParent 参数,应该用 GetWindowWord(GWW_HWNDPARENT)函数。(3) GetWindowWord(hWnd, GWW_HWNDPARENT)返回一个窗口的父窗口,如果没有,则返回其所有者。(4) 上面谈到,当一个owner窗口被最小化

16、后,系统自动隐藏它所拥有的窗口。当owner窗口被恢复 的时候,系统自动显示它所拥有的窗口。在这两种情况下,系统都会发送(send)WM_SHOWWINDOW消息 给被拥有的窗口。某些时候,我们可能需要隐藏owned窗口,但并不想最小化其所有者窗口,这时候, 可以通过ShowOwnedPopups函数来实现,该函数设置或者删除当前窗口所拥有的窗口的WS_VISIBLE属 性,然后发送WM_SHOWWINDOW消息更新窗口显示。Window窗口层次关系相信在Window下面编程的很多兄弟们都不是很清楚Window中窗口的层次关系是怎么样的, 这个东西很久已经研究过一下,后来又忘记了,今天又一次遇

17、到了这个问题,所以便整理一下。 下面就说说Window中桌面(Deskkop)以及顶层窗口,以及子窗口之间的关系。在Window的图形界面下,最基本显示信息的元素就是窗口,每一个Window窗口都管理着 自己与其他窗口之间的关系和自身的一些信息,如:是否可见,窗口的所有者,窗口的父/子关 系等等信息,当窗口创建、销毁、显示的时候,就会用到这些信息。在每一个窗口实例中,有四个元素被窗口管理器用来建立窗口管理链表。WINDOWWindow Instance DataParentOwnerChildNext Child :指向窗口子窗口的句柄 Parent:指向窗口父窗口的句柄 Owner:指向窗口

18、所有者的句柄 Next:指向下一个同属窗口的句柄众所周知当Window初始化的时候,它创建桌面这个窗口,桌面覆盖着整个窗口,窗口 管理器用这个窗口作为窗口链表中第一个元素。因此桌面在窗口的层次关系中在最上层。在窗口层次关系中,桌面窗口下一层窗口叫做顶层窗口,顶层窗口就是那些不是子窗口 的窗口,顶层窗口不能够有WS_CHILD属性。窗口管理器是如何把桌面窗口和顶层窗口联系 起来的呢?窗口管理器把顶层窗口都组织到一个链表中,而这个链表的头存储的就是桌面窗口 的子窗口句柄,每一个子窗口通过Next就可以找到链表中下一个窗口了。这个链表被称为子 窗口链表,在同一个子窗口链表中的窗口是互为同属窗口,所有

19、顶层窗口都是同属窗口。窗口 在子窗口链表中的次序,也表明了窗口距离距离桌面窗口的距离。顶层窗口所形成的子窗口链 表构成了一个Z轴,窗口管理器就是根据Z序列来觉得窗口的哪一部分是显示的,哪一部分 是被遮盖的。所有顶层窗口的父窗口都是指向桌面窗口的,这样一来顶层窗口就好像是桌面窗口的子 窗口,所有顶层窗口构成的链表是桌面窗口的子窗口链表。当顶层窗口创建的时候,窗口管理 器把顶层窗口放在Z轴的顶上,这样使得整个窗口可见,窗口管理器把窗口插入到桌面窗口子 窗口链表的前面。WS_EX_TOPMOST这个属性控制着窗口管理器创建顶层窗口,窗口管理器 把没有 WS_EX_TOPMOST属性的窗口放在具有 W

20、S_EX_TOPMOST属性的窗口的后面,这 样就使得具有WS_EX_TOPMOST属性的窗口一直显示在前面。在顶层窗口之间还有另外一直关系,拥有或者属于其他的顶层窗口,属于其他窗口的窗 口叫做归属窗口,拥有其他窗口叫做宿主窗口,在Z轴中,归属窗口一定在他的宿主窗口的前 面,如果一个宿主窗口最小化,那么归属他的窗口会隐藏掉,如果宿主窗口隐藏起来,归属他 的窗口不会被隐藏掉。如果有三个窗口 A、B、C,A拥有B,B拥有C,如果A最小化, 那么B会隐藏,但是C还是可见的。怎么才能够在窗口之间建立所有关系呢?方法是在调用 CreateWindow 或者 CreateWindowEx 创建窗口 的时候

21、,指定 hwndParent 参数。Top level 2 owstop Isvel 1桌面窗口是在窗口层次中的第一层,顶层窗口在窗口层次中的第二层,子窗口也就是那 些创建的时候指定了 WS_CHILD属性的窗口占据了窗口层次的其他层。窗口和子窗口之间的联 系,就像桌面窗口和顶层窗口之间的关系一样。DeektccChild Windows子窗口显示在其父窗口的客户区域,所有同一个窗口的子窗口同样建立一个Z轴,这个和顶层窗口是类似的,顶层窗口也是显示在其父窗口 一一桌面窗口的客户区域。16 位和 32 位窗口系统的区别 窗口之间的父子关系、归属所有关系、以及根据Z轴来显示的这些规则在16位和32

22、位窗口系统 中都是相同的。这样可以是在两种窗口系统中高度的兼容。两种窗口系统的区别在于安全和多线程。Window Nt在原有的窗口层次关系中多增加了一层,每一个运行着Window NT的系统中都有一个 Window工作站对象,这个对象是安全对象的第一层,是所有用户安全对象的继承之源,每一个Window 工作站对象可以拥有一些桌面对象,每一个桌面都拥有上面描述的那样的窗口关系。Window Nt用了两 个桌面窗口对象,一个是用来处理登陆界面、屏蔽、锁住工作站等,一个是我们登陆之后进来操作的窗 口了。 通常用户是不能够创建和删除桌面的,不过那是通常,实际上在Window下面也可以实现类似 Linu

23、x中的多个桌面的效果,每一个桌面都是一个独立的世界。两种窗口系统还有两位一个区别,在16位窗口系统中不支持多线程,所以应用程序开发者在创建 窗口的时候不必考虑线程的问题了。而在32位窗口系统中由于又支持了窗口的父子关系,归属与拥有 关系,同一个窗口下面的所有线程都拥有相同的一个输入队列,应用程序开发者应该明白输入队列是共 享的,在同一个时刻只能有一个线程处理消息,其他的线程都在等待输入队列一直到GetMessage或者 PeekMessage返回,而且必须注意的是父窗口和子窗口或者是归属与拥有窗口共用同一个线程。在32窗口系统中定义两种新的窗口类型,前台窗口和背景窗口,这两种窗口没有列到窗口的

24、层次 关系中,前台窗口就是用户当前操作的窗口,其他的所有窗口都是背景窗口。32位窗口系统中支持两 个函数来处理前台窗口 SetForegroundWindow 和 GetForegroundWindow。操作窗口列表下面是窗口列表操作的一些函数:0 EnumChildWindows使用这个函数得到一个窗口的所有子窗口,包括子窗口的子窗口。不过在列举的过程中这个函数 不能够列出正在创建的或者销毁的窗口。0 EnumThreadWindows使用这个函数可以列出所有属于这个线程的窗口。在这个函数调用之后创建的窗口是不能够被列 举出来的。0 EnumWindows使用这个函数列举出所有顶层窗口,不能

25、够列举出子窗口,要列出所有的顶层窗口,使用这个函 数比GetWindow安全。使用GetWindow来列出所有的窗口,可能会导致程序无限循环,因为 在调用GetWindow的过程中,可能一些窗口已经销毁了。EnumWindows不能够列举出调用这个 函数之后创建的顶层窗口。0 FindWindow可以使用这个函数通过类名或者使用窗口的标题来找到顶层窗口,这个函数不能够用来找子窗口,这个函数不区分参数的大小写。这个函数在Z轴中寻找窗口,找到了之后,就会返回。0GetDesktopWindow得到桌面窗口句柄0GetNextWindow使用这个函数得到这个窗口的同属窗口,在16位窗口系统中GetN

26、extWindow和GetWindow是 两个不同的函数,在32位系统中这个函数是通过GetWindow来实现的。0 GetParent如果一个窗口存在父窗口,那么可以通过这个函数得到窗口的父窗口,如果窗口是顶层窗口,则 返回其所有者窗口句柄。0 GetThreadDesktop这个函数用来得到指定线程的所属的桌面窗口句柄,在win95和win98下面由于不支持多桌面, 每次调用该函数都返回同一个值。0 GetTopWindow可以用这个函数来得到给定窗口的第一个子窗口的句柄,如果传递给函数的参数是NULL的话, 那么这个函数将会返回最上面的顶层窗口。0 GetWindow应用程序可以调用这个

27、函数来在窗口列表中导航,这个函数有两个参数,一个是窗口的句柄,另 外是要得到的窗口句柄和这个窗口之间的关系。- GW_HWNDNEXT:这个函数返回给定窗口的下一个同属窗口- GW_HWNDFIRST:返回给定窗口的前一个同属窗口- GW_HWNDLAST:返回给定窗口的最后一个同属窗口- GW_HWNDPREV:返回给定窗口的第一个同属窗口- GW_OWNER:返回给定窗口的所有者窗口句柄- GW_CHILD:返回给定窗口的第一个子窗口句柄0 IsChild这个函数有两个参数,两个窗口句柄,判断两个窗口是否存在父子关系窗口的属性当应用程序调用CreateWindow创建窗口的时候,我们必须为

28、窗口指定属性,下面简要的介绍一下 窗口的属性。WSOVERLAPPED交迭属性是顶层窗口的一种属性,使用这种属性创建的窗口,会被链接到桌面窗口的子窗口链表 中,应用程序通常使用这种属性的窗口作为应用程序的主窗口,具有交迭属性的窗口通常具有有标题栏, 即使是WS_CAPTION这个属性没有指定。具有交迭属性的窗口通常都是有边框的,具有交迭属性的窗口 可以拥有自己的顶层窗口,也可以所属其他的顶层窗口,所有的这类窗口都具有WS_CLIPSIBLINGS属性, 即使是没有给窗口指定这个属性。WS_POPUP弹出属性也是应用到顶层窗口的一种 属性,使用这种属性创建的窗口会被链接到桌面窗口的子 窗口链表中

29、,应用程序通常为对话框窗口设置这个属性,弹出属性和交迭属性的主要区别在于具有弹出 属性的窗口不是一定要有标题栏的,而具有交迭属性的窗口则是一定要具有标题栏,具有弹出属性的 窗口可以没有边框。和具有交迭属性的窗口一样,具有弹出属性的窗口可以有自己的顶层所属窗口, 也可以所属其他的顶层窗口。所有具有弹出属性的窗口必须具有WS_CLIPSIBINGS属性,即使是用户没 有指定这个属性。具有弹出属性的窗口在创建的时候,它的大小和位置不能够使用CW_USEDEFAULT值。WS_CHILD子窗口必须具有这个属性,子窗口只能够出现在父窗口的客户区域,这是子窗口和具有交迭属性 的窗口以及弹出属性的窗口的主要

30、区别,创建子窗口的时候,位置和大小不能够使用CW_USEDEFAULT这 个值,否则是不能够创建窗口的。WS_CAPTION当窗口被设置这个属性的时候,窗口的最上头会有标题栏,应用程序可以通过SetWindowText这个函数 来改变标题栏的标题,通常具有标题栏的窗口还具有最大、最小、关闭按钮,和系统菜单。如果一个窗 口没有标题栏,那么Window是 不会创建这些东西的,即使是用户指定了这些属性,系统菜单是依赖标 题栏窗口的存在而存在的,如果没有标题栏那么是一定不会有系统菜单的存在的。具有标题栏的窗口 通常具有单线的边界具有可以改变窗口大小的属性,通常具有标题栏的窗口是不能具有对话框的边界属

31、性的,除非为窗口设置WS_EX_DLGMODALFRAME属性。|WS_MINIMIZEBOX当为窗口设置这个属性的时候,窗口的标题栏上会有一个最小化的按钮,其实对于Window来实 现这个属性的时候,只是在标题栏上面放置了一个最小化的位图,当用户点击这个最小化位图的时候, 窗口最小化,如果最大化位图最在,那么最小化位图被放置在最大化位图的左边。没有这个属性的窗口 是不能够最小化的。WS_MAXIMIZEBOX当为窗口设置这个属性的时候,窗口的标题栏的右上会被放置一个最大化的位图,如果窗口设置 了这个属性,用户可以点击最大化的位图或者是通过系统菜单来实现窗口的最大化,没有这个属性的窗 口是不能

32、够被最大化的。WS_SYSMENU如果为窗口指定这个属性,那么就会在窗口的左上角上放置系统菜单位图,系统菜单为用户提供了 操作窗口的接口,通常系统菜单会有下面这些系统命令:恢复最小化的窗口使用键盘移动窗口使用键盘改变窗口的大小最小化窗口最大化窗口关闭窗口切换到其他的任务如果一个窗口有系统菜单,用户可以通过点击系统菜单图标来调用系统菜单,或者通过Alt+空格 的快捷键调出系统菜单,或者通过点击任务栏上窗口的图标来调出系统菜单,如果一个窗口没有系统菜 单,那么用户不能够通过键盘来实现系统命令,除非应用程 序自身提供了这样的接口。系统菜单对于 最大化的窗口也是很有用处的,最大化的窗口覆盖了整个屏幕,

33、这样的窗口不能够被移动,除非恢复到 不是最大化的状态,如果这个最大化的窗口有了系统菜单,则就不必一定恢复到非最大化的状态才能 够移动。WS_HSCROLL如果窗口被指定了这个属性,那么窗口会有一个水平的滚动条,窗口是不会自动的滚动滚动条的, 如果应用程序要支持滚动条,那么必须自己处理WM_HSCROLL消息,这个属性通常是在窗口创建的时候, 被指定的。WS_VSCROLL如果窗口被指定了这个属性,那么窗口会有一个竖直的滚动条,窗口不会自动的滚动滚动条,应 用程序必须自己处理WM_VSCROOL消息来处理滚动条滚动的消息,这个属性通常是在窗口被创建的时候 指定的。WS_BORDER如果窗口被指定

34、了这个属性,那么窗口会有一个单线的边在窗口的周围,如果没有指定这个属性, 但是窗口具有标题栏,那么窗口会自动的拥有这个属性,如果窗口没有这个属性,拥有这个属性的窗口 不能够通过键盘或者是鼠标改变窗口的大小。WS_DLGFRAME如果窗口被指定了这个属性,那么窗口具有对话框的边框,这个属性通常是用在对话框窗口的, 只能够用在窗口没有标题栏的情况下,如果一个不是对话框的窗口使用了这个窗口,那么窗口必须被指 定WS_EX_DLGMODALFRAME属性。使用这个属性创建的窗口,不能够通过键盘和鼠标改变窗口的大小。WS_THICKFRAME当窗口被指定了这个属性,那么窗口会有一个可以改变大小的边框,这

35、种属性通常用在程序的主 窗口,具有这种属性的窗口的大小可以通过键盘或者鼠标来改变。WS_CLIPCHILDREN这个属性用在具有子窗口的窗口,使用这个属性,可以使Window把子窗口所占的区域拷贝到父 窗口,而不是由父窗口直接的画子窗口所属的区域,如果窗口没有指定这个属性,那么那么父窗口会覆 盖子窗口的区域。在一些图片显示或者OpenGL显示的窗口中,指定这个属性是很重要的。WSCLIPSIBLINGS当窗口赋予这个属性,窗口在自绘的时候,不会绘制到同属的子窗口,所有具有交迭属性和弹出 属性的窗口都具有这个属性,所有的顶层窗口都具有这个属性,这样一来顶层窗口在自绘的时候,不会 绘制在到其他的顶

36、层窗口。WS_VISIBLE当窗口被设置这个属性的时候,窗口是可见的,默认的情况下,应用程序必须自己调用ShowWindow 来显示窗口。WS_DISABLED当窗口被设置这个属性的时候,创建的窗口不能够接受用户的输入,除非应用程序自身提供方法 来输入。这个属性通常用在Window控件上面。WS_CHILDWINDOW这个属性同WS_CHILD。WS_OVERLAPPEDWINDOW这个属性同 WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,这个属性通常用在应用程

37、序的主窗口。WS_POPUPWINDOW这个属性同WS_POPUP | WS_BORDER | WS_SYSMENU,尽管这个属性中包含了 WS_SYSMENU属性, 如果窗口没有WS_CAPTION属性,那么窗口也不会有系统菜单。WS_EX_DLGMODALFRAME当窗口设置了这个属性的时候,窗口具有对话框的边框,这个属性通常用在对话框窗口,不过任 何窗口都可以使用这个属性来获得对话框的边框。WS_EX_NOPARENTNOTIFY这个属性是用在子窗口上的,当子窗口设置了这个属性,Window不发送WM_NOTIFY消息给子窗口的父 窗口,默认情况下,Window会在子窗口创建或者销毁的时候发送WM_NOTIFY消息给子窗口的父窗口。WS_EX_TOPMOST这个属性仅用在顶层窗口,对于子窗口设置这个属性是被忽略的,如果窗口设置了这个属性,那 么窗口会一直在其他窗口的上面。WS_EX_ACCEPTFILES窗口设置了这个属性,那么窗口可以接受拖放的对象。WS_EX_TRANSPARENT这个属性能够使窗口透明,设置了这个属性的窗口的背景使可以被看到的,透明窗口对于鼠标和 键盘的消息事件并不是透明的

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!