OSDN Git Service

TrDialogs.h: Use CRTP
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sat, 20 Feb 2016 00:59:02 +0000 (09:59 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sat, 20 Feb 2016 00:59:02 +0000 (09:59 +0900)
Src/TrDialogs.h

index 0d2bd04..6eba09e 100644 (file)
@@ -2,34 +2,37 @@
 \r
 #include "DDXHelper.h"\r
 \r
-namespace DlgUtils\r
+#undef GetDlgItemText\r
+#undef SetDlgItemText\r
+\r
+template<class T>\r
+class DlgUtils\r
 {\r
-       template <class T>\r
-       void EnableDlgItem(T* dlg, unsigned id, bool enabled)\r
+       T *dlg() { return static_cast<T *>(this); }\r
+\r
+public:\r
+       void EnableDlgItem(unsigned id, bool enabled)\r
        {\r
-               dlg->GetDlgItem(id)->EnableWindow(enabled);\r
+               dlg()->GetDlgItem(id)->EnableWindow(enabled);\r
        }\r
 \r
-       template <class T>\r
-       void SetDlgItemFocus(T* dlg, unsigned id)\r
+       void SetDlgItemFocus(unsigned id)\r
        {\r
-               dlg->GetDlgItem(id)->SetFocus();\r
+               dlg()->GetDlgItem(id)->SetFocus();\r
        }\r
 \r
-       template <class T>\r
-       unsigned GetDlgItemText(T* dlg, unsigned id, String& text)\r
+       unsigned GetDlgItemText(unsigned id, String& text)\r
        {\r
-               return static_cast<CWnd *>(dlg)->GetDlgItemText(id, PopString(text));\r
+               return dlg()->GetDlgItemTextW(id, PopString(text));\r
        }\r
 \r
-       template <class T>\r
-       void SetDlgItemText(T* dlg, unsigned id, const String& text)\r
+       void SetDlgItemText(unsigned id, const String& text)\r
        {\r
-               return static_cast<CWnd *>(dlg)->SetDlgItemText(id, text.c_str());\r
+               return dlg()->SetDlgItemTextW(id, text.c_str());\r
        }\r
-}\r
+};\r
 \r
-class CTrDialog : public CDialog\r
+class CTrDialog : public CDialog, public DlgUtils<CTrDialog>\r
 {\r
        DECLARE_DYNAMIC(CTrDialog)\r
 public:\r
@@ -38,13 +41,9 @@ public:
        CTrDialog(LPCTSTR lpszTemplateName, CWnd *pParentWnd = NULL) : CDialog(lpszTemplateName, pParentWnd) {}\r
 \r
        virtual BOOL OnInitDialog();\r
-       void EnableDlgItem(unsigned id, bool enabled) { DlgUtils::EnableDlgItem(this, id, enabled); }\r
-       void SetDlgItemFocus(unsigned id) { DlgUtils::SetDlgItemFocus(this, id); }\r
-       unsigned GetDlgItemText(unsigned id, String& text) { return DlgUtils::GetDlgItemText(this, id, text); }\r
-       void SetDlgItemText(unsigned id, const String& text) { DlgUtils::SetDlgItemText(this, id, text); }\r
 };\r
 \r
-class CTrPropertyPage : public CPropertyPage\r
+class CTrPropertyPage : public CPropertyPage, public DlgUtils<CTrPropertyPage>\r
 {\r
        DECLARE_DYNAMIC(CTrPropertyPage)\r
 public:\r
@@ -55,13 +54,9 @@ public:
                : CPropertyPage(lpszTemplateName, nIDCaption, dwSize) {}\r
 \r
        virtual BOOL OnInitDialog();\r
-       void EnableDlgItem(unsigned id, bool enabled) { DlgUtils::EnableDlgItem(this, id, enabled); }\r
-       void SetDlgItemFocus(unsigned id) { DlgUtils::SetDlgItemFocus(this, id); }\r
-       unsigned GetDlgItemText(unsigned id, String& text) { return DlgUtils::GetDlgItemText(this, id, text); }\r
-       void SetDlgItemText(unsigned id, const String& text) { DlgUtils::SetDlgItemText(this, id, text); }\r
 };\r
 \r
-class CTrDialogBar : public CDialogBar\r
+class CTrDialogBar : public CDialogBar, public DlgUtils<CTrDialogBar>\r
 {\r
        DECLARE_DYNAMIC(CTrDialogBar)\r
 public:\r
@@ -69,8 +64,4 @@ public:
                UINT nStyle, UINT nID);\r
        virtual BOOL Create(CWnd* pParentWnd, UINT nIDTemplate,\r
                UINT nStyle, UINT nID);\r
-       void EnableDlgItem(unsigned id, bool enabled) { DlgUtils::EnableDlgItem(this, id, enabled); }\r
-       void SetDlgItemFocus(unsigned id) { DlgUtils::SetDlgItemFocus(this, id); }\r
-       unsigned GetDlgItemText(unsigned id, String& text) { return DlgUtils::GetDlgItemText(this, id, text); }\r
-       void SetDlgItemText(unsigned id, const String& text) { DlgUtils::SetDlgItemText(this, id, text); }\r
 };\r