我用MDI编写的一个程序,因为要对子窗口排序,所以在创建窗口时,对新建的4个子窗口先设置了TILE模式,然后做MOVEWINDOW操作,我把这个操作放在PreTranslateMessage函数中完成,截获m_hWndMDIClient的WM_PAINT消息,在该消息中完成上述的窗口排序操作
现在子窗口排序倒是成功了,可是有几个问题仍然存在,请教一下各位高手
1、原来四个子窗口在创建完成后,焦点一般都在左上角的窗口4上,我把窗口4和窗口1交换了位置,当前焦点就转到了窗口1上,可是问题是,子窗口属性页的焦点还在窗口4上,并且,窗口4的标题仍然还是窗口1。郁闷!
2、当我移动MDI界面时,TILE模式的分割窗口消失,只有当m_hWndMDIClient的WM_PAINT消息产生后,TILE模式的分割窗口才会出现。
以上2个问题该怎样解决呢?请高人指点,先谢了。

解决方案 »

  1.   

    怎么也不应该在WM_PAINT消息排序吧?排序后应该会再次调用WM_PAINT消息,这样有点混乱了。
      

  2.   

    在哪里排序比较好呢?我曾在APP的InitInstance函数中,三个OnFileNew ()后,进行排序,可是无效
      

  3.   

    我估计你不应该依赖排序,而是应该用CSplitterWnd严格控制layout
      

  4.   

    我在m_hWndMDIClient窗口的WM_PAINT消息中进行排序后,软件创建时的界面如下注意看,焦点自动变成了左上角的窗口,但是右下角的标题视图4仍然还是视图1
    另外,在视图1的标题栏,有一半是灰的,那是因为软件创建时,左边有一个停靠BAR会收缩回去(2秒钟时间爱你),收缩回去的部分会显示灰色。
    如果这时点击视图1窗口,视图1和视图4都会恢复正常
      

  5.   

    前面有很多错别字,我更新一下注意看,焦点自动变成了左上角的窗口,但是右下角的标题图形4仍然还是图形1
    另外,在图形1的标题栏,有一半是灰的,那是因为软件创建时,左边有一个停靠BAR会动态地收缩回去(大约2秒钟时间),收缩当中的部分会显示灰色。
    如果这时点击图形1窗口,图形1和图形4都会恢复正常
      

  6.   

    图形创建后,如果我移动整个软件窗口,tile模式会自动消失(这个真的很难控制,有时候tile模式莫名其妙地就消失了,前面有位朋友说用分割窗口做,我现在也后悔啊,MDI太难控制了,可惜程序都做到这一步了,没办法,只有硬着头皮做下去了)
    如果拉动软件边框,显示会恢复正常