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


Автор: NewLine 18.6.2006, 15:09
Привет.
Пытаюсб создать шаблон с помощью CMultiDocTemplate:
Код

CMultiDocTemplate* pDocTemplateData;
    pDocTemplateData = new CMultiDocTemplate(
    IDD_FORMVIEW,
    RUNTIME_CLASS(CTest_3Doc),
    RUNTIME_CLASS(CView), // класс окна-рамки 
    RUNTIME_CLASS(NewFormView_1)); // класс дочернего окна
    AddDocTemplate(pDocTemplateData);

 В строке RUNTIME_CLASS(NewFormView_1)); выдается ошибка.
user posted image
Что емуне нравится  smile  

Автор: NewLine 18.6.2006, 15:48
С этим вопросом я разобрался задавал не тот "класс окна-рамки", но теперь не понятно как открыть это окно. 

Автор: Earnest 19.6.2006, 06:42
У шаблона есть метод OpenDocumentFile.

Добавлено @ 06:44 
В принципе, если определен только один шаблон, стандартный обработчие CWinApp::OnFileOpen его успешно откроет. Если шаблонов >1, но каждый имеет свое собственное расширение файла (которое правильно задано в строке ресурсов), то стандартный метод тоже справится. 

Автор: NewLine 19.6.2006, 13:23
Помогите пожалуйста разобраться.

Я создал шаблон
Код

//Станодартный шаблон
    CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(
        IDR_TEST_3TYPE,
        RUNTIME_CLASS(CTest_3Doc),
        RUNTIME_CLASS(CChildFrame), // custom MDI child frame
        RUNTIME_CLASS(CTest_3View));
    AddDocTemplate(pDocTemplate);

//Шаблон котрый создал я
    CMultiDocTemplate* pDocTemplateData;
    pDocTemplateData = new CMultiDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CTest_3Doc),
    RUNTIME_CLASS(CChildFrame), // класс окна-рамки 
    RUNTIME_CLASS(NewFormView_1)); // класс дочернего окна
    AddDocTemplate(pDocTemplateData);


В в главное меню(IDR_MAINFRAME) я добавил новый пункт:
"Открыть документ" и присвоил ему ID: ID_FILE_NEWMENU
В файл рессурсов String Table добавил ID нового View: IDD_FORMVIEW Caption("test_test")

После чего в классе CTest_3App создал две функции функции
Код

void CTest_3App::OnFileNewmenu() 
{
    // TODO: Add your command handler code here
        OpenNewDocument("test_test");
}

и

BOOL CTest_3App::OpenNewDocument(const CString &strTarget)
{
CString strDocName;
CDocTemplate* pSelectedTemplate;
POSITION pos = GetFirstDocTemplatePosition();
while (pos != NULL)
{
pSelectedTemplate = (CDocTemplate*) GetNextDocTemplate(pos);
pSelectedTemplate->GetDocString(strDocName, CDocTemplate::docName);
if (strDocName == strTarget) // выбирается из строкового ресурса шаблона
{
pSelectedTemplate->OpenDocumentFile(NULL);
return TRUE;
}
}
return FALSE;
}


Все.
После нажатия на пункт меню "Открыть документ" ничего не происходит.
Помогите пожалуйста. 

Автор: Earnest 19.6.2006, 18:50
Возьми отладчик и пройдись по коду. Прежде всего, убедись, что вызывается твой обработчик. 

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