如何使MDI创建的第一个子窗口为特殊cs样式窗口,并且保持一直在最前面,不能被后来建立的子窗口覆盖,也就是模拟一个popup对话框的效果,能实现吗?可以给足100分,只要能解决。

解决方案 »

  1.   

    能实现啊:SetWindowPos(wndTopMost,x,y,cx,cy,SWP_SHOWWINDOW);
    其中 
    x :窗口左上角的横坐标
    y:窗口左上角的纵坐标
    cx:窗口的宽度
    cy:窗口的高度
      

  2.   

    一楼,人家说的是多文档的第一个子文档!?楼主,我没有研究有没有这样的参数或者直接的方法,但我用定时器的方法实现了,步骤是这样:一.在MainFrm.cpp中,在开头定义(所有的inlcude之后)一个全局变量:CWnd *pwnd=NULL;
    二.在MainFrm.cpp的OnCreate(...)中新建一个定时器:
    SetTimer(1,10,0);三.重载WM_TIMER消息, 在OnTimer(..)中加入如下:
    if(pwnd)
    pwnd->BringWindowToTop();//把该窗口置前四.在ChileFrm.cpp中开头加入:
    #include "MainFrm.h"然后声明:extern CWnd *pwnd; //打算使用MainFrm中的全局变量
    然后再声明一个本CPP中的全局变量:bool first=1; //即只针对第一个创建的子窗口五. Ctrl+W打开类向导(在ChildFrm类中),为ChildFrm重载OnCreateClient
    BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    { if(first)
    {
    first=0;
    pwnd=this;
    }
    return CMDIChildWnd::OnCreateClient(lpcs, pContext);
    }总的思路就是取的第一个创建的子窗口的句柄,然后在定时器中一直将它置前.我测试过了,效果不错,如果楼主觉得满意就给分吧
      

  3.   

    zhucde(【風間苍月】★MVP★www.bezier.com.cn/bbs★虚拟) ( ):不管用,当新建一个后,新建的就在前面。
      

  4.   

    试了,可以置前,不过1、闪烁;2、好像必须加在onCreate(),我得程序有好几时间设成变量,就不行;3、并不能控制第一个窗口始终在最前,因为新建子窗口后,定时器有时反应滞后,把刚点击的那个窗口作为最前窗口了。所以不能用呀。