Как в программах (скажем в NERO) делают десктоп - на котором куча баттонов, контролов итд. Я так понимаю мы делаем RegisterClass + CreateWindow - там иконка, менюшка, курсор, процедура работы с окном и еще куча параметров. Но где указывается собственно ЧТО на окне будет нарисовано? Или это делается при первом вызове оконной процедуры? Тогда какими функциями это делается из нее?
Все просто. Почитай про WM_PAINT. Ага и еще как я думаю там создается не один класс и каждый имеет свои параметры.
Хорошо, но вот сейчас разбираю MFC-шную прогу, в ней сообщение WM_PAINT не перехватывается. А все рисуется. Хотя я не спорю в самой MFC оно может и обрабатывается но там же только независимая от приложения часть?
Когда одно окно затирает часть другого в результате юзерских операций, при восстановлении ему пошлют WM_PAINT и оно должно будет отрисовать по крайней мере затертую часть. Кроме контролов - их винда отрисовывает сама (неклиентские части).
Я имею в виду откуда берутся контролы в некой MFC-шной проге если WM_PAINT она не обрабатывает? Хоть раз то получается должна обработать чтоб накидать контролы в окно?
Если ты про диалоговое окно, то его контролы винда сама отрисовывает. Даже без MFC если создавать через винапи DialogBoxParam. Такая же фигня в одно/многодокумнентных приложениях MFC на базе CFormView - там тоже можно накидать контролы и винда/MFC (не помню точно кто из них) будет самостоятельно отрисовывать их. Тебе лишь сообщения обрабатывать остается.
Нет, у меня сначала создается класс, потом окно, потом насколько я помню Document Template, причем вроде MDI
В общем примерно разобрался. Приложение перехватывает метод MFC CWnd::Create - и там создает свои контролы. Так может быть?