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


Автор: tilser 22.6.2007, 18:13
Имеется обычный диалог из визарда. Далее допустим я создал новый класс - наследник от CFrameWnd, допустим MyNewWnd.
Далее в своей проге(допустим по нажатии какой-нибудь кнопки) создаю свое окошко:

Код

MyNewWnd *NewWnd = new MyNewWnd();
NewWnd->ShowWindow(SW_SHOW);
NewWnd->UpdateWindow();

Теперь парочка вопросов. Как описать для моего нового окошка скажем событие OnPaint.
В файле MyNewWnd.cpp есть карта сообщений
Код

BEGIN_MESSAGE_MAP(MyNewWnd, CFrameWnd)

END_MESSAGE_MAP()

там нужно написать 
Код

afx_msg void OnPaint();

а где описать именно то что будет в этом событии?

Автор: Earnest 22.6.2007, 20:56
Цитата(tilser @  22.6.2007,  19:13 Найти цитируемый пост)
там нужно написать 

Это нужно написать в определении класса, а в карту сообщений нужно добавить WM_PAINT().
Соответственно, в реализации обработчика OnPaint нужно писать "что будет в этом событии"

Автор: zkv 22.6.2007, 21:07
Цитата(tilser @  22.6.2007,  18:13 Найти цитируемый пост)
MyNewWnd *NewWnd = new MyNewWnd();
NewWnd->ShowWindow(SW_SHOW);
NewWnd->UpdateWindow();

это, кстати не сработает, еще надо создать окно: 
Код

MyNewWnd *NewWnd = new MyNewWnd();
//надо создать окно! 
NewWnd->Create(/*что-то там*/);
NewWnd->ShowWindow(SW_SHOW);
NewWnd->UpdateWindow();

Автор: tilser 22.6.2007, 21:12
zkv, у меня Create в конструкторе описано smile 

Автор: tilser 22.6.2007, 21:28
делаю так 
Код

BEGIN_MESSAGE_MAP(MyNewWnd, CFrameWnd)
WM_PAINT()
END_MESSAGE_MAP()

выдает ошибки:
term does not evaluate to a function taking 0 arguments
cannot allocate an array of constant size 0
 'TheBaseClass' : is not a class or namespace name
 'GetThisMessageMap' : undeclared identifier
 '_messageEntries' : undeclared identifier
 smile 

Автор: zkv 22.6.2007, 23:09
Код

BEGIN_MESSAGE_MAP(MyNewWnd, CFrameWnd)
    ON_WM_PAINT()
END_MESSAGE_MAP()


Цитата(tilser @  22.6.2007,  21:12 Найти цитируемый пост)
у меня Create в конструкторе описано

а вдруг впоследствии объект в стеке захочешь создать?

Автор: tilser 23.6.2007, 12:46
Цитата(zkv @  22.6.2007,  23:09 Найти цитируемый пост)
а вдруг впоследствии объект в стеке захочешь создать? 

Не захочу smile 
Даже если захочу, иисправлять недолго.

Цитата(zkv @  22.6.2007,  23:09 Найти цитируемый пост)
ON_WM_PAINT()


zkv, спасибо
ЗЫ Моя невнимательность меня когда-нибудь погубит smile 

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