Изучая примеры из книжки Рихтера, наткнулся что он процедуру диалогового окна описывает следующим образом:
INT_PTR WINAPI Dlg_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Dlg_OnInitDialog);
chHANDLE_DLGMSG(hwnd, WM_SIZE, Dlg_OnSize);
chHANDLE_DLGMSG(hwnd, WM_COMMAND, Dlg_OnCommand);
}
return(FALSE);
}
Подстановка макроса chHANDLE_DLGMSG(hwnd, WM_COMMAND, Dlg_OnCommand) приведет нас к следующему выражению:
case (WM_COMMAND): return
( SetWindowLongPtr(hwnd, DWLP_MSGRESULT, (LPARAM)(LRESULT)(Dlg_OnCommand(hwnd, (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)),0L), TRUE );
т.е мы возращаем
TRUE
попутно выполняя
Dlg_OnCommand(hwnd, (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam));
и выполняя
SetWindowLongPtr(hwnd, DWLP_MSGRESULT, 0);
собственно стало интересно с какой целью выполняется SetWindowLongPtr? (DWLP_MSGRESULT Устанавливает возвращаемое значение сообщения, обработанного в процедуре диалогового окна)
заменил
chHANDLE_DLGMSG(hwnd, WM_COMMAND, Dlg_OnCommand);
на
case WM_COMMAND : return (Dlg_OnCommand(hwnd, (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)), TRUE) ;
— никаких изменений в работе программы не заметил