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