在MDI程序中,假设 我需要两个功能,一个是维护业务员的,一个是维护订单的。
我建立两个文档类型,两个视分别对应于以上两种功能:
CSalesmenDoc
CSalesmenFormView
//--以上两个类是用于业务员资料维护的
COrderDoc
COrderFormView
//--以上两个类是用于订单维护的,
然后我加入两个菜单:
IDD_SALESMEN
IDD_ORDER
在菜单IDD_ORDER的OnCommand事件里这样处理:
CMultiDocTemplate *pDocTSalesmen = new CMultiDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSalesmenDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CSalesmenFormView));
pDocTSalesmen->OpenDocumentFile(NULL);
这样子我的确可以打开用于维护业务员的窗口,可是再点一次又会打开一个同样的,而我的目的是:如果这个窗口还没打开,就打开它,否则就激活它,请问大家有没有什么办法可以做到这点?
或者说,有其它的处理方法,不用Document Template可以自己建立子窗口么?
或者,有什么办法能使CDialog在MDI主窗口的窗户区内活动,而且最大化也只占满客户区?
总之,目的就是对每一种功能窗口,只能打开一次,而且如果原来已经打开但现在不活动了,则点菜单时只是激活它?

解决方案 »

  1.   

    PreCreateWindow(CREATESTRUCT & cs)
    {
    //在这个建立窗口的地方进行判断,找点可用的条件五的,或者自己建立可用条件五的}
      

  2.   

    To: xqk
        谢谢你的提示,能否具体一点?因为……我实在很菜:(
      

  3.   

    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
       // Create a window without min/max buttons or sizable border.
       cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;   // Size the window to 1/3 screen size and center it.
       cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3;
       cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3;
       cs.y = ((cs.cy * 3) - cs.cy) / 2;
       cs.x = ((cs.cx * 3) - cs.cx) / 2;    return CFrameWnd::PreCreateWindow(cs);
    }
      

  4.   

    To: xuzheng318(forever C++)
        我的目的是防止同种形状的窗口建立两次,而且,我还遇到一个问题是,没办法以自己的代码来创建FormView,自己创建总是出运行时错误。
        我做的是MIS软件,在MIS软件中,一般都是直接对数据库进行操作,我觉得没必要用D/V结构,所以代码直接在FormView中处理就是了,所以我一赶想用没有D/V的MDI来解决我的问题,然而,在AppWizard中如果不选择D/V支持,则它创建的View只能是继承至CView,而不能选择CFormView。 我在框架创建之后,自己加上CFormView,然后想自己创建ChildWnd以及FormView,却总是出现运行时错误。
        另一个问题是,在MIS系统中,一般每种功能其对应的窗口只能打开一个,比如“出库单”模块,点一下菜单之后,如果这个窗口已经存在就只是让它显示,没有存在才创建并显示它,可是如果采用D/V结构,都不知道怎样控制每种View只建立一次,AddTemplate之后,OnFileNew就弹个选择文档类型的窗口出来,郁闷啊…… 哎……搞了好久了,找不到方向,不知道有哪位高手不吝赐教呢???
      

  5.   

    此问题已解决。
    只要将MDIChildWnd的FormView成员声明为指针型,然后重写FormView的Create函数(只需要用重新声明,并调用FormView的Create就可以。)并且重写MDIChildWnd的Create函数,也只是需要重新声明并调用父类的Create。
    这样子就可建立不需要DocTemplate管理的FormView了。