Учебное пособие: Подклассы окон
Вообще нам может понадобиться порождать подкласс и от модального диалога. В этом случае подмену процедуры обработки сообщений лучше производить в функции диалога при обработке сообщения WM_INITDIALOG:
FARPROC lpfnOwnProc;
LONG PASCAL FAR _export OwnDlgProc(
HWND hWnd, UINT wMsg, UINT wPar, LONG lPar
) {
// см. выше
}
FARPROC lpfnDlgProc;
BOOL PASCAL FAR _export DlgProc(
HWND hWnd, UINT wMsg, UINT wPar, LONG lPar
) {
switch ( wMsg ) {
case WM_INITDIALOG:
/*
установить новую оконную процедуру и запретить вызов
данной функции диалога:
*/
SetWindowLong( hWnd, GWL_WNDPROC, (LONG)lpfnOwnProc );
SetWindowLong( hWnd, DWL_DLGPROC, (LONG)NULL );
/*
если мы устанавливаем новую функцию при обработке сообщения
WM_INITDIALOG, то наша новая функция его уже не получит. Поэтому нам
надо послать какое-либо специальное сообщение или вызвать отдельную
функцию для первоначальной ?