#include "precomp.hxx" #include "dialog.h" INT_PTR Dialog::DialogStaticDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { Dialog *pThis; pThis = (Dialog*) GetWindowLongPtr(hDlg, DWLP_USER); if (msg == WM_INITDIALOG) { pThis = (Dialog *) lParam; pThis->hDlg = hDlg; SetWindowLongPtr(hDlg, DWLP_USER, (ULONG_PTR) pThis); return pThis->OnInitDialog(hDlg); } if (pThis) { return pThis->MainDlgProc(msg, wParam, lParam); } return FALSE; } INT_PTR Dialog::MainDlgProc(UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_COMMAND: HandleCommand((UINT) LOWORD(wParam), (HWND)lParam, (UINT)HIWORD(wParam)); return FALSE; case WM_HELP: return OnHelp((LPHELPINFO) lParam); case WM_CONTEXTMENU: return OnContextMenu(wParam, lParam); case WM_NOTIFY: return OnNotify((NMHDR *)lParam); } return DlgProc(msg, wParam, lParam); } void Dialog::HandleCommand(UINT ctrlId, HWND hwndCtrl, UINT cNotify) { switch (ctrlId) { case IDOK: OnOK(); break; case IDCANCEL: OnCancel(); break; default: OnCommand(ctrlId, hwndCtrl, cNotify); break; } } UINT Dialog::ShowModal(HWND hwndParent) { DialogBoxParam(hInstance, MAKEINTRESOURCE(resID), hwndParent, DialogStaticDlgProc, (DWORD_PTR) this); return result; } HICON Dialog::SetIcon(UINT iconID, BOOL bLarge) { HICON hIcon; int size; size = bLarge ? 32 : 16; hIcon = (HICON) LoadImage(hInstance, MAKEINTRESOURCE(iconID), IMAGE_ICON, size, size, 0); return (HICON) ::SendMessage(hDlg, WM_SETICON, bLarge ? ICON_BIG : ICON_SMALL, (LPARAM) hIcon); } void Dialog::CenterWindow(HWND hwnd) { RECT me; RECT parent; if (hwnd == NULL) { hwnd = GetDesktopWindow(); } GetWindowRect(hDlg, &me); GetWindowRect(hwnd, &parent); int meWidth = me.right - me.left, meHeight = me.bottom - me.top; int parentWidth = parent.right - parent.left, parentHeight = parent.bottom - parent.top; int widthOffset = (parentWidth - meWidth)/2, heightOffset = (parentHeight - meHeight)/2; me.left = parent.left + widthOffset; me.top = parent.top + heightOffset; SetWindowPos(hDlg, NULL, me.left, me.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER); }