annotate foosdk/wtl/Include/atlddx.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 // Windows Template Library - WTL version 10.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 // Copyright (C) Microsoft Corporation, WTL Team. All rights reserved.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 // This file is a part of the Windows Template Library.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 // The use and distribution terms for this software are covered by the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 // Microsoft Public License (http://opensource.org/licenses/MS-PL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 // which can be found in the file MS-PL.txt at the root folder.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 #ifndef __ATLDDX_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 #define __ATLDDX_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 #ifndef __ATLAPP_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 #error atlddx.h requires atlapp.h to be included first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 #include <float.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 // Classes in this file:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 // CWinDataExchange<T>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 // Constants
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 #define DDX_LOAD FALSE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 #define DDX_SAVE TRUE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 // DDX map macros
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 #define BEGIN_DDX_MAP(thisClass) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 BOOL DoDataExchange(BOOL bSaveAndValidate = FALSE, UINT nCtlID = (UINT)-1) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 (bSaveAndValidate); \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 (nCtlID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 #define DDX_TEXT(nID, var) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 if(!DDX_Text(nID, var, sizeof(var), bSaveAndValidate)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 return FALSE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 #define DDX_TEXT_LEN(nID, var, len) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 if(!DDX_Text(nID, var, sizeof(var), bSaveAndValidate, TRUE, len)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 return FALSE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 #define DDX_INT(nID, var) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 if(!DDX_Int(nID, var, TRUE, bSaveAndValidate)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 return FALSE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 #define DDX_INT_RANGE(nID, var, min, max) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 if(!DDX_Int(nID, var, TRUE, bSaveAndValidate, TRUE, min, max)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 return FALSE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 #define DDX_UINT(nID, var) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 if(!DDX_Int(nID, var, FALSE, bSaveAndValidate)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 return FALSE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 #define DDX_UINT_RANGE(nID, var, min, max) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 if(!DDX_Int(nID, var, FALSE, bSaveAndValidate, TRUE, min, max)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 return FALSE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 #define DDX_FLOAT(nID, var) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 if(!DDX_Float(nID, var, bSaveAndValidate)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 return FALSE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 #define DDX_FLOAT_RANGE(nID, var, min, max) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 if(!DDX_Float(nID, var, bSaveAndValidate, TRUE, min, max)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 return FALSE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 #define DDX_FLOAT_P(nID, var, precision) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 if(!DDX_Float(nID, var, bSaveAndValidate, FALSE, 0, 0, precision)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 return FALSE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 #define DDX_FLOAT_P_RANGE(nID, var, min, max, precision) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 { \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 if(!DDX_Float(nID, var, bSaveAndValidate, TRUE, min, max, precision)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 return FALSE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 #define DDX_CONTROL(nID, obj) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 DDX_Control(nID, obj, bSaveAndValidate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 #define DDX_CONTROL_HANDLE(nID, obj) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 DDX_Control_Handle(nID, obj, bSaveAndValidate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 #define DDX_CHECK(nID, var) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 DDX_Check(nID, var, bSaveAndValidate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 #define DDX_RADIO(nID, var) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 DDX_Radio(nID, var, bSaveAndValidate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 #define END_DDX_MAP() \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 return TRUE; \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 // DDX support for Tab, Combo, ListBox and ListView selection index
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 // Note: Specialized versions require atlctrls.h to be included first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 #define DDX_INDEX(CtrlClass, nID, var) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 if((nCtlID == (UINT)-1) || (nCtlID == nID)) \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 DDX_Index<CtrlClass>(nID, var, bSaveAndValidate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 #ifdef __ATLCTRLS_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 #define DDX_TAB_INDEX(nID, var) DDX_INDEX(WTL::CTabCtrl, nID, var)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 #define DDX_COMBO_INDEX(nID, var) DDX_INDEX(WTL::CComboBox, nID, var)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 #define DDX_LISTBOX_INDEX(nID, var) DDX_INDEX(WTL::CListBox, nID, var)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 #define DDX_LISTVIEW_INDEX(nID, var) DDX_INDEX(WTL::CListViewCtrl, nID, var)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 #endif // __ATLCTRLS_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 // CWinDataExchange - provides support for DDX
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 template <class T>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 class CWinDataExchange
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 // Data exchange method - override in your derived class
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 BOOL DoDataExchange(BOOL /*bSaveAndValidate*/ = FALSE, UINT /*nCtlID*/ = (UINT)-1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 // this one should never be called, override it in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 // your derived class by implementing DDX map
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 ATLASSERT(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 // Helpers for validation error reporting
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 enum _XDataType
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 ddxDataNull = 0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 ddxDataText = 1,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 ddxDataInt = 2,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 ddxDataFloat = 3,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 ddxDataDouble = 4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 struct _XTextData
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 int nLength;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 int nMaxLength;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 struct _XIntData
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 long nVal;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 long nMin;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 long nMax;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 struct _XFloatData
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 double nVal;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 double nMin;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 double nMax;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 struct _XData
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 _XDataType nDataType;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 union
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 _XTextData textData;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 _XIntData intData;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 _XFloatData floatData;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 // Text exchange
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 BOOL DDX_Text(UINT nID, LPTSTR lpstrText, int cbSize, BOOL bSave, BOOL bValidate = FALSE, int nLength = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 BOOL bSuccess = TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 if(bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 HWND hWndCtrl = pT->GetDlgItem(nID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 int nRetLen = ::GetWindowText(hWndCtrl, lpstrText, cbSize / sizeof(TCHAR));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 if(nRetLen < ::GetWindowTextLength(hWndCtrl))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 bSuccess = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 ATLASSERT(!bValidate || (lstrlen(lpstrText) <= nLength));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 bSuccess = pT->SetDlgItemText(nID, lpstrText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 if(!bSuccess)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 pT->OnDataExchangeError(nID, bSave);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 else if(bSave && bValidate) // validation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 ATLASSERT(nLength > 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 if(lstrlen(lpstrText) > nLength)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 _XData data = { ddxDataText };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 data.textData.nLength = lstrlen(lpstrText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 data.textData.nMaxLength = nLength;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 pT->OnDataValidateError(nID, bSave, data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 bSuccess = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 return bSuccess;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 BOOL DDX_Text(UINT nID, BSTR& bstrText, int /*cbSize*/, BOOL bSave, BOOL bValidate = FALSE, int nLength = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 BOOL bSuccess = TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 if(bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 bSuccess = pT->GetDlgItemText(nID, bstrText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 USES_CONVERSION;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 LPTSTR lpstrText = OLE2T(bstrText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 ATLASSERT(!bValidate || (lstrlen(lpstrText) <= nLength));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 bSuccess = pT->SetDlgItemText(nID, lpstrText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257 if(!bSuccess)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 pT->OnDataExchangeError(nID, bSave);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 else if(bSave && bValidate) // validation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 ATLASSERT(nLength > 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 if((int)::SysStringLen(bstrText) > nLength)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266 _XData data = { ddxDataText };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 data.textData.nLength = (int)::SysStringLen(bstrText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 data.textData.nMaxLength = nLength;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 pT->OnDataValidateError(nID, bSave, data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 bSuccess = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 return bSuccess;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 BOOL DDX_Text(UINT nID, ATL::CComBSTR& bstrText, int /*cbSize*/, BOOL bSave, BOOL bValidate = FALSE, int nLength = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 BOOL bSuccess = TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 if(bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 bSuccess = pT->GetDlgItemText(nID, (BSTR&)bstrText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 USES_CONVERSION;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 LPTSTR lpstrText = OLE2T(bstrText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289 ATLASSERT(!bValidate || (lstrlen(lpstrText) <= nLength));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 bSuccess = pT->SetDlgItemText(nID, lpstrText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293 if(!bSuccess)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 pT->OnDataExchangeError(nID, bSave);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 else if(bSave && bValidate) // validation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299 ATLASSERT(nLength > 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300 if((int)bstrText.Length() > nLength)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 _XData data = { ddxDataText };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 data.textData.nLength = (int)bstrText.Length();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304 data.textData.nMaxLength = nLength;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305 pT->OnDataValidateError(nID, bSave, data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306 bSuccess = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 return bSuccess;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 #ifdef __ATLSTR_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313 BOOL DDX_Text(UINT nID, ATL::CString& strText, int /*cbSize*/, BOOL bSave, BOOL bValidate = FALSE, int nLength = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 BOOL bSuccess = TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 if(bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320 HWND hWndCtrl = pT->GetDlgItem(nID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 int nLen = ::GetWindowTextLength(hWndCtrl);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322 int nRetLen = -1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 LPTSTR lpstr = strText.GetBufferSetLength(nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324 if(lpstr != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 nRetLen = ::GetWindowText(hWndCtrl, lpstr, nLen + 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327 strText.ReleaseBuffer();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 if(nRetLen < nLen)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 bSuccess = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 bSuccess = pT->SetDlgItemText(nID, strText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 if(!bSuccess)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339 pT->OnDataExchangeError(nID, bSave);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341 else if(bSave && bValidate) // validation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343 ATLASSERT(nLength > 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
344 if(strText.GetLength() > nLength)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346 _XData data = { ddxDataText };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347 data.textData.nLength = strText.GetLength();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348 data.textData.nMaxLength = nLength;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349 pT->OnDataValidateError(nID, bSave, data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350 bSuccess = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353 return bSuccess;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355 #endif // __ATLSTR_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357 // Numeric exchange
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358 template <class Type>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359 BOOL DDX_Int(UINT nID, Type& nVal, BOOL bSigned, BOOL bSave, BOOL bValidate = FALSE, Type nMin = 0, Type nMax = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362 BOOL bSuccess = TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364 if(bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
366 nVal = (Type)pT->GetDlgItemInt(nID, &bSuccess, bSigned);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
367 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
369 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
370 ATLASSERT(!bValidate || ((nVal >= nMin) && (nVal <= nMax)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 bSuccess = pT->SetDlgItemInt(nID, nVal, bSigned);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
372 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
373
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 if(!bSuccess)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376 pT->OnDataExchangeError(nID, bSave);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378 else if(bSave && bValidate) // validation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380 ATLASSERT(nMin != nMax);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 if((nVal < nMin) || (nVal > nMax))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
382 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
383 _XData data = { ddxDataInt };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384 data.intData.nVal = (long)nVal;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385 data.intData.nMin = (long)nMin;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386 data.intData.nMax = (long)nMax;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387 pT->OnDataValidateError(nID, bSave, data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388 bSuccess = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391 return bSuccess;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394 // Float exchange
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395 static BOOL _AtlSimpleFloatParse(LPCTSTR lpszText, double& d)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
397 ATLASSERT(lpszText != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
398 while ((*lpszText == _T(' ')) || (*lpszText == _T('\t')))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399 lpszText++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 TCHAR chFirst = lpszText[0];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 d = _tcstod(lpszText, (LPTSTR*)&lpszText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403 if ((d == 0.0) && (chFirst != _T('0')))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404 return FALSE; // could not convert
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405 while ((*lpszText == _T(' ')) || (*lpszText == _T('\t')))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406 lpszText++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408 if (*lpszText != _T('\0'))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 return FALSE; // not terminated properly
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
410
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
411 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
413
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
414 BOOL DDX_Float(UINT nID, float& nVal, BOOL bSave, BOOL bValidate = FALSE, float nMin = 0.F, float nMax = 0.F, int nPrecision = FLT_DIG)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
416 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
417 BOOL bSuccess = TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418 const int cchBuff = 32;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
419 TCHAR szBuff[cchBuff] = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
420
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421 if(bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
423 pT->GetDlgItemText(nID, szBuff, cchBuff);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
424 double d = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 if(_AtlSimpleFloatParse(szBuff, d))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
426 nVal = (float)d;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
427 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 bSuccess = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432 ATLASSERT(!bValidate || ((nVal >= nMin) && (nVal <= nMax)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433 _stprintf_s(szBuff, cchBuff, _T("%.*g"), nPrecision, nVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434 bSuccess = pT->SetDlgItemText(nID, szBuff);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
437 if(!bSuccess)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
438 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439 pT->OnDataExchangeError(nID, bSave);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 else if(bSave && bValidate) // validation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443 ATLASSERT(nMin != nMax);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 if((nVal < nMin) || (nVal > nMax))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446 _XData data = { ddxDataFloat };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447 data.floatData.nVal = (double)nVal;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448 data.floatData.nMin = (double)nMin;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
449 data.floatData.nMax = (double)nMax;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
450 pT->OnDataValidateError(nID, bSave, data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451 bSuccess = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454 return bSuccess;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
455 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
456
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
457 BOOL DDX_Float(UINT nID, double& nVal, BOOL bSave, BOOL bValidate = FALSE, double nMin = 0., double nMax = 0., int nPrecision = DBL_DIG)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
458 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
459 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
460 BOOL bSuccess = TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
461 const int cchBuff = 32;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
462 TCHAR szBuff[cchBuff] = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
463
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
464 if(bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
465 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
466 pT->GetDlgItemText(nID, szBuff, cchBuff);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
467 double d = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
468 if(_AtlSimpleFloatParse(szBuff, d))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
469 nVal = d;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
470 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
471 bSuccess = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
472 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
473 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
474 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
475 ATLASSERT(!bValidate || ((nVal >= nMin) && (nVal <= nMax)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
476 _stprintf_s(szBuff, cchBuff, _T("%.*g"), nPrecision, nVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
477 bSuccess = pT->SetDlgItemText(nID, szBuff);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
478 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
479
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
480 if(!bSuccess)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
481 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
482 pT->OnDataExchangeError(nID, bSave);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
483 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
484 else if(bSave && bValidate) // validation
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
485 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
486 ATLASSERT(nMin != nMax);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
487 if((nVal < nMin) || (nVal > nMax))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
488 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
489 _XData data = { ddxDataFloat };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
490 data.floatData.nVal = nVal;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
491 data.floatData.nMin = nMin;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
492 data.floatData.nMax = nMax;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
493 pT->OnDataValidateError(nID, bSave, data);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
494 bSuccess = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
495 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
496 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
497 return bSuccess;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
498 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
499
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
500 // Full control subclassing (for CWindowImpl derived controls)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
501 template <class TControl>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
502 void DDX_Control(UINT nID, TControl& ctrl, BOOL bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
503 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
504 if(!bSave && (ctrl.m_hWnd == NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
505 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
506 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
507 ctrl.SubclassWindow(pT->GetDlgItem(nID));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
508 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
509 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
510
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
511 // Simple control attaching (for HWND wrapper controls)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
512 template <class TControl>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
513 void DDX_Control_Handle(UINT nID, TControl& ctrl, BOOL bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
514 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
515 if(!bSave && (ctrl.m_hWnd == NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
516 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
517 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
518 ctrl = pT->GetDlgItem(nID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
519 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
520 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
521
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
522 // Control state
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
523 void DDX_Check(UINT nID, int& nValue, BOOL bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
524 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
525 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
526 HWND hWndCtrl = pT->GetDlgItem(nID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
527 if(bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
528 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
529 nValue = (int)::SendMessage(hWndCtrl, BM_GETCHECK, 0, 0L);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
530 ATLASSERT((nValue >= 0) && (nValue <= 2));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
531 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
532 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
533 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
534 if((nValue < 0) || (nValue > 2))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
535 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
536 ATLTRACE2(atlTraceUI, 0, _T("ATL: Warning - dialog data checkbox value (%d) out of range.\n"), nValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
537 nValue = 0; // default to off
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
538 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
539 ::SendMessage(hWndCtrl, BM_SETCHECK, nValue, 0L);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
540 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
541 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
542
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
543 // variant that supports bool (checked/not-checked, no intermediate state)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
544 void DDX_Check(UINT nID, bool& bCheck, BOOL bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
545 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
546 int nValue = bCheck ? 1 : 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
547 DDX_Check(nID, nValue, bSave);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
548
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
549 if(bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
550 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
551 if(nValue == 2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
552 ATLTRACE2(atlTraceUI, 0, _T("ATL: Warning - checkbox state (%d) out of supported range.\n"), nValue);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
553 bCheck = (nValue == 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
554 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
555 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
556
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
557 void DDX_Radio(UINT nID, int& nValue, BOOL bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
558 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
559 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
560 HWND hWndCtrl = pT->GetDlgItem(nID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
561 ATLASSERT(hWndCtrl != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
562
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
563 // must be first in a group of auto radio buttons
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
564 ATLASSERT(::GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
565 ATLASSERT(::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
566
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
567 if(bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
568 nValue = -1; // value if none found
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
569
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
570 // walk all children in group
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
571 int nButton = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
572 do
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
573 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
574 if(::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
575 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
576 // control in group is a radio button
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
577 if(bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
578 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
579 if(::SendMessage(hWndCtrl, BM_GETCHECK, 0, 0L) != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
580 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
581 ATLASSERT(nValue == -1); // only set once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
582 nValue = nButton;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
583 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
584 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
585 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
586 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
587 // select button
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
588 ::SendMessage(hWndCtrl, BM_SETCHECK, (nButton == nValue), 0L);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
589 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
590 nButton++;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
591 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
592 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
593 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
594 ATLTRACE2(atlTraceUI, 0, _T("ATL: Warning - skipping non-radio button in group.\n"));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
595 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
596 hWndCtrl = ::GetWindow(hWndCtrl, GW_HWNDNEXT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
597 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
598 while ((hWndCtrl != NULL) && !(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
599 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
600
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
601 // DDX support for Tab, Combo, ListBox and ListView selection index
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
602 template <class TCtrl>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
603 INT _getSel(TCtrl& tCtrl)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
604 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
605 return tCtrl.GetCurSel();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
606 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
607
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
608 template <class TCtrl>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
609 void _setSel(TCtrl& tCtrl, INT iSel)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
610 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
611 if(iSel < 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
612 tCtrl.SetCurSel(-1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
613 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
614 tCtrl.SetCurSel(iSel);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
615 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
616
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
617 #ifdef __ATLCTRLS_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
618 // ListViewCtrl specialization
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
619 template <>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
620 INT _getSel(WTL::CListViewCtrl& tCtrl)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
621 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
622 return tCtrl.GetSelectedIndex();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
623 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
624
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
625 template <>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
626 void _setSel(WTL::CListViewCtrl& tCtrl, INT iSel)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
627 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
628 if(iSel < 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
629 tCtrl.SelectItem(-1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
630 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
631 tCtrl.SelectItem(iSel);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
632 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
633 #endif // __ATLCTRLS_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
634
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
635 template <class TCtrl>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
636 void DDX_Index(UINT nID, INT& nVal, BOOL bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
637 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
638 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
639 TCtrl ctrl(pT->GetDlgItem(nID));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
640
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
641 if(bSave)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
642 nVal = _getSel(ctrl);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
643 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
644 _setSel(ctrl, nVal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
645 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
646
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
647 // Overrideables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
648 void OnDataExchangeError(UINT nCtrlID, BOOL /*bSave*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
649 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
650 // Override to display an error message
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
651 ::MessageBeep((UINT)-1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
652 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
653 ::SetFocus(pT->GetDlgItem(nCtrlID));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
654 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
655
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
656 void OnDataValidateError(UINT nCtrlID, BOOL /*bSave*/, _XData& /*data*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
657 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
658 // Override to display an error message
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
659 ::MessageBeep((UINT)-1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
660 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
661 ::SetFocus(pT->GetDlgItem(nCtrlID));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
662 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
663 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
664
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
665 } // namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
666
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
667 #endif // __ATLDDX_H__