@Fly3110
web developer

Нужна ли DlgProc при использовании собственного класса для диалога?

Всем привет.

В качестве главного окна программы я создаю диалог из ресурсов с помощью CreateDialogParam. В свойствах диалога прописан класс, при регистрации которого я, естественно, указал WndProc. При создании диалога я указываю DlgProc.

Вопрос такой, какие события надо обрабатывать в DlgProc, а какие в WndProc?
Верно ли я понимаю из цитаты ниже, что в моем случае DlgProc вообще можно не использовать?

You should use the dialog box procedure only if you use the dialog box class for the dialog box. This is the default class and is used when no explicit class is specified in the dialog box template. Although the dialog box procedure is similar to a window procedure, it must not call the DefWindowProc function to process unwanted messages. Unwanted messages are processed internally by the dialog box window procedure.


Если я это понимаю верно, то как должна работать WndProc? Как WndProc, то есть вызывать DefWindowProc и.т.д, или как DlgProc, то есть НЕ вызывать DefWindowProc и возвращать true, если мы сами обработали событие внутри функции?
  • Вопрос задан
  • 44 просмотра
Решения вопроса 1
SerJook
@SerJook
кодер
Оконный класс должен быть зарегистрирован с
wc.cbWndExtra = DLGWINDOWEXTRA;
В оконной процедуре (WndProc) класса нужно реализовать общий функционал для всех диалогов данного класса и вызывать DefDlgProc. Эта функция пересылает сообщения в DlgProc, и обеспечивает дефолтную обработку для тех сообщений, для которых DlgProc вернула FALSE.

В диалоговой процедуре DlgProc, которую вы передаете в CreateDialogParam, реализуйте функционал для конкретного диалога.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы