Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Создание вручную child в MDI


Автор: Homer 30.4.2006, 17:52
  Как вручную создать новое child окно? то сеть то же самое, что при тыкании на кнопку new, только вручную. 

Автор: Бугемот 1.5.2006, 10:49
возможны 2 варианты:
1. не используется док/вью, поэтому дочернее окно - это всего лишь рамка с представлением внутри:
Код

    CCreateContext cc;
    cc.m_pNewViewClass = RUNTIME_CLASS(CYourView);
    cc.m_pCurrentDoc = NULL;
    cc.m_pNewDocTemplate = NULL;
    cc.m_pLastView = NULL;
    cc.m_pCurrentFrame = this;
    CRuntimeClass *pNewViewClass = RUNTIME_CLASS(CMDIChildWnd);
    CMDIChildWnd *pchild_wnd = (CMDIChildWnd *) pNewViewClass->CreateObject();
    if(!pchild_wnd)
        return;
    if(pchild_wnd->LoadFrame(IDR_FRAME_ACTIVE_ACCOUNT,
        WS_CHILD |WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, &cc))
    {
        pchild_wnd->SetTitle("Активные пользователи");
        pchild_wnd->InitialUpdateFrame(NULL, TRUE);
    }

2. используется архитектура док/вью:
здесь немного сложнее: сначала надо "найти" необходимый доктемплейт (CDocTemplate), а затем уже создать для него новый документ
если нужен код как найти - напишу  

Автор: OverBug 3.5.2006, 21:11
Цитата

если нужен код как найти - напишу  

Homer, думаю тебе нужно, если нет, 
Бугемот, все ровоно напиши, мне нужно, другим будет нужно. 

Автор: Homer 4.5.2006, 22:43
Цитата

2. используется архитектура док/вью:
здесь немного сложнее: сначала надо "найти" необходимый доктемплейт (CDocTemplate), а затем уже создать для него новый документ

спасибо,  Бугемот, разобрался, все работает.

OverBug, вот как я сделал:
Код

    CDocument *doc;
    CDocTemplate *temp;
    
    POSITION pos=theApp.GetFirstDocTemplatePosition();
    temp=theApp.GetNextDocTemplate(pos);
    doc=temp->OpenDocumentFile(NULL, TRUE);

можно еще через CreateNewFrame, но в моем случае лучше OpenDocumentFile. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)