Solution46
CWndContainer.h
[詳解]
1 //=============================================================================
2 /// @file
3 /// コンテナウィンドウクラスヘッダファイル
4 ///
5 /// コンテナウィンドウクラスヘッダファイルです。
6 ///
7 /// $Id: CWndContainer.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 <CWndList.h>
20 
21 //=============================================================================
22 // ウィンドウライブラリ名前空間
23 namespace LibWindow {
24  //=========================================================================
25  /// コンテナウィンドウクラス
26  ///
27  /// コンテナウィンドウクラスです。
28  ///
29  /// @attention 抽象クラスです。
30  ///
31  class LIB_WINDOW_API CWndContainer abstract: public CWndPane {
32  //=====================================================================
33  // 構築子と解体子
34  public:
35  //---------------------------------------------------------------------
36  /// コンストラクタ
37  ///
38  /// コンストラクタです。
39  ///
40  /// @param[in] pfnCreateElement 新規エレメントウィンドウ作成関数ポインタ
41  /// @param[in] pszElementName エレメントウィンドウ名
42  /// @return なし
43  /// @attention なし
44  ///
45  explicit CWndContainer( CWndElement* ( *pfnCreateElement )(), wchar_t const* pszElementName ) noexcept;
46 
47  //---------------------------------------------------------------------
48  /// ムーブコンストラクタ
49  ///
50  /// ムーブコンストラクタです。
51  ///
52  /// @param[in] rcInstance インスタンス左辺値参照
53  /// @return なし
54  /// @attention なし
55  ///
56  explicit CWndContainer( CWndContainer&& rcInstance ) noexcept;
57 
58  //---------------------------------------------------------------------
59  /// デストラクタ
60  ///
61  /// デストラクタです。
62  ///
63  /// @param なし
64  /// @return なし
65  /// @attention なし
66  ///
67  virtual ~CWndContainer() noexcept {}
68 
69  //=====================================================================
70  // インライン公開関数
71  public:
72  //---------------------------------------------------------------------
73  /// エレメントウィンドウリスト取得関数
74  ///
75  /// エレメントウィンドウリスト取得関数です。
76  ///
77  /// @param なし
78  /// @return エレメントウィンドウリストポインタ
79  /// @attention なし
80  ///
81  inline virtual CWndList* GetElementList() noexcept { return &m_cElementList; }
82 
83  //=====================================================================
84  // 公開関数
85  public:
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 Create( HWND hParent = nullptr, HMENU hMenu = nullptr ) noexcept override;
99 
100  //---------------------------------------------------------------------
101  /// 各種メッセージ処理関数
102  ///
103  /// 各種メッセージ処理関数です。
104  ///
105  /// @param なし
106  /// @return メッセージ終了コード
107  /// @attention オーバライド関数です。
108  ///
109  virtual LRESULT WmSetFocus() noexcept override;
110 
111  //---------------------------------------------------------------------
112  /// ユーザ定義メッセージ処理関数
113  ///
114  /// ユーザ定義メッセージ処理関数です。
115  ///
116  /// @param なし
117  /// @return メッセージ終了コード
118  /// @attention オーバライド関数です。
119  ///
120  virtual LRESULT WmNotifyChildSetFocus() noexcept override;
121 
122  //---------------------------------------------------------------------
123  /// ウィンドウ構成情報初期化関数
124  ///
125  /// ウィンドウ構成情報初期化関数です。
126  ///
127  /// @param[in] rcConfig JSON構成ファイル参照
128  /// @return 実行結果
129  /// - true 成功
130  /// - false 失敗
131  /// @attention オーバライド関数です。
132  ///
133  virtual bool InitConfig( CJsonConfig& rcConfig ) noexcept override;
134 
135  //---------------------------------------------------------------------
136  /// ウィンドウ構成情報復元関数
137  ///
138  /// ウィンドウ構成情報復元関数です。
139  ///
140  /// @param[in] rcConfig JSON構成ファイル参照
141  /// @return 実行結果
142  /// - true 成功
143  /// - false 失敗
144  /// @attention オーバライド関数です。
145  ///
146  virtual bool ResumeConfig( CJsonConfig& rcConfig ) noexcept override;
147 
148  //---------------------------------------------------------------------
149  /// ウィンドウ構成情報保存関数
150  ///
151  /// ウィンドウ構成情報保存関数です。
152  ///
153  /// @param[in] rcConfig JSON構成ファイル参照
154  /// @return 実行結果
155  /// - true 成功
156  /// - false 失敗
157  /// @attention オーバライド関数です。
158  ///
159  virtual bool SaveConfig( CJsonConfig& rcConfig ) noexcept override;
160 
161  //---------------------------------------------------------------------
162  /// 子ペインウィンドウ情報取得関数
163  ///
164  /// 子ペインウィンドウ情報取得関数です。
165  ///
166  /// @param[in] rsChildInfo 子ペインウィンドウ情報構造体参照
167  /// @return 実行結果
168  /// - true 成功
169  /// - false 失敗
170  /// @attention オーバライド関数です。
171  ///
172  virtual bool GetChildPaneInfo( SChildPaneInfo& rsChildInfo ) noexcept override;
173 
174  //---------------------------------------------------------------------
175  /// ペインウィンドウオーダー番号取得関数
176  ///
177  /// ペインウィンドウオーダー番号取得関数です。
178  ///
179  /// @param[in] pcPane ペインウィンドウポインタ
180  /// @param[in,out] pnOrder オーダー番号ポインタ
181  /// @return オーダー番号
182  /// - 0以上 成功
183  /// - 0未満 失敗
184  /// @attention オーバライド関数です。
185  ///
186  virtual int GetOrderIndex( CWndPane* pcPane = nullptr, int* pnOrder = nullptr ) noexcept override;
187 
188  //---------------------------------------------------------------------
189  /// オーダー番号ペインウィンドウ取得関数
190  ///
191  /// オーダー番号ペインウィンドウ取得関数です。
192  ///
193  /// @param[in,out] pnOrder オーダー番号ポインタ
194  /// @return ペインウィンドウポインタ
195  /// @attention オーバライド関数です。
196  ///
197  virtual CWndPane* GetOrderPane( int* pnOrder ) noexcept override;
198 
199  //---------------------------------------------------------------------
200  /// 子ウィンドウ削除関数
201  ///
202  /// 子ウィンドウ削除関数です。
203  ///
204  /// @param[in] pcChild ペインウィンドウポインタ
205  /// @return 実行結果
206  /// - true 成功
207  /// - false 失敗
208  /// @attention オーバライド関数です。
209  ///
210  virtual bool DeleteChildWindow( CWndPane* pcChild ) noexcept override;
211 
212  //---------------------------------------------------------------------
213  /// 全子ウィンドウ表示関数
214  ///
215  /// 全子ウィンドウ表示関数です。
216  ///
217  /// @param[in] bShow ウィンドウ表示フラグ
218  /// @return 実行結果
219  /// - true 成功
220  /// - false 失敗
221  /// @attention オーバライド関数です。
222  ///
223  virtual bool ShowChildAll( bool bShow ) noexcept override;
224 
225  //---------------------------------------------------------------------
226  /// 全子ウィンドウ削除関数
227  ///
228  /// 全子ウィンドウ削除関数です。
229  ///
230  /// @param なし
231  /// @return 実行結果
232  /// - true 成功
233  /// - false 失敗
234  /// @attention オーバライド関数です。
235  ///
236  virtual bool DeleteChildAll() noexcept override;
237 
238  //---------------------------------------------------------------------
239  /// 全ウィンドウクライアント領域更新関数
240  ///
241  /// 全ウィンドウクライアント領域更新関数です。
242  ///
243  /// @param なし
244  /// @return 実行結果
245  /// - true 成功
246  /// - false 失敗
247  /// @attention オーバライド関数です。
248  ///
249  virtual bool UpdateClientRectAll() noexcept override;
250 
251  //---------------------------------------------------------------------
252  /// メニューコマンド実行関数
253  ///
254  /// メニューコマンド実行関数です。
255  ///
256  /// @param[in] wId コマンドID
257  /// @param[in] wCode 通知コード
258  /// @param[in] hCtrl コントロールハンドル
259  /// @return 実行結果
260  /// - true 成功
261  /// - false 失敗
262  /// @attention オーバライド関数です。
263  ///
264  virtual bool ExecMenuCommand( WORD wId, WORD wCode, HWND hCtrl ) noexcept override;
265 
266  //---------------------------------------------------------------------
267  /// デバッグメニュー追加関数
268  ///
269  /// デバッグメニュー追加関数です。
270  ///
271  /// @param[in] hMenu メニューハンドル
272  /// @return 実行結果
273  /// - true 成功
274  /// - false 失敗
275  /// @attention オーバライド関数です。
276  ///
277  virtual bool AppendDebugMenu( HMENU hMenu ) noexcept override;
278 
279  //---------------------------------------------------------------------
280  /// 新規エレメントウィンドウ追加関数
281  ///
282  /// 新規エレメントウィンドウ追加関数です。
283  ///
284  /// @param なし
285  /// @return 実行結果
286  /// - true 成功
287  /// - false 失敗
288  /// @attention なし
289  ///
290  virtual bool AppendNewElementWindow() noexcept;
291 
292  //=====================================================================
293  // 限定公開変数
294  protected:
295  CWndList m_cElementList; ///< エレメントウィンドウリスト
296  CWndElement* ( *m_pfnCreateElement )(); ///< 新規エレメントウィンドウ作成関数ポインタ
297  wchar_t const* m_pszElementName; ///< エレメントウィンドウ名
298  bool m_bFocusElement; ///< エレメントウィンドウフォーカス有効フラグ
299 
300  //=====================================================================
301  // 静的限定公開文字列定数
302  protected:
303  static wchar_t const* const KEY_FOCUS_ELEMENT; ///< エレメントウィンドウフォーカス有効状態キー文字列
304 
305  //=====================================================================
306  // 削除関数
307  private:
308  CWndContainer( CWndContainer const& ) = delete;
309  CWndContainer& operator=( CWndContainer const& ) = delete;
310  };
311 }
312 
313 #pragma managed( pop )
コンテナウィンドウクラス
Definition: CWndContainer.h:31
bool m_bFocusElement
エレメントウィンドウフォーカス有効フラグ
#define LIB_WINDOW_API
ダイナミックライブラリインポート宣言
Definition: LibWindowDef.h:30
JSON構成情報クラス
Definition: CJsonConfig.h:31
ペインウィンドウクラスヘッダファイル
ウィンドウライブラリ名前空間
Definition: CommandIdDef.h:22
CWndList m_cElementList
エレメントウィンドウリスト
virtual ~CWndContainer() noexcept
デストラクタ
Definition: CWndContainer.h:67
static wchar_t const *const KEY_FOCUS_ELEMENT
エレメントウィンドウフォーカス有効状態キー文字列
ウィンドウリストクラスヘッダファイル
virtual CWndList * GetElementList() noexcept
エレメントウィンドウリスト取得関数
Definition: CWndContainer.h:81
ウィンドウリストクラス
Definition: CWndList.h:35
ペインウィンドウクラス
Definition: CWndPane.h:74
子ペインウィンドウ情報構造体
Definition: CWndPane.h:43
wchar_t const * m_pszElementName
エレメントウィンドウ名