现象:
-----------
一个窗体上有若干子窗体,并且子窗体之间有部分重叠。点击某个处于底层的窗口窗体(它部分被遮住),它就会跑到最前台来(遮住了其他窗口的一部分)。
==================================问题:
----------
如何禁止这种行为,让所有子窗口保持程序开始的z-order。点击原来被部分遮住的窗体时不让它不跑到前台来。但是窗体又要能响应鼠标单击、移动等消息。所以Disable是不行的。设置WS_EX_TOPMOST也是无效的,它对子窗口没用。难道要用hook才行??

解决方案 »

  1.   

    1,这些所有的窗口都是随时可能移动,互相重叠的关系并不固定,更有可能是1对多的关系,所以设为父窗体不行2,不让它重叠也不行,需求就是要重叠的。我的目的就是,不管是否重叠,z-order不要随着鼠标点击而变
      

  2.   

    晕.又是这个问题.http://community.csdn.net/Expert/topic/5215/5215911.xml?temp=.401211
      

  3.   

    使用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.
      

  4.   

    CPtrList SubWndList;
    在把所有的窗体加入完成后,把所有子窗体的指针加入SubWndList
    然后:
    POSITION pos;
    pos=SubWndList.GetHeadPostion()
    CWnd *pWnd=SubWndList.GetNextPostion(pos);
    pWnd->SetWindowPos(SubWndList.GetNextPostion(pos),NULL,NULL,NULL,NULL,NULL);来将下一窗体的zorder放在之前
    顺序由自己安排把它们组成一个函数,在需要时调用
      

  5.   

    也可以给窗体WS_CLIPSIBLINGS属性,然后在处理各自的WM_PANT消息时,以相应规则处理SetWindowPos