如何控制子窗口的z-order?

jun_01 2006-12-28 10:17:48
现象:
-----------
一个窗体上有若干子窗体,并且子窗体之间有部分重叠。

点击某个处于底层的窗口窗体(它部分被遮住),它就会跑到最前台来(遮住了其他窗口的一部分)。
==================================

问题:
----------
如何禁止这种行为,让所有子窗口保持程序开始的z-order。点击原来被部分遮住的窗体时不让它不跑到前台来。

但是窗体又要能响应鼠标单击、移动等消息。所以Disable是不行的。

设置WS_EX_TOPMOST也是无效的,它对子窗口没用。

难道要用hook才行??
...全文
1111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
一分之千 2006-12-28
  • 打赏
  • 举报
回复
使用SetWindowPos将其中一个设置最上或者最下,然后使用窗口属性WS_CLIPSIBLINGS ,关于该属性MSDN这样说WS_CLIPSIBLINGS
Clips child windows relative to each other; that is, when a particular child window receives a paint message, the WS_CLIPSIBLINGS style clips all other overlapped child windows out of the region of the child window to be updated. (If WS_CLIPSIBLINGS is not given and child windows overlap, when you draw within the client area of a child window, it is possible to draw within the client area of a neighboring child window.) For use with the WS_CHILD style only.
olidyu 2006-12-28
  • 打赏
  • 举报
回复
重叠顺序变化后,把父窗体也重新设置:D
raymonzhao 2006-12-28
  • 打赏
  • 举报
回复
晕.又是这个问题.

http://community.csdn.net/Expert/topic/5215/5215911.xml?temp=.401211
jun_01 2006-12-28
  • 打赏
  • 举报
回复
1,这些所有的窗口都是随时可能移动,互相重叠的关系并不固定,更有可能是1对多的关系,所以设为父窗体不行

2,不让它重叠也不行,需求就是要重叠的。

我的目的就是,不管是否重叠,z-order不要随着鼠标点击而变。。。
mynamelj 2006-12-28
  • 打赏
  • 举报
回复
子窗口在子窗口中创建就行了。或者你把子窗口尺寸调小一点,不让它重叠就行了。
olidyu 2006-12-28
  • 打赏
  • 举报
回复
投机方法:把你要放下面的窗体,设置成上面窗口的父窗体
CharlesPrince 2006-12-28
  • 打赏
  • 举报
回复
也可以给窗体WS_CLIPSIBLINGS属性,然后在处理各自的WM_PANT消息时,以相应规则处理SetWindowPos
CharlesPrince 2006-12-28
  • 打赏
  • 举报
回复
CPtrList SubWndList;
在把所有的窗体加入完成后,把所有子窗体的指针加入SubWndList
然后:
POSITION pos;
pos=SubWndList.GetHeadPostion()
CWnd *pWnd=SubWndList.GetNextPostion(pos);
pWnd->SetWindowPos(SubWndList.GetNextPostion(pos),NULL,NULL,NULL,NULL,NULL);

来将下一窗体的zorder放在之前
顺序由自己安排

把它们组成一个函数,在需要时调用

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧