Открытие файла в MDI приложении.
От: Reverend JAHncle Россия  
Дата: 06.08.02 10:56
Оценка:
Помогите, пожалуйста. Мне в MDI приложение приходит WM_COPYDATA с данными. Эти данные надо отобразить в новой вьюхе. Для этого надо ее создать. Каким образом это сделать из самой программы?
Re: Открытие файла в MDI приложении.
От: Denwer Россия  
Дата: 06.08.02 13:08
Оценка: 22 (2)
Здравствуйте Reverend JAHncle, Вы писали:

RJ>Помогите, пожалуйста. Мне в MDI приложение приходит WM_COPYDATA с данными. Эти данные надо отобразить в новой вьюхе. Для этого надо ее создать. Каким образом это сделать из самой программы?


У класса приложения есть такая функция OnFileNew, вызови ее и создатся новый документ. Потом берешь активный документ(это и будет созданный) передаешь туда свои данные.
Re: Открытие файла в MDI приложении.
От: Patalog Россия  
Дата: 06.08.02 13:12
Оценка: 12 (2)
Здравствуйте Reverend JAHncle, Вы писали:

RJ>Помогите, пожалуйста. Мне в MDI приложение приходит WM_COPYDATA с данными. Эти данные надо отобразить в новой вьюхе. Для этого надо ее создать. Каким образом это сделать из самой программы?


//В обработчике события али еще где...
POSITION pos = GetMyApp()->GetFirstDocTemplatePosition();
CDocTemplate* doc_template = GetMyApp()->GetNextDocTemplate(pos);
CMyDoc* document = static_cast<CMyDoc*>(doc_template->CreateNewDocument());
CFrameWnd* frame = doc_template->CreateNewFrame(document, NULL);
if(frame) doc_template->InitialUpdateFrame(frame, document);

/*
.....
*/

//В ChildFrame
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* context)
{
CMyCoolView* view = static_cast<CMyCoolView*>(RUNTIME_CLASS(CMyCoolView)->CreateObject()); //Ежели конечно CMyCoolView у тебя DECLARE_DYNCREATE...

ASSERT_VALID(view);

VERIFY(view ->Create(NULL, NULL, WS_CHILD | WS_VISIBLE | TVS_EXTENDEDSEL, CRect(0, 0, 0, 0), this, IDW_MY_VIEW, context));

return TRUE;
}



Подойдет? Вроде ничего не забыл...
Почетный кавалер ордена Совка.
Re[2]: Открытие файла в MDI приложении.
От: Ибрагим Беларусь http://blogs.rsdn.org/ikemefula
Дата: 06.08.02 14:21
Оценка:
Здравствуйте Denwer, Вы писали:

RJ>>Помогите, пожалуйста. Мне в MDI приложение приходит WM_COPYDATA с данными. Эти данные надо отобразить в новой вьюхе. Для этого надо ее создать. Каким образом это сделать из самой программы?


D>У класса приложения есть такая функция OnFileNew, вызови ее и создатся новый документ. Потом берешь активный документ(это и будет созданный) передаешь туда свои данные.


Где ты раньше был ? Я это создавал через доктемплейты и всякую хрень...
Re[3]: Открытие файла в MDI приложении.
От: PSP Беларусь  
Дата: 07.08.02 06:41
Оценка:
Здравствуйте Ибрагим, Вы писали:

И>Здравствуйте Denwer, Вы писали:


RJ>>>Помогите, пожалуйста. Мне в MDI приложение приходит WM_COPYDATA с данными. Эти данные надо отобразить в новой вьюхе. Для этого надо ее создать. Каким образом это сделать из самой программы?


D>>У класса приложения есть такая функция OnFileNew, вызови ее и создатся новый документ. Потом берешь активный документ(это и будет созданный) передаешь туда свои данные.


И>Где ты раньше был ? Я это создавал через доктемплейты и всякую хрень...


И это тоже правильно. Если не хочешь, чтобы View был приаттачен к тому же документу.
Всегда Ваш, PSP.
Re[2]: Открытие файла в MDI приложении.
От: Reverend JAHncle Россия  
Дата: 07.08.02 07:55
Оценка:
Здравствуйте Denwer, Вы писали:

D>У класса приложения есть такая функция OnFileNew, вызови ее и создатся новый документ. Потом берешь активный документ(это и будет созданный) передаешь туда свои данные.


Обработчик находится в MainFrame. Если я там ставлю OnFileNew, то компилятор выдает:
'OnFileNew' : cannot access protected member declared in class 'CWinApp'
Как обойти? Неужели еще одно сообщение посылать?

Patalog:
Нет такого TVS_EXTENDEDSEL. В МСДН тоже нет.
Я его не ставил.
Но прога вылетает при обращении к строке:
if(frame) doc_template->InitialUpdateFrame(frame, document);
Re[3]: Открытие файла в MDI приложении.
От: Reverend JAHncle Россия  
Дата: 07.08.02 08:17
Оценка:
Здравствуйте Reverend JAHncle, Вы писали:

RJ>Здравствуйте Denwer, Вы писали:


D>>У класса приложения есть такая функция OnFileNew, вызови ее и создатся новый документ. Потом берешь активный документ(это и будет созданный) передаешь туда свои данные.


RJ>Обработчик находится в MainFrame. Если я там ставлю OnFileNew, то компилятор выдает:

RJ>'OnFileNew' : cannot access protected member declared in class 'CWinApp'
RJ>Как обойти? Неужели еще одно сообщение посылать?

RJ>Patalog:

RJ>Нет такого TVS_EXTENDEDSEL. В МСДН тоже нет.
RJ>Я его не ставил.
RJ>Но прога вылетает при обращении к строке:
RJ>if(frame) doc_template->InitialUpdateFrame(frame, document);

Сорри по поводу OnFileNew, обошел, но прога также вылетает на InitialUpdateFrame(...)
Re[4]: Открытие файла в MDI приложении.
От: Reverend JAHncle Россия  
Дата: 07.08.02 08:32
Оценка:
Черт, еще раз прошу прощения. Это все мои тараканы. Спасибо всем.
Re[3]: Открытие файла в MDI приложении.
От: Patalog Россия  
Дата: 07.08.02 08:38
Оценка:
Здравствуйте Reverend JAHncle, Вы писали:

[skip]

RJ>Patalog:

RJ>Нет такого TVS_EXTENDEDSEL. В МСДН тоже нет.
RJ>Я его не ставил.

А его и нет Ето мое внутреннее Я
Просто при ипользовании метода Copy/Paste забыл удалить.

RJ>Но прога вылетает при обращении к строке:

RJ>if(frame) doc_template->InitialUpdateFrame(frame, document);

Я так понял из соседнего поста ты уже разобрался? Ежели нет пиши подробней.
Почетный кавалер ордена Совка.
Re[4]: Открытие файла в MDI приложении.
От: Reverend JAHncle Россия  
Дата: 07.08.02 11:42
Оценка:
Здравствуйте Patalog, Вы писали:

RJ>>Но прога вылетает при обращении к строке:

RJ>>if(frame) doc_template->InitialUpdateFrame(frame, document);

P>Я так понял из соседнего поста ты уже разобрался? Ежели нет пиши подробней.


Все работает как часы. Еще раз спасибо. Попробовал один вариант, потом другой. Первый код не до конца подчистил, вот баги и полезли.
В итоге не стал разбираться какой вариант лучше, оставил последний (OnFileNew). Только пришлось заводить в классе приложения свою процедуру OnMyFileNew из которой уже вызывать OnFileNew.

И еще раз спасибо В благодарность поставил оценки для удовлетворения вашей сатисфакции
Re[2]: Открытие файла в MDI приложении.
От: Ибрагим Беларусь http://blogs.rsdn.org/ikemefula
Дата: 08.08.02 07:32
Оценка:
Здравствуйте Patalog, Вы писали:

Проще тогда так:

CDocument* CWinApp::OpenDocumentFile(LPCTSTR);
CDocument* CDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE);

RJ>>Помогите, пожалуйста. Мне в MDI приложение приходит WM_COPYDATA с данными. Эти данные надо отобразить в новой вьюхе. Для этого надо ее создать. Каким образом это сделать из самой программы?


P>
P>//В обработчике события али еще где...
P>POSITION pos = GetMyApp()->GetFirstDocTemplatePosition();
P>CDocTemplate* doc_template = GetMyApp()->GetNextDocTemplate(pos);
P>CMyDoc* document = static_cast<CMyDoc*>(doc_template->CreateNewDocument());
P>CFrameWnd* frame = doc_template->CreateNewFrame(document, NULL);
P>if(frame) doc_template->InitialUpdateFrame(frame, document);

P>/*
P>.....
P>*/

P>//В ChildFrame
P>BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* context)
P>{
P>CMyCoolView* view = static_cast<CMyCoolView*>(RUNTIME_CLASS(CMyCoolView)->CreateObject()); //Ежели конечно CMyCoolView у тебя DECLARE_DYNCREATE...

P>ASSERT_VALID(view);

P>VERIFY(view ->Create(NULL, NULL, WS_CHILD | WS_VISIBLE | TVS_EXTENDEDSEL, CRect(0, 0, 0, 0), this, IDW_MY_VIEW, context));

P>return TRUE;
P>}
P>



P>Подойдет? Вроде ничего не забыл...
Re[3]: Открытие файла в MDI приложении.
От: Аноним  
Дата: 08.08.02 07:44
Оценка:
Здравствуйте Ибрагим, Вы писали:

И>Здравствуйте Patalog, Вы писали:


И>Проще тогда так:


И>CDocument* CWinApp::OpenDocumentFile(LPCTSTR);

И>CDocument* CDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE);

Я не сказал, что мне надо открыть файл. Данные передаются из другого места, генерируютя, еще как-нибудь получаются.
Поэтому сей вариант не подходит:(
Re[4]: Открытие файла в MDI приложении.
От: Ибрагим Беларусь http://blogs.rsdn.org/ikemefula
Дата: 08.08.02 07:54
Оценка:
Здравствуйте Аноним, Вы писали:

И>>Проще тогда так:


И>>CDocument* CWinApp::OpenDocumentFile(LPCTSTR);

И>>CDocument* CDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE);

А>Я не сказал, что мне надо открыть файл. Данные передаются из другого места, генерируютя, еще как-нибудь получаются.

А>Поэтому сей вариант не подходит

Читайте MSDN ! Если lpszPathName == NULL то открывается новый, пустой файл. А там его хоть генерируй, хоть что хочешь.

Преимущества перед способом с OnFileNew — открывается с заранее определенным шаблоном документа.
Re[5]: Открытие файла в MDI приложении.
От: Аноним  
Дата: 08.08.02 08:11
Оценка:
Здравствуйте Ибрагим, Вы писали:

И>Здравствуйте Аноним, Вы писали:


И>>>Проще тогда так:


И>>>CDocument* CWinApp::OpenDocumentFile(LPCTSTR);

И>>>CDocument* CDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE);

А>>Я не сказал, что мне надо открыть файл. Данные передаются из другого места, генерируютя, еще как-нибудь получаются.

А>>Поэтому сей вариант не подходит:(

И>Читайте MSDN ! Если lpszPathName == NULL то открывается новый, пустой файл. А там его хоть генерируй, хоть что хочешь.

Я посмотрел только CWinApp::OpenDocumentFile:( Там этого не было.
Re[6]: Открытие файла в MDI приложении.
От: Ибрагим Беларусь http://blogs.rsdn.org/ikemefula
Дата: 08.08.02 08:18
Оценка:
Здравствуйте Аноним


CDocTemplate::OpenDocumentFile
virtual CDocument* OpenDocumentFile( LPCTSTR lpszPathName, BOOL bMakeVisible = TRUE ) = 0;

Return Value

A pointer to the document whose file is named by lpszPathName; NULL if unsuccessful.

Parameters

lpszPathName

Pointer to the pathname of the file containing the document to be opened.

bMakeVisible

Determines whether the window containing the document is to be made visible.

Remarks

Opens the file whose pathname is specified by lpzsPathName. If lpszPathName is NULL, a new file, containing a document of the type associated with this template, is created.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.