我想编写一个mdi的程序,但我并不要求他支持文档/视图模式,而且,我要在点击菜单中的一项时能够产生一个子窗口,就象在vb、powerbuilder等程序中实现的mdi的形式。
开始时我想这个子窗口应该是由CDialog类派生而来的吧所以我这样做:
    先插入一个对话框CMydialog,ID号是:ID_mydialog,并将其设置为child形式;
    我在程序中这样调用他:
    CMydialog * m_dialog = new CMydialog();
    if (m_dialog->GetSafeHwnd()==0)
      {
        m_dialog->Create(ID_mydialog,this);
  
       }
     最后我在调用函数将它显示出来。    可是我这样做有一下疑问:
    1、这样的子窗口的title栏为什么中是灰的,只有将CMydialog设置成popup
    的形式才能够使title拦变量,但这时子窗口和父窗口的title不能够同时变亮。
    2、我在子窗口中放置的编辑控件CEide不能够获得焦点。
既然不能够实现,所以我就另想办法了:我们在用wizard直接建立一个mdi程序框架,我们运行该框架程序,将可以产生一个新的框架窗口,该窗口满足我界面要求,但他是一个视,而不是一个对话框,不能够在上面放置按纽,所以我这样改造该程序:
插入一个dialog,然后用classwizard将该dialog生成一个新类CMyDialog并将其基类设置为CMDIChildFrm,在将CHhApp::OnFileNew()/*我的工程为Hh*/改写如下:
{
CMainFrame* pFrame = STATIC_DOWNCAST(CMainFrame, m_pMainWnd);
pFrame->CreateNewChild(
RUNTIME_CLASS(CMyDialog), IDD_DIALOG1, NULL, NULL); // create a new MDI child window
/* pFrame->CreateNewChild(
RUNTIME_CLASS(CChildFrame), IDR_HHTYPE, m_hMDIMenu, m_hMDIAccel);
*/}
运行,结果怎么样,还是不行:(,出来的还是一个视窗口,我也不知道怎么回事,我估计这种方法是可以的,高手可以帮我想想吗?我就这个问题有另一个帖子:
http://expert.csdn.net/Expert/topic/1499/1499298.xml?temp=.7618372

解决方案 »

  1.   

    用CFormView
    如果你已经创建好了程序,就重新先做一个资源对话框,改成CHILD类型,添加一个类,从新类,从CFormView继承,资源选你的对话框资源,然后把主程序里面的类似于下面的语句的最后一行的VIEW
    CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(
    IDR_SXJTTYPE,
    RUNTIME_CLASS(CSXJTDoc),
    RUNTIME_CLASS(CHomeFrame), // custom MDI child frame
    RUNTIME_CLASS(CHomeView));
    改写为你的新类就可以了.呵呵,这是俺在CSDN上写的最详细的帖子了,一定要给我分哦