TNB Library
TnbMfcHistoryComboEdit.h
[詳解]
1#pragma once
11#include "TnbStrVector.h"
12
13
14
15//TNB Library
16namespace TNB {
17namespace MFC {
18
19
20
40template<typename EDT = CEdit, typename CMB = CComboBox>
41class CHistoryComboEditT : public CMB
42{
43 DEFSUPER(CMB);
44public:
45
47 CHistoryComboEditT(void) : m_depth(10)
48 {
49 }
50
56 void SetHistoryDepth(int depth)
57 {
58 m_depth = depth;
59 }
60
66 {
67 CString s;
68 CStrVector vs;
69 loop ( i, _super::GetCount() )
70 {
71 _super::GetLBText(i, s);
72 vs.Add(CStr(s));
73 }
74 return vs;
75 }
76
83 {
84 CStrVector vs;
85 CString s;
86 _super::GetWindowText(s);
87 vs.Add(CStr(s));
88 vs += GetHistoryStrings();
89 return vs;
90 }
91
98 {
99 CString s;
100 _super::GetWindowText(s);
101 _super::ResetContent();
102 loop ( i, vs.GetSize() )
103 {
104 _super::AddString(vs[i]);
105 }
106 m_CheckDepth();
107 _super::SetWindowText(s);
108 }
109
115 void SetAllStrings(const CStrVector& vs)
116 {
117 _super::ResetContent();
118 if ( vs.GetSize() > 0 )
119 {
120 loop ( i, vs.GetSize() - 1 )
121 {
122 _super::AddString(vs[i + 1]);
123 }
124 m_CheckDepth();
125 _super::SetWindowText(vs[0]);
126 }
127 }
128
133 void Apply(void)
134 {
135 CString s;
136 _super::GetWindowText(s);
137 if ( ! s.IsEmpty() )
138 {
139 int i = _super::FindStringExact(0, s);
140 if ( i >= 0 )
141 {
142 _super::DeleteString(i);
143 }
144 _super::InsertString(0, s);
145 m_CheckDepth();
146 _super::SetWindowText(s);
147 }
148 }
149
154 EDT& ReferEdit(void) { return m_edit; }
155
160 const EDT& ReferEdit(void) const { return m_edit; }
161
162protected:
163
169 virtual void PreSubclassWindow(void)
170 {
171 DWORD s = GetStyle();
172 ASSERT0( (s & CBS_DROPDOWN) != 0, "CHistoryComboEditT", "ドロップダウンになっていません。" );
173 ASSERT0( (s & CBS_SORT) == 0, "CHistoryComboEditT", "ソート属性がついてしまっています。" );
174 _super::PreSubclassWindow();
175 }
176
186 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
187 {
188 switch ( message )
189 {
190 case WM_DESTROY:
191 if ( m_edit.GetSafeHwnd() != NULL )
192 {
193 m_edit.UnsubclassWindow();
194 }
195 break;
196 case WM_CTLCOLOREDIT:
197 if ( m_edit.GetSafeHwnd() == NULL )
198 {
199 m_edit.SubclassWindow(reinterpret_cast<HWND>(lParam));
200 }
201 break;
202 }
203 return _super::WindowProc(message, wParam, lParam);
204 }
205
206private:
207 // 深さチェック
208 void m_CheckDepth(void)
209 {
210 if ( m_depth > 1 )
211 {
212 while ( _super::GetCount() > m_depth )
213 {
214 _super::DeleteString(_super::GetCount() - 1);
215 }
216 }
217 }
218 int m_depth;
219 EDT m_edit;
220};
221
222
223
241
242
243
244};
245};
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
文字列情報配列管理関係のヘッダ
virtual size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbVector.h:368
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
Definition: TnbVector.h:383
履歴付き EDITコントロール
CStrVector GetHistoryStrings(void) const
[取得] 全履歴文字列取得.
void SetHistoryStrings(const CStrVector &vs)
[設定] 全履歴文字列設定.
void SetHistoryDepth(int depth)
[設定] 履歴数設定.
void Apply(void)
[設定] 確定.
EDT & ReferEdit(void)
[参照] Editコントロール参照.
virtual void PreSubclassWindow(void)
[通知] subclassing/unsubclassing functions.
const EDT & ReferEdit(void) const
[参照] Editコントロール参照.
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
CHistoryComboEditT(void)
コンストラクタ
CStrVector GetAllStrings(void) const
[取得] 全文字列取得.
void SetAllStrings(const CStrVector &vs)
[設定] 全文字列設定.
TNB::CStrT< TCHAR > CStr
文字列クラス
Definition: TnbStr.h:1785
CHistoryComboEditT CHistoryComboEdit
履歴付き EDITコントロール
TNB Library
Definition: TnbDoxyTitle.txt:2