#include "dlg.h" #include "utils.h" #include INT_PTR Dlg_MsgProc(const MSD *pmsd, HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { MMF mmf; INT_PTR fResult = FALSE; if (msg == WM_SETFONT) { // MACRO_LI_SmartRemoveFlags(LIF_LINE); // Out(LI0("Dialog is created...")); } ASSERT(pmsd != NULL); for (; pmsd->ms != ms_end; pmsd++) if (pmsd->msg == msg) { mmf.pfn = pmsd->pfn; switch (pmsd->ms) { case ms_lwwwl: fResult = (INT_PTR)(*mmf.pfn_lwwwl)(hDlg, msg, wp, lp); break; case ms_bwwwl: fResult = (*mmf.pfn_bwwwl)(hDlg, msg, wp, lp); break; case ms_vv: (*mmf.pfn_vv)(); fResult = TRUE; break; case ms_bv: fResult = (*mmf.pfn_bv)(); break; case ms_vw: (*mmf.pfn_vw)(wp); fResult = TRUE; break; case ms_vh: (*mmf.pfn_vh)(hDlg); fResult = TRUE; break; case ms_bh: fResult = (*mmf.pfn_bh)(hDlg); break; case ms_bhl: fResult = (*mmf.pfn_bhl)(hDlg, lp); break; default: ASSERT(FALSE); } break; } if (msg == WM_NCDESTROY) { // MACRO_LI_SmartRemoveFlags(LIF_LINE); // Out(LI0("Dialog is destroying...")); } return fResult; } BOOL Msg_OnCmd(const CMD *pcmd, HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { MMF mmf; UINT nID = GET_WM_COMMAND_ID(wp, lp); BOOL fResult = FALSE; //----- Look for message map entry ----- for (; pcmd->ms != ms_end; pcmd++) if ((pcmd->nLastID <= pcmd->nID && pcmd->nID == nID) || (nID >= pcmd->nID && nID <= pcmd->nLastID)) break; if (pcmd->ms == ms_end) { if (nID == IDOK || nID == IDCANCEL) EndDialog(hDlg, nID); return fResult; } //----- Dispatch based on function signature ----- mmf.pfn = pcmd->pfn; switch (pcmd->ms) { case ms_vv: (*mmf.pfn_vv)(); fResult = TRUE; break; case ms_bv: fResult = (*mmf.pfn_bv)(); break; case ms_vw: (*mmf.pfn_vw)(nID); fResult = TRUE; break; case ms_vh: (*mmf.pfn_vh)(hDlg); fResult = TRUE; break; case ms_bh: fResult = (*mmf.pfn_bh)(hDlg); break; case ms_vhww: (*mmf.pfn_vhww)(hDlg, nID, GET_WM_COMMAND_CMD(wp, lp)); fResult = TRUE; break; case ms_vhhw: (*mmf.pfn_vhhw)(hDlg, GetDlgItem(hDlg, nID), GET_WM_COMMAND_CMD(wp, lp)); fResult = TRUE; break; default: ASSERT(FALSE); } //----- Special processing ----- if (nID == IDOK || nID == IDCANCEL) if (pcmd->ms != ms_end) { if (fResult) EndDialog(hDlg, nID); } else EndDialog(hDlg, nID); return fResult; }