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


Автор: Royan 6.12.2002, 21:47
Если я грубо создам через ClassWizard MDI приложение, то при нажатии на кнопку открыть, открывается окно и в нем выводиться текст из обработчика OnDraw(), который собственно мне и нужен. Но как только я переопределил открытие докумнета (просто связал ID_FILE_OPEN со своим OnOpen) и там сзодал окно, то ничего через OnDraw уже не вывести.
Больше того в выпадающем меню Window есть пункт New Window, через который появляется окно, которое выводит текст из OnDraw
Для внесения ясности вот куски моего кода:
Код
void CWORDSnifferView::OnDraw(CDC* pDC){

CWORDSnifferDoc *pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(0, 0, pDoc->pstrStringData);
}


Вот именно окно создающееся здесь не восприимчиво к OnDraw
Код


void CMainFrame::OnNew()
{
CChildFrame *pChildWnd = new CChildFrame;
if(!pChildWnd->Create(NULL, _T("Please open file"),
0, rectDefault, this))
 return;
}



Все обновления типа Invalidate или UpdateAllViews я уже сто раз перепробовал, тут дело не в них. И Еще не ясно почему первое окно появляется без всякого вызова. То есть его вызов как будто запрятан внутри MFC?

Автор: Step 7.12.2002, 07:14
Обрати внимание что ты на самом деле создаеш не окно а рамку, а ОнДрав реализована для объекта класса производного от ВИД, а не от Фрейм


Успехов.

Автор: Royan 7.12.2002, 08:54
Это ты точно подметил я все понял, эх что-то даже обидно, что сам недопёр. Хоть я сейчас поступил несколько иначе, подскажи мне пожалуйста:

1) Как мне заставить не открываться child окно, которое автоматом появляется вместе с родительским при запуске приложения. Это, например, если сзодать MDI через визарда(ну чтобы понятно было о чем я говорю)

2) Можно ли из класса CMyDoc достать объект окна к которому он относиться? Это мне пока не зачем, но просто интересно.

Автор: Step 7.12.2002, 19:59
Цитата(Royan @ 07.12.2002, 00:54)
Это ты точно подметил я все понял, эх что-то даже обидно, что сам недопёр. Хоть я сейчас поступил несколько иначе, подскажи мне пожалуйста:

1) Как мне заставить не открываться child окно, которое автоматом появляется вместе с родительским при запуске приложения. Это, например, если сзодать MDI через визарда(ну чтобы понятно было о чем я говорю)

2) Можно ли из класса CMyDoc достать объект окна к которому он относиться? Это мне пока не зачем, но просто интересно.

Вопрос конечно интересный, попробую подсказать по 2 пункту.
в клас ДОК вставь укзательн на вид, не инициализирую его.
После при создании вида вызови функциию ГетДокумент результат преобразуй в тип твоего класа Документу и через полученный указатель на документ доберись до созданого указателя на вид и присвой ему this.
после этого через указатель на вид ты будеш иметь доступ к виду из документа.

Успехов.

Автор: Royan 7.12.2002, 22:50
Ну по поводу второго вопроса план действий понятен, а вот по поводу первого, в моем случае как бы даже необходим. Скажем так, возможно, это окно убрать без обработки события OnFileNew?

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