• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
SetItemTextA(int itemID,LPCSTR s)34   bool SetItemTextA(int itemID, LPCSTR s)
35     { return BOOLToBool(SetDlgItemTextA(_window, itemID, s)); }
36 
SetItemText_Empty(int itemID)37   bool SetItemText_Empty(int itemID)
38     { return SetItemText(itemID, TEXT("")); }
39 
40   #ifndef _UNICODE
SetItemText(int itemID,LPCWSTR s)41   bool SetItemText(int itemID, LPCWSTR s)
42   {
43     CWindow window(GetItem(itemID));
44     return window.SetText(s);
45   }
46   #endif
47 
GetItemText(int itemID,LPTSTR string,int maxCount)48   UINT GetItemText(int itemID, LPTSTR string, int maxCount)
49     { return GetDlgItemText(_window, itemID, string, maxCount); }
50   #ifndef _UNICODE
51   /*
52   bool GetItemText(int itemID, LPWSTR string, int maxCount)
53   {
54     CWindow window(GetItem(itemID));
55     return window.GetText(string, maxCount);
56   }
57   */
58   #endif
59 
GetItemText(int itemID,UString & s)60   bool GetItemText(int itemID, UString &s)
61   {
62     CWindow window(GetItem(itemID));
63     return window.GetText(s);
64   }
65 
SetItemInt(int itemID,UINT value,bool isSigned)66   bool SetItemInt(int itemID, UINT value, bool isSigned)
67     { return BOOLToBool(SetDlgItemInt(_window, itemID, value, BoolToBOOL(isSigned))); }
GetItemInt(int itemID,bool isSigned,UINT & value)68   bool GetItemInt(int itemID, bool isSigned, UINT &value)
69   {
70     BOOL result;
71     value = GetDlgItemInt(_window, itemID, &result, BoolToBOOL(isSigned));
72     return BOOLToBool(result);
73   }
74 
GetNextGroupItem(HWND control,bool previous)75   HWND GetNextGroupItem(HWND control, bool previous)
76     { return GetNextDlgGroupItem(_window, control, BoolToBOOL(previous)); }
GetNextTabItem(HWND control,bool previous)77   HWND GetNextTabItem(HWND control, bool previous)
78     { return GetNextDlgTabItem(_window, control, BoolToBOOL(previous)); }
79 
SendMsg_NextDlgCtl(WPARAM wParam,LPARAM lParam)80   LRESULT SendMsg_NextDlgCtl(WPARAM wParam, LPARAM lParam)
81     { return SendMsg(WM_NEXTDLGCTL, wParam, lParam); }
SendMsg_NextDlgCtl_HWND(HWND hwnd)82   LRESULT SendMsg_NextDlgCtl_HWND(HWND hwnd) { return SendMsg_NextDlgCtl((WPARAM)hwnd, TRUE); }
SendMsg_NextDlgCtl_CtlId(int id)83   LRESULT SendMsg_NextDlgCtl_CtlId(int id)   { return SendMsg_NextDlgCtl_HWND(GetItem(id)); }
SendMsg_NextDlgCtl_Next()84   LRESULT SendMsg_NextDlgCtl_Next()          { return SendMsg_NextDlgCtl(0, FALSE); }
SendMsg_NextDlgCtl_Prev()85   LRESULT SendMsg_NextDlgCtl_Prev()          { return SendMsg_NextDlgCtl(1, FALSE); }
86 
MapRect(LPRECT rect)87   bool MapRect(LPRECT rect)
88     { return BOOLToBool(MapDialogRect(_window, rect)); }
89 
IsMessage(LPMSG message)90   bool IsMessage(LPMSG message)
91     { return BOOLToBool(IsDialogMessage(_window, message)); }
92 
SendItemMessage(int itemID,UINT message,WPARAM wParam,LPARAM lParam)93   LRESULT SendItemMessage(int itemID, UINT message, WPARAM wParam, LPARAM lParam)
94     { return SendDlgItemMessage(_window, itemID, message, wParam, lParam); }
95 
CheckButton(int buttonID,UINT checkState)96   bool CheckButton(int buttonID, UINT checkState)
97     { return BOOLToBool(CheckDlgButton(_window, buttonID, checkState)); }
CheckButton(int buttonID,bool checkState)98   bool CheckButton(int buttonID, bool checkState)
99     { return CheckButton(buttonID, UINT(checkState ? BST_CHECKED : BST_UNCHECKED)); }
100 
IsButtonChecked(int buttonID)101   UINT IsButtonChecked(int buttonID) const
102     { return IsDlgButtonChecked(_window, buttonID); }
IsButtonCheckedBool(int buttonID)103   bool IsButtonCheckedBool(int buttonID) const
104     { return (IsButtonChecked(buttonID) == BST_CHECKED); }
105 
CheckRadioButton(int firstButtonID,int lastButtonID,int checkButtonID)106   bool CheckRadioButton(int firstButtonID, int lastButtonID, int checkButtonID)
107     { return BOOLToBool(::CheckRadioButton(_window, firstButtonID, lastButtonID, checkButtonID)); }
108 
109   virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
OnInit()110   virtual bool OnInit() { return true; }
111   virtual bool OnCommand(WPARAM wParam, LPARAM lParam);
112   virtual bool OnCommand(int code, int itemID, LPARAM lParam);
OnSize(WPARAM,int,int)113   virtual bool OnSize(WPARAM /* wParam */, int /* xSize */, int /* ySize */) { return false; }
OnDestroy()114   virtual bool OnDestroy() { return false; }
115 
116   /*
117   #ifdef UNDER_CE
118   virtual void OnHelp(void *) { OnHelp(); }
119   #else
120   virtual void OnHelp(LPHELPINFO) { OnHelp(); }
121   #endif
122   */
OnHelp()123   virtual void OnHelp() {};
124 
125   virtual bool OnButtonClicked(int buttonID, HWND buttonHWND);
OnOK()126   virtual void OnOK() {};
OnCancel()127   virtual void OnCancel() {};
OnClose()128   virtual void OnClose() {}
OnNotify(UINT,LPNMHDR)129   virtual bool OnNotify(UINT /* controlID */, LPNMHDR /* lParam */) { return false; }
OnTimer(WPARAM,LPARAM)130   virtual bool OnTimer(WPARAM /* timerID */, LPARAM /* callback */) { return false; }
131 
SetMsgResult(LONG_PTR newLongPtr)132   LONG_PTR SetMsgResult(LONG_PTR newLongPtr )
133     { return SetLongPtr(DWLP_MSGRESULT, newLongPtr); }
GetMsgResult()134   LONG_PTR GetMsgResult() const
135     { return GetLongPtr(DWLP_MSGRESULT); }
136 
137   bool GetMargins(int margin, int &x, int &y);
138   int Units_To_Pixels_X(int units);
139   bool GetItemSizes(int id, int &x, int &y);
140   void GetClientRectOfItem(int id, RECT &rect);
141   bool MoveItem(int id, int x, int y, int width, int height, bool repaint = true);
142 
143   void NormalizeSize(bool fullNormalize = false);
144   void NormalizePosition();
145 };
146 
147 class CModelessDialog: public CDialog
148 {
149 public:
150   bool Create(LPCTSTR templateName, HWND parentWindow);
Create(UINT resID,HWND parentWindow)151   bool Create(UINT resID, HWND parentWindow) { return Create(MAKEINTRESOURCEW(resID), parentWindow); }
152   #ifndef _UNICODE
153   bool Create(LPCWSTR templateName, HWND parentWindow);
154   #endif
OnOK()155   virtual void OnOK() { Destroy(); }
OnCancel()156   virtual void OnCancel() { Destroy(); }
OnClose()157   virtual void OnClose() { Destroy(); }
158 };
159 
160 class CModalDialog: public CDialog
161 {
162 public:
163   INT_PTR Create(LPCTSTR templateName, HWND parentWindow);
Create(UINT resID,HWND parentWindow)164   INT_PTR Create(UINT resID, HWND parentWindow) { return Create(MAKEINTRESOURCEW(resID), parentWindow); }
165   #ifndef _UNICODE
166   INT_PTR Create(LPCWSTR templateName, HWND parentWindow);
167   #endif
168 
End(INT_PTR result)169   bool End(INT_PTR result) { return BOOLToBool(::EndDialog(_window, result)); }
OnOK()170   virtual void OnOK() { End(IDOK); }
OnCancel()171   virtual void OnCancel() { End(IDCANCEL); }
OnClose()172   virtual void OnClose() { End(IDCLOSE); }
173 };
174 
175 class CDialogChildControl: public NWindows::CWindow
176 {
177   int m_ID;
178 public:
Init(const NWindows::NControl::CDialog & parentDialog,int id)179   void Init(const NWindows::NControl::CDialog &parentDialog, int id)
180   {
181     m_ID = id;
182     Attach(parentDialog.GetItem(id));
183   }
184 };
185 
186 bool IsDialogSizeOK(int xSize, int ySize, HWND hwnd = NULL);
187 
188 }}
189 
190 #endif
191