1cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// Windows/Control/Dialog.h 2cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 3cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef __WINDOWS_CONTROL_DIALOG_H 4cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define __WINDOWS_CONTROL_DIALOG_H 5cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 6cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../Window.h" 7cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 8cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckynamespace NWindows { 9cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckynamespace NControl { 10cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 11cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass CDialog: public CWindow 12cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 13cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic: 14cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CDialog(HWND wnd = NULL): CWindow(wnd){}; 15cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual ~CDialog() {}; 16cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 17cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky HWND GetItem(int itemID) const 18cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return GetDlgItem(_window, itemID); } 19cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 20cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool EnableItem(int itemID, bool enable) const 21cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return BOOLToBool(::EnableWindow(GetItem(itemID), BoolToBOOL(enable))); } 22cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 23cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool ShowItem(int itemID, int cmdShow) const 24cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return BOOLToBool(::ShowWindow(GetItem(itemID), cmdShow)); } 25cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 26cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool ShowItem_Bool(int itemID, bool show) const 27cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return ShowItem(itemID, show ? SW_SHOW: SW_HIDE); } 28cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 29cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool HideItem(int itemID) const { return ShowItem(itemID, SW_HIDE); } 30cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 31cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool SetItemText(int itemID, LPCTSTR s) 32cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return BOOLToBool(SetDlgItemText(_window, itemID, s)); } 33cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 34cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifndef _UNICODE 35cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool SetItemText(int itemID, LPCWSTR s) 36cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 37cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CWindow window(GetItem(itemID)); 38cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return window.SetText(s); 39cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 40cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 41cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 42cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UINT GetItemText(int itemID, LPTSTR string, int maxCount) 43cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return GetDlgItemText(_window, itemID, string, maxCount); } 44cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifndef _UNICODE 45cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky /* 46cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool GetItemText(int itemID, LPWSTR string, int maxCount) 47cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 48cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CWindow window(GetItem(itemID)); 49cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return window.GetText(string, maxCount); 50cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 51cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky */ 52cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 53cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 54cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool SetItemInt(int itemID, UINT value, bool isSigned) 55cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return BOOLToBool(SetDlgItemInt(_window, itemID, value, BoolToBOOL(isSigned))); } 56cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool GetItemInt(int itemID, bool isSigned, UINT &value) 57cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 58cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky BOOL result; 59cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky value = GetDlgItemInt(_window, itemID, &result, BoolToBOOL(isSigned)); 60cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return BOOLToBool(result); 61cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 62cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 63cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky HWND GetNextGroupItem(HWND control, bool previous) 64cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return GetNextDlgGroupItem(_window, control, BoolToBOOL(previous)); } 65cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky HWND GetNextTabItem(HWND control, bool previous) 66cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return GetNextDlgTabItem(_window, control, BoolToBOOL(previous)); } 67cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 68cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool MapRect(LPRECT rect) 69cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return BOOLToBool(MapDialogRect(_window, rect)); } 70cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 71cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool IsMessage(LPMSG message) 72cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return BOOLToBool(IsDialogMessage(_window, message)); } 73cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 74cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky LRESULT SendItemMessage(int itemID, UINT message, WPARAM wParam, LPARAM lParam) 75cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return SendDlgItemMessage(_window, itemID, message, wParam, lParam); } 76cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 77cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool CheckButton(int buttonID, UINT checkState) 78cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return BOOLToBool(CheckDlgButton(_window, buttonID, checkState)); } 79cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool CheckButton(int buttonID, bool checkState) 80cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return CheckButton(buttonID, UINT(checkState ? BST_CHECKED : BST_UNCHECKED)); } 81cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 82cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UINT IsButtonChecked(int buttonID) const 83cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return IsDlgButtonChecked(_window, buttonID); } 84cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool IsButtonCheckedBool(int buttonID) const 85cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return (IsButtonChecked(buttonID) == BST_CHECKED); } 86cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 87cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool CheckRadioButton(int firstButtonID, int lastButtonID, int checkButtonID) 88cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return BOOLToBool(::CheckRadioButton(_window, firstButtonID, lastButtonID, checkButtonID)); } 89cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 90cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam); 91cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual bool OnInit() { return true; } 92cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual bool OnCommand(WPARAM wParam, LPARAM lParam); 93cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual bool OnCommand(int code, int itemID, LPARAM lParam); 94cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual bool OnSize(WPARAM /* wParam */, int /* xSize */, int /* ySize */) { return false; } 95cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 96cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky /* 97cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifdef UNDER_CE 98cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void OnHelp(void *) { OnHelp(); }; 99cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #else 100cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void OnHelp(LPHELPINFO) { OnHelp(); }; 101cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 102cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky */ 103cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void OnHelp() {}; 104cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 105cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual bool OnButtonClicked(int buttonID, HWND buttonHWND); 106cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void OnOK() {}; 107cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void OnCancel() {}; 108cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual bool OnNotify(UINT /* controlID */, LPNMHDR /* lParam */) { return false; } 109cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual bool OnTimer(WPARAM /* timerID */, LPARAM /* callback */) { return false; } 110cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 111cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky LONG_PTR SetMsgResult(LONG_PTR newLongPtr ) 112cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return SetLongPtr(DWLP_MSGRESULT, newLongPtr); } 113cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky LONG_PTR GetMsgResult() const 114cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { return GetLongPtr(DWLP_MSGRESULT); } 115cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 116cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool GetMargins(int margin, int &x, int &y); 117cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int Units_To_Pixels_X(int units); 118cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool GetItemSizes(int id, int &x, int &y); 119cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void GetClientRectOfItem(int id, RECT &rect); 120cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool MoveItem(int id, int x, int y, int width, int height, bool repaint = true); 121cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 122cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void NormalizeSize(bool fullNormalize = false); 123cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void NormalizePosition(); 124cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 125cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 126cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass CModelessDialog: public CDialog 127cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 128cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic: 129cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool Create(LPCTSTR templateName, HWND parentWindow); 130cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool Create(UINT resID, HWND parentWindow) { return Create(MAKEINTRESOURCEW(resID), parentWindow); } 131cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifndef _UNICODE 132cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool Create(LPCWSTR templateName, HWND parentWindow); 133cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 134cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void OnOK() { Destroy(); } 135cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void OnCancel() { Destroy(); } 136cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 137cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 138cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass CModalDialog: public CDialog 139cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 140cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic: 141cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky INT_PTR Create(LPCTSTR templateName, HWND parentWindow); 142cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky INT_PTR Create(UINT resID, HWND parentWindow) { return Create(MAKEINTRESOURCEW(resID), parentWindow); } 143cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifndef _UNICODE 144cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky INT_PTR Create(LPCWSTR templateName, HWND parentWindow); 145cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 146cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 147cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool End(INT_PTR result) { return BOOLToBool(::EndDialog(_window, result)); } 148cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void OnOK() { End(IDOK); } 149cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky virtual void OnCancel() { End(IDCANCEL); } 150cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 151cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 152cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass CDialogChildControl: public NWindows::CWindow 153cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 154cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int m_ID; 155cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic: 156cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Init(const NWindows::NControl::CDialog &parentDialog, int id) 157cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 158cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky m_ID = id; 159cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky Attach(parentDialog.GetItem(id)); 160cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 161cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 162cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 163cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool IsDialogSizeOK(int xSize, int ySize); 164cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 165cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}} 166cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 167cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif 168