一个 MFC 对话框程序,在主对话框上又有多级新的“子”对话框,当我将主对话框上的各级“子对话框”类型设 POPUP 时,各级对话框独立正常,但似乎与主对话框一点关系也没有一样,其甚至可以移到主对话框所属区域外面,为了保持其与主对话框相对位置的稳定在移动主对话框时要手动地移动各级“子”对话框,且移动时还要使用屏幕坐标;当将各级“子”对话框类型设为 CHILD 时,各级对话框表现出了子窗口的属性,保持与主窗口位置关系,不能移动到主窗口所属区域以外等。但新问题也出现了 -- 子对话框所属区域变得不明确了!各级子对话框间可以相互绘制到对方区域上,甚至主对话框也能绘到它的子对话框上,将相互覆盖的两个子对话框移开后被覆盖子对话框不重绘,而且鼠标在子对话上点击时,子对话框也不会被“激活”。我希望的效果是一个主对话框作为父窗口,其上根据需要动态创建出各级子对话框,子对话框表现出完整“子窗口”的属性 -- 即子窗口有自己独立的窗口区域,操作系统在子对话上存在无效区域时能向其发送重绘消息,鼠标点击时各子窗口能“激活”,移动父级窗口时子窗口自己跟随移动,保证相对位置的稳定。请各位老大提点一下,感激不尽!

解决方案 »

  1.   

    提种参考思路:动态添加和移除WS_CHILD风格,响应各窗口的WM_NCLBUTTONDOWN消息,如果在主窗口标题栏上按下鼠标左键,就把所有子窗口都加上WS_CHILD风格;如果是在子窗口标题栏上按下鼠标左键,就把该窗口的WS_CHILD风格移除。
      

  2.   

    用 POPUP类型移动父级窗口时子窗口自己跟随移动, 这个问题需要自己写代码实现
    处理主对话框消息WM_WINDOWPOSCHANGING, 在该消息移动子对话框
    具体怎么写, 查看MSDN
      

  3.   

    用popup,“移动父级窗口时子窗口自己跟随移动,保证相对位置的稳定”的问题需自己写代码。
      

  4.   

    为什么不找变通的方法呢?比如TBA 控件等。
      

  5.   

    谢谢各们!现在用的就是 POPUP + 手动移动,但心里感觉不舒服,很笨拙,移动很慢有闪烁,我想应该有一种标准的方法的只是我还没找到。
      

  6.   

    动态添加和移除WS_CHILD风格
    --------------------------------------
    不是很理想,每一次在子级对话框上点击不能激活,需要第二次点击才可以,如果是点击子对话框上的控件其根本不能激活;WM_WINDOWPOSCHANGING
    -------------------------------
    还没试,我会试一下的,我现在是在 WM_MOVE 中移动的,闪烁很明显,不知道 WM_WINDOWPOSCHANGING 效果会怎样。