Solution46
CWndList.h
[詳解]
1 //=============================================================================
2 /// @file
3 /// ウィンドウリストクラスヘッダファイル
4 ///
5 /// ウィンドウリストクラスヘッダファイルです。
6 ///
7 /// $Id: CWndList.h 245 2019-03-20 15:03:41Z admin $
8 /// $Date: 2019-03-21 00:03:41 +0900 (2019/03/21 (木)) $
9 /// $Author: admin $
10 ///
11 /// @attention なし
12 
13 #pragma once
14 #pragma managed( push, off )
15 
16 //=============================================================================
17 // インクルードファイル
18 #include <CWndPane.h>
19 #include <CArray.h>
20 
21 //=============================================================================
22 // ウィンドウライブラリ名前空間
23 namespace LibWindow {
24  //=====================================================================
25  // グローバル型定義
26  using CWndElement = CWndPane; ///< エレメントウィンドウクラス型
27 
28  //=========================================================================
29  /// ウィンドウリストクラス
30  ///
31  /// ウィンドウリストクラスです。
32  ///
33  /// @attention なし
34  ///
35  class LIB_WINDOW_API CWndList: public CArray< CWndElement* > {
36  //=====================================================================
37  // 構築子と解体子
38  public:
39  //---------------------------------------------------------------------
40  /// コンストラクタ
41  ///
42  /// コンストラクタです。
43  ///
44  /// @param なし
45  /// @return なし
46  /// @attention なし
47  ///
48  explicit CWndList() noexcept;
49 
50  //---------------------------------------------------------------------
51  /// ムーブコンストラクタ
52  ///
53  /// ムーブコンストラクタです。
54  ///
55  /// @param[in] rcInstance インスタンス左辺値参照
56  /// @return なし
57  /// @attention なし
58  ///
59  explicit CWndList( CWndList&& rcInstance ) noexcept;
60 
61  //---------------------------------------------------------------------
62  /// デストラクタ
63  ///
64  /// デストラクタです。
65  ///
66  /// @param なし
67  /// @return なし
68  /// @attention なし
69  ///
70  virtual ~CWndList() noexcept {}
71 
72  //=====================================================================
73  // 公開関数
74  public:
75  //---------------------------------------------------------------------
76  /// クリア関数
77  ///
78  /// クリア関数です。
79  ///
80  /// @param なし
81  /// @return なし
82  /// @attention オーバライド関数です。
83  ///
84  virtual void Clear() noexcept override;
85 
86  //---------------------------------------------------------------------
87  /// エレメントウィンドウリスト作成関数
88  ///
89  /// エレメントウィンドウリスト作成関数です。
90  ///
91  /// @param[in] hParent 親ウィンドウハンドル
92  /// @param[in] hMenu メニューハンドル
93  /// @return 実行結果
94  /// - true 成功
95  /// - false 失敗
96  /// @attention なし
97  ///
98  virtual bool CreateListWindow( HWND hParent = nullptr, HMENU hMenu = nullptr ) noexcept;
99 
100  //---------------------------------------------------------------------
101  /// カレントインデックス取得関数
102  ///
103  /// カレントインデックス取得関数です。
104  ///
105  /// @param なし
106  /// @return インデックス
107  /// - 0以上 成功
108  /// - 0未満 失敗
109  /// @attention なし
110  ///
111  virtual int GetCurrentIndex() const noexcept;
112 
113  //---------------------------------------------------------------------
114  /// カレントインデックス設定関数
115  ///
116  /// カレントインデックス取得関数です。
117  ///
118  /// @param[in] nIndex インデックス
119  /// @return 実行結果
120  /// - true 成功
121  /// - false 失敗
122  /// @attention なし
123  ///
124  virtual bool SetCurrentIndex( int nIndex ) noexcept;
125 
126  //---------------------------------------------------------------------
127  /// 表示状態カレントインデックス取得関数
128  ///
129  /// 表示状態カレントインデックス取得関数です。
130  ///
131  /// @param なし
132  /// @return インデックス
133  /// - 0以上 成功
134  /// - 0未満 失敗
135  /// @attention なし
136  ///
137  virtual int GetShowCurrentIndex() const noexcept;
138 
139  //---------------------------------------------------------------------
140  /// 表示状態カレントエレメントウィンドウ取得関数
141  ///
142  /// 表示状態カレントエレメントウィンドウ取得関数です。
143  ///
144  /// @param なし
145  /// @return エレメントウィンドウポインタ
146  /// @attention なし
147  ///
148  virtual CWndElement* GetShowCurrentElement() const noexcept;
149 
150  //---------------------------------------------------------------------
151  /// カレントエレメントウィンドウ取得関数
152  ///
153  /// カレントエレメントウィンドウ取得関数です。
154  ///
155  /// @param なし
156  /// @return エレメントウィンドウポインタ
157  /// @attention なし
158  ///
159  virtual CWndElement* GetCurrentElement() const noexcept;
160 
161  //---------------------------------------------------------------------
162  /// カレントエレメントウィンドウ設定関数
163  ///
164  /// カレントエレメントウィンドウ設定関数です。
165  ///
166  /// @param[in] pcElement エレメントウィンドウポインタ
167  /// @return 実行結果
168  /// - true 成功
169  /// - false 失敗
170  /// @attention なし
171  ///
172  virtual bool SetCurrentElement( CWndElement* pcElement ) noexcept { return SetCurrentIndex( Find( pcElement ) ); }
173 
174  //---------------------------------------------------------------------
175  /// エレメントウィンドウ取得関数
176  ///
177  /// エレメントウィンドウ取得関数です。
178  ///
179  /// @param[in] hWnd ウィンドウハンドル
180  /// @return エレメントウィンドウポインタ
181  /// @attention なし
182  ///
183  virtual CWndElement* GetElementWindow( HWND hWnd ) const noexcept;
184 
185  //---------------------------------------------------------------------
186  /// エレメントウィンドウ削除関数
187  ///
188  /// エレメントウィンドウ削除関数です。
189  ///
190  /// @param[in] pcElement エレメントウィンドウポインタ
191  /// @return 実行結果
192  /// - true 成功
193  /// - false 失敗
194  /// @attention なし
195  ///
196  virtual bool RemoveElementWindow( CWndElement* pcElement ) noexcept { return Remove( Find( pcElement ) ); }
197 
198  //---------------------------------------------------------------------
199  /// エレメントウィンドウリスト構成情報初期化関数
200  ///
201  /// エレメントウィンドウリスト構成情報初期化関数です。
202  ///
203  /// @param[in] rcConfig JSON構成ファイル参照
204  /// @param[in] pfnCreateElement 新規エレメントウィンドウ作成関数ポインタ
205  /// @param[in] pszElementName エレメントウィンドウ名
206  /// @return 実行結果
207  /// - true 成功
208  /// - false 失敗
209  /// @attention なし
210  ///
211  virtual bool InitElementListConfig( CJsonConfig& rcConfig, CWndElement* ( *pfnCreateElement )(), wchar_t const* pszElementName ) noexcept;
212 
213  //---------------------------------------------------------------------
214  /// エレメントウィンドウリスト構成情報復元関数
215  ///
216  /// エレメントウィンドウリスト構成情報復元関数です。
217  ///
218  /// @param[in] rcConfig JSON構成ファイル参照
219  /// @param[in] pszElementName エレメントウィンドウ名
220  /// @return 実行結果
221  /// - true 成功
222  /// - false 失敗
223  /// @attention なし
224  ///
225  virtual bool ResumeElementListConfig( CJsonConfig& rcConfig, wchar_t const* pszElementName ) noexcept;
226 
227  //---------------------------------------------------------------------
228  /// エレメントウィンドウリスト構成情報保存関数
229  ///
230  /// エレメントウィンドウリスト構成情報保存関数です。
231  ///
232  /// @param[in] rcConfig JSON構成ファイル参照
233  /// @param[in] pszElementName エレメントウィンドウ名
234  /// @return 実行結果
235  /// - true 成功
236  /// - false 失敗
237  /// @attention なし
238  ///
239  virtual bool SaveElementListConfig( CJsonConfig& rcConfig, wchar_t const* pszElementName ) noexcept;
240 
241  //---------------------------------------------------------------------
242  /// 子エレメントウィンドウリスト情報取得関数
243  ///
244  /// 子エレメントウィンドウリスト情報取得関数です。
245  ///
246  /// @param[in] pcParent 親ペインウィンドウポインタ
247  /// @param[in] rsChildInfo 子ペインウィンドウ情報構造体参照
248  /// @return 実行結果
249  /// - true 成功
250  /// - false 失敗
251  /// @attention なし
252  ///
253  virtual bool GetChildElementListInfo( CWndPane* pcParent, SChildPaneInfo& rsChildInfo ) noexcept;
254 
255  //---------------------------------------------------------------------
256  /// エレメントウィンドウリストオーダー番号取得関数
257  ///
258  /// エレメントウィンドウリストオーダー番号取得関数です。
259  ///
260  /// @param[in] pcPane ペインウィンドウポインタ
261  /// @param[in,out] pnOrder オーダー番号ポインタ
262  /// @return オーダー番号
263  /// - 0以上 成功
264  /// - 0未満 失敗
265  /// @attention なし
266  ///
267  virtual int GetElementListOrderIndex( CWndPane* pcPane, int* pnOrder ) noexcept;
268 
269  //---------------------------------------------------------------------
270  /// エレメントウィンドウリストオーダー番号ペインウィンドウ取得関数
271  ///
272  /// エレメントウィンドウリストオーダー番号ペインウィンドウ取得関数です。
273  ///
274  /// @param[in,out] pnOrder オーダー番号ポインタ
275  /// @return ペインウィンドウポインタ
276  /// @attention なし
277  ///
278  virtual CWndPane* GetElementListOrderPane( int* pnOrder ) noexcept;
279 
280  //---------------------------------------------------------------------
281  /// 全エレメントウィンドウリスト表示関数
282  ///
283  /// 全エレメントウィンドウリスト表示関数です。
284  ///
285  /// @param[in] pcParent 親ペインウィンドウポインタ
286  /// @param[in] bShow ウィンドウ表示フラグ
287  /// @return 実行結果
288  /// - true 成功
289  /// - false 失敗
290  /// @attention なし
291  ///
292  virtual bool ShowElementListAll( CWndPane* pcParent, bool bShow ) noexcept;
293 
294  //---------------------------------------------------------------------
295  /// 全エレメントウィンドウリスト削除関数
296  ///
297  /// 全エレメントウィンドウリスト削除関数です。
298  ///
299  /// @param[in] pcParent 親ペインウィンドウポインタ
300  /// @return 実行結果
301  /// - true 成功
302  /// - false 失敗
303  /// @attention なし
304  ///
305  virtual bool DeleteElementListAll( CWndPane* pcParent ) noexcept;
306 
307  //---------------------------------------------------------------------
308  /// エレメントウィンドウ追加関数
309  ///
310  /// エレメントウィンドウ追加関数です。
311  ///
312  /// @param[in] hParent 親ウィンドウハンドル
313  /// @param[in] pcElement エレメントウィンドウポインタ
314  /// @return 実行結果
315  /// - true 成功
316  /// - false 失敗
317  /// @attention なし
318  ///
319  virtual bool AppendElementWindow( HWND hParent, CWndElement* pcElement ) noexcept;
320 
321  //---------------------------------------------------------------------
322  /// 新規エレメントウィンドウ追加関数
323  ///
324  /// 新規エレメントウィンドウ追加関数です。
325  ///
326  /// @param[in] hParent 親ウィンドウハンドル
327  /// @param[in] pfnCreateElement 新規エレメントウィンドウ作成関数ポインタ
328  /// @return エレメントウィンドウポインタ
329  /// @attention なし
330  ///
331  virtual CWndElement* AppendNewElementWindow( HWND hParent, CWndElement* ( *pfnCreateElement )() ) noexcept;
332 
333  //---------------------------------------------------------------------
334  /// エレメントウィンドウリストデバッグサブメニュー追加関数
335  ///
336  /// エレメントウィンドウリストデバッグサブメニュー追加関数です。
337  ///
338  /// @param[in] hMenu メニューハンドル
339  /// @param[in] pcParent 親ペインウィンドウポインタ
340  /// @param[in] pszElementName エレメントウィンドウ名
341  /// @param[in] wIdNew 新規作成コマンドID
342  /// @return 実行結果
343  /// - true 成功
344  /// - false 失敗
345  /// @attention なし
346  ///
347  virtual bool AppendElementListDebugSubMenu( HMENU hMenu, CWndPane* pcParent, wchar_t const* pszElementName, WORD wIdNew ) noexcept;
348 
349  //=====================================================================
350  // 限定公開変数
351  protected:
352  int m_nCurrent; ///< カレントインデックス
353 
354  //=====================================================================
355  // 静的限定公開文字列定数
356  protected:
357  static wchar_t const* const SECTION_ELEMENT_INFO; ///< エレメントウィンドウ情報セクション文字列
358  static wchar_t const* const KEY_ELEMENT_COUNT; ///< エレメントウィンドウ数キー文字列
359  static wchar_t const* const KEY_CURRENT_INDEX; ///< カレントインデックスキー文字列
360 
361  //=====================================================================
362  // 削除関数
363  private:
364  CWndList( CWndList const& ) = delete;
365  CWndList& operator=( CWndList const& ) = delete;
366  };
367 }
368 
369 #pragma managed( pop )
static wchar_t const *const KEY_CURRENT_INDEX
カレントインデックスキー文字列
Definition: CWndList.h:359
virtual ~CWndList() noexcept
デストラクタ
Definition: CWndList.h:70
配列クラスヘッダファイル
配列クラス
Definition: CArray.h:33
#define LIB_WINDOW_API
ダイナミックライブラリインポート宣言
Definition: LibWindowDef.h:30
JSON構成情報クラス
Definition: CJsonConfig.h:31
ペインウィンドウクラスヘッダファイル
int m_nCurrent
カレントインデックス
Definition: CWndList.h:352
ウィンドウライブラリ名前空間
Definition: CommandIdDef.h:22
virtual bool RemoveElementWindow(CWndElement *pcElement) noexcept
エレメントウィンドウ削除関数
Definition: CWndList.h:196
static wchar_t const *const KEY_ELEMENT_COUNT
エレメントウィンドウ数キー文字列
Definition: CWndList.h:358
ウィンドウリストクラス
Definition: CWndList.h:35
static wchar_t const *const SECTION_ELEMENT_INFO
エレメントウィンドウ情報セクション文字列
Definition: CWndList.h:357
ペインウィンドウクラス
Definition: CWndPane.h:74
virtual bool SetCurrentElement(CWndElement *pcElement) noexcept
カレントエレメントウィンドウ設定関数
Definition: CWndList.h:172
子ペインウィンドウ情報構造体
Definition: CWndPane.h:43