Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вызов CDocument::OnOpenDocument(pathname)


Автор: Madest 18.3.2004, 10:44
Как это можно сделать?
ругается - illegal call of non-static member function

Автор: srd 18.3.2004, 13:22
А ты случайно не вызываешь её CDocument::OnOpenDocument(pathname)?
Вызывать её надо для конкретного объекта класса pDoc->OnOpenDocument(pathname), т.к. это не статическиая функция-член smile.gif

Автор: Madest 18.3.2004, 15:54
Мне документ нужно открыть с заранее известным программе pathname из диалога. Но если б я кнопке присвоил ID_FILE_OPEN - вызывался бы CFileDialog, который там не нужен. В общем, кнопке дал идентификатор ID_FILE_NEW, а в функции документа OnNewDocument() вместо CDocument::OnNewDocument() вписал CDocument::OnOpenDocument(pathname). Типа обхитрил =) А можно ли это правильными средствами сделать?
А поначалу, конечно, че только не выдумывал, даже вот это
CMultiDocTemplate* pDocTemplate;
pDocTemplate=new CMultiDocTemplate(
IDR_ETYPE,
RUNTIME_CLASS(CEDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CEView));
AddDocTemplate(pDocTemplate);
в функцию-обработчицу сообщения от кнопки пытался впихнуть =)

Автор: srd 18.3.2004, 16:30
Гм, покажи код, я то я запутался sad.gif

Автор: Madest 18.3.2004, 17:42
Кнопка из диалога должна открыть документ по пути mypathname.
Поначалу писал ей собственно-выдуманный идентификатор и в функции-обработчице сообщения ее нажатия пытался вызвать CDocument::OnOpenDocument(mypathname). Извращался повсякому - не вышло.
Потом написал у этой кнопки идентификатор ID_FILE_OPEN - стандартный MFC-шный. Кнопка стала вызывать CFileDialog (для открытия файла) и вызывает метод CEDoc::OnOpenDocument(LPCTSTR lpszPathName) в котором вызывается нужный мне CDocument::OnOpenDocument(mypathname). Но CFileDialog мне там не нужен(!!!), mypathname программе известен. Поэтому кнопке приписал ID_FILE_NEW, при котором просто создается новый документ и вызывается метод CEDoc::OnNewDocument(). И там уже закомментировал CDocument-овский OnNewDocument() и вместо него вставил !CDocument::OnOpenDocument(mypathname). Работает нормально, но возможно ведь, наверное, это сделать ээээ... по теории?

BOOL CEDoc::OnNewDocument()
{
if(!CDocument::OnOpenDocument(mypathname))
AfxMessageBox("no open doc");
//if(!CDocument::OnNewDocument()) return FALSE;
//......
}

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