Solution46
CWndPartition.h
[詳解]
1 //=============================================================================
2 /// @file
3 /// パーティションウィンドウクラスヘッダファイル
4 ///
5 /// パーティションウィンドウクラスヘッダファイルです。
6 ///
7 /// $Id: CWndPartition.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 <CWndContainer.h>
19 #include <CWndDocumentTab.h>
20 
21 //=============================================================================
22 // ウィンドウライブラリ名前空間
23 namespace LibWindow {
24  //=========================================================================
25  /// パーティションウィンドウクラス
26  ///
27  /// パーティションウィンドウクラスです。
28  ///
29  /// @attention 抽象クラスです。
30  ///
31  class LIB_WINDOW_API CWndPartition abstract: public CWndContainer {
32  //=====================================================================
33  // 静的公開定数
34  public:
35  static EPartitionPos const PARTITION_POS = EPartitionPos::Left; ///< パーティション配置位置デフォルト値
36  static int const PARTITION_SIZE = 200; ///< パーティションサイズデフォルト値
37 
38  //=====================================================================
39  // 静的公開文字列定数
40  public:
41  static wchar_t const* const KEY_PARTITION_POS; ///< パーティション配置位置キー文字列
42  static wchar_t const* const KEY_PARTITION_SIZE; ///< パーティションサイズキー文字列
43 
44  //=====================================================================
45  // 構築子と解体子
46  public:
47  //---------------------------------------------------------------------
48  /// コンストラクタ
49  ///
50  /// コンストラクタです。
51  ///
52  /// @param[in] pfnCreateElement 新規エレメントウィンドウ作成関数ポインタ
53  /// @param[in] pszElementName エレメントウィンドウ名
54  /// @return なし
55  /// @attention なし
56  ///
57  explicit CWndPartition( CWndElement* ( *pfnCreateElement )(), wchar_t const* pszElementName ) noexcept;
58 
59  //---------------------------------------------------------------------
60  /// デストラクタ
61  ///
62  /// デストラクタです。
63  ///
64  /// @param なし
65  /// @return なし
66  /// @attention なし
67  ///
68  virtual ~CWndPartition() noexcept {}
69 
70  //=====================================================================
71  // インライン公開関数
72  public:
73  //---------------------------------------------------------------------
74  /// パーティションウィンドウ判別関数
75  ///
76  /// パーティションウィンドウ判別関数です。
77  ///
78  /// @param なし
79  /// @return 実行結果
80  /// - true 成功
81  /// - false 失敗
82  /// @attention オーバライド関数です。
83  ///
84  inline virtual bool IsPartition() const noexcept override { return true; }
85 
86  //---------------------------------------------------------------------
87  /// ドキュメントタブウィンドウ取得関数
88  ///
89  /// ドキュメントタブウィンドウ取得関数です。
90  ///
91  /// @param なし
92  /// @return ドキュメントタブウィンドウポインタ
93  /// @attention なし
94  ///
95  inline virtual CWndDocumentTab* GetDocumentTab() noexcept { return nullptr; }
96 
97  //=====================================================================
98  // 公開関数
99  public:
100  //---------------------------------------------------------------------
101  /// ウィンドウ作成関数
102  ///
103  /// ウィンドウ作成関数です。
104  ///
105  /// @param[in] hParent 親ウィンドウハンドル
106  /// @param[in] hMenu メニューハンドル
107  /// @return 実行結果
108  /// - true 成功
109  /// - false 失敗
110  /// @attention オーバライド関数です。
111  ///
112  virtual bool Create( HWND hParent = nullptr, HMENU hMenu = nullptr ) noexcept override;
113 
114  //---------------------------------------------------------------------
115  /// 各種メッセージ処理関数
116  ///
117  /// 各種メッセージ処理関数です。
118  ///
119  /// @param なし
120  /// @return メッセージ終了コード
121  /// @attention オーバライド関数です。
122  ///
123  virtual LRESULT WmSize() noexcept override;
124  virtual LRESULT WmSetFocus() noexcept override;
125  virtual LRESULT WmDrawItem() noexcept override;
126  virtual LRESULT WmSetCursor() noexcept override;
127  virtual LRESULT StnClicked() noexcept override;
128  virtual LRESULT WmLButtonUp() noexcept override;
129  virtual LRESULT WmKeyDown() noexcept override;
130  virtual LRESULT WmMouseMove() noexcept override;
131 
132  //---------------------------------------------------------------------
133  /// ウィンドウ構成情報初期化関数
134  ///
135  /// ウィンドウ構成情報初期化関数です。
136  ///
137  /// @param[in] rcConfig JSON構成ファイル参照
138  /// @return 実行結果
139  /// - true 成功
140  /// - false 失敗
141  /// @attention オーバライド関数です。
142  ///
143  virtual bool InitConfig( CJsonConfig& rcConfig ) noexcept override;
144 
145  //---------------------------------------------------------------------
146  /// ウィンドウ構成情報復元関数
147  ///
148  /// ウィンドウ構成情報復元関数です。
149  ///
150  /// @param[in] rcConfig JSON構成ファイル参照
151  /// @return 実行結果
152  /// - true 成功
153  /// - false 失敗
154  /// @attention オーバライド関数です。
155  ///
156  virtual bool ResumeConfig( CJsonConfig& rcConfig ) noexcept override;
157 
158  //---------------------------------------------------------------------
159  /// ウィンドウ構成情報保存関数
160  ///
161  /// ウィンドウ構成情報保存関数です。
162  ///
163  /// @param[in] rcConfig JSON構成ファイル参照
164  /// @return 実行結果
165  /// - true 成功
166  /// - false 失敗
167  /// @attention オーバライド関数です。
168  ///
169  virtual bool SaveConfig( CJsonConfig& rcConfig ) noexcept override;
170 
171  //---------------------------------------------------------------------
172  /// 子ペインウィンドウ情報取得関数
173  ///
174  /// 子ペインウィンドウ情報取得関数です。
175  ///
176  /// @param[in] rsChildInfo 子ペインウィンドウ情報構造体参照
177  /// @return 実行結果
178  /// - true 成功
179  /// - false 失敗
180  /// @attention オーバライド関数です。
181  ///
182  virtual bool GetChildPaneInfo( SChildPaneInfo& rsChildInfo ) noexcept override;
183 
184  //---------------------------------------------------------------------
185  /// ペインウィンドウオーダー番号取得関数
186  ///
187  /// ペインウィンドウオーダー番号取得関数です。
188  ///
189  /// @param[in] pcPane ペインウィンドウポインタ
190  /// @param[in,out] pnOrder オーダー番号ポインタ
191  /// @return オーダー番号
192  /// - 0以上 成功
193  /// - 0未満 失敗
194  /// @attention オーバライド関数です。
195  ///
196  virtual int GetOrderIndex( CWndPane* pcPane = nullptr, int* pnOrder = nullptr ) noexcept override;
197 
198  //---------------------------------------------------------------------
199  /// オーダー番号ペインウィンドウ取得関数
200  ///
201  /// オーダー番号ペインウィンドウ取得関数です。
202  ///
203  /// @param[in,out] pnOrder オーダー番号ポインタ
204  /// @return ペインウィンドウポインタ
205  /// @attention オーバライド関数です。
206  ///
207  virtual CWndPane* GetOrderPane( int* pnOrder ) noexcept override;
208 
209  //---------------------------------------------------------------------
210  /// 全子ウィンドウ表示関数
211  ///
212  /// 全子ウィンドウ表示関数です。
213  ///
214  /// @param[in] bShow ウィンドウ表示フラグ
215  /// @return 実行結果
216  /// - true 成功
217  /// - false 失敗
218  /// @attention オーバライド関数です。
219  ///
220  virtual bool ShowChildAll( bool bShow ) noexcept override;
221 
222  //---------------------------------------------------------------------
223  /// 全子ウィンドウ削除関数
224  ///
225  /// 全子ウィンドウ削除関数です。
226  ///
227  /// @param なし
228  /// @return 実行結果
229  /// - true 成功
230  /// - false 失敗
231  /// @attention オーバライド関数です。
232  ///
233  virtual bool DeleteChildAll() noexcept override;
234 
235  //---------------------------------------------------------------------
236  /// 子ウィンドウ削除可能状態取得関数
237  ///
238  /// 子ウィンドウ削除可能状態取得関数です。
239  ///
240  /// @param[in] pcChild ペインウィンドウポインタ
241  /// @return 実行結果
242  /// - true 成功
243  /// - false 失敗
244  /// @attention オーバライド関数です。
245  ///
246  virtual bool CanDeleteChildWindow( CWndPane* pcChild ) noexcept override;
247 
248  //---------------------------------------------------------------------
249  /// 全ウィンドウクライアント領域更新関数
250  ///
251  /// 全ウィンドウクライアント領域更新関数です。
252  ///
253  /// @param なし
254  /// @return 実行結果
255  /// - true 成功
256  /// - false 失敗
257  /// @attention オーバライド関数です。
258  ///
259  virtual bool UpdateClientRectAll() noexcept override;
260 
261  //---------------------------------------------------------------------
262  /// クライアント描画領域取得関数
263  ///
264  /// クライアント描画領域取得関数です。
265  ///
266  /// @param[out] rsRect 矩形領域参照
267  /// @return 実行結果
268  /// - true 成功
269  /// - false 失敗
270  /// @attention オーバライド関数です。
271  ///
272  virtual bool GetPaintRect( RECT& rsRect ) noexcept override;
273 
274  //---------------------------------------------------------------------
275  /// 最小水平サイズ取得関数
276  ///
277  /// 最小水平サイズ取得関数です。
278  ///
279  /// @param なし
280  /// @return 水平サイズ
281  /// @attention オーバライド関数です。
282  ///
283  virtual int GetMinWidth() noexcept override;
284 
285  //---------------------------------------------------------------------
286  /// 最小垂直サイズ取得関数
287  ///
288  /// 最小垂直サイズ取得関数です。
289  ///
290  /// @param なし
291  /// @return 垂直サイズ
292  /// @attention オーバライド関数です。
293  ///
294  virtual int GetMinHeight() noexcept override;
295 
296  //---------------------------------------------------------------------
297  /// デバッグメニュー追加関数
298  ///
299  /// デバッグメニュー追加関数です。
300  ///
301  /// @param[in] hMenu メニューハンドル
302  /// @return 実行結果
303  /// - true 成功
304  /// - false 失敗
305  /// @attention オーバライド関数です。
306  ///
307  virtual bool AppendDebugMenu( HMENU hMenu ) noexcept override;
308 
309  //---------------------------------------------------------------------
310  /// パーティション表示クライアント領域取得関数
311  ///
312  /// パーティション表示クライアント領域取得関数です。
313  ///
314  /// @param[out] rsRect 矩形領域参照
315  /// @return 実行結果
316  /// - true 成功
317  /// - false 失敗
318  /// @attention なし
319  ///
320  virtual bool GetPartitionClientRect( RECT& rsRect ) noexcept;
321 
322  //---------------------------------------------------------------------
323  /// 最小サイズ取得関数
324  ///
325  /// 最小サイズ取得関数です。
326  ///
327  /// @param[out] rsSize サイズ構造体参照
328  /// @param[in] nStart 開始インデックス
329  /// @return 実行結果
330  /// - true 成功
331  /// - false 失敗
332  /// @attention なし
333  ///
334  virtual bool GetMinSize( SIZE& rsSizen, int nStart = 0 ) noexcept;
335 
336  //---------------------------------------------------------------------
337  /// 最小パーティション表示領域サイズ取得関数
338  ///
339  /// 最小パーティション表示領域サイズ取得関数です。
340  ///
341  /// @param[out] rsSize サイズ構造体参照
342  /// @return 実行結果
343  /// - true 成功
344  /// - false 失敗
345  /// @attention なし
346  ///
347  virtual bool GetMinPartitionSize( SIZE& rsSize ) noexcept;
348 
349  //---------------------------------------------------------------------
350  /// パーティション配置位置取得関数
351  ///
352  /// パーティション配置位置取得関数です。
353  ///
354  /// @param[in] pcElement エレメントウィンドウポインタ
355  /// @return パーティション配置位置種別
356  /// @attention なし
357  ///
358  virtual EPartitionPos GetPartitionPos( CWndElement* pcElement ) noexcept;
359 
360  //---------------------------------------------------------------------
361  /// サイズバー移動開始関数
362  ///
363  /// サイズバー移動開始関数です。
364  ///
365  /// @param[in] pcElement エレメントウィンドウポインタ
366  /// @return 実行結果
367  /// - true 成功
368  /// - false 失敗
369  /// @attention なし
370  ///
371  virtual bool BeginMoveSizeBar( CWndElement* pcElement ) noexcept;
372 
373  //---------------------------------------------------------------------
374  /// サイズバー移動中止関数
375  ///
376  /// サイズバー移動中止関数です。
377  ///
378  /// @param なし
379  /// @return 実行結果
380  /// - true 成功
381  /// - false 失敗
382  /// @attention なし
383  ///
384  virtual bool CancelMoveSizeBar() noexcept;
385 
386  //---------------------------------------------------------------------
387  /// サイズバー移動関数
388  ///
389  /// サイズバー移動関数です。
390  ///
391  /// @param なし
392  /// @return 実行結果
393  /// - true 成功
394  /// - false 失敗
395  /// @attention なし
396  ///
397  virtual bool MoveSizeBar() noexcept;
398 
399  //---------------------------------------------------------------------
400  /// サイズバー移動終了関数
401  ///
402  /// サイズバー移動終了関数です。
403  ///
404  /// @param なし
405  /// @return 実行結果
406  /// - true 成功
407  /// - false 失敗
408  /// @attention なし
409  ///
410  virtual bool EndMoveSizeBar() noexcept;
411 
412  //---------------------------------------------------------------------
413  /// サイズバーイメージコントロール作成関数
414  ///
415  /// サイズバーイメージコントロール作成関数です。
416  ///
417  /// @param なし
418  /// @return 実行結果
419  /// - true 成功
420  /// - false 失敗
421  /// @attention なし
422  ///
423  virtual bool CreateSizeBarImageControl() noexcept;
424 
425  //---------------------------------------------------------------------
426  /// サイズバーコントロール描画関数
427  ///
428  /// サイズバーコントロール描画関数です。
429  ///
430  /// @param[in] lpDraw 描画アイテム構造体ポインタ
431  /// @param[in] ePos パーティション配置位置
432  /// @return 実行結果
433  /// - true 成功
434  /// - false 失敗
435  /// @attention なし
436  ///
437  virtual bool DrawSizeBar( LPDRAWITEMSTRUCT lpDraw, EPartitionPos ePos ) noexcept;
438 
439  //=====================================================================
440  // 静的公開関数
441  public:
442  //---------------------------------------------------------------------
443  /// サイズバーコントロール作成関数
444  ///
445  /// サイズバーコントロール作成関数です。
446  ///
447  /// @param[in] hParent 親ウィンドウハンドル
448  /// @return コントロールハンドル
449  /// @attention なし
450  ///
451  static HWND CreateSizeBar( HWND hParent ) noexcept;
452 
453  //=====================================================================
454  // 限定公開変数
455  protected:
456  HWND m_hSizeBarImage; ///< サイズバーイメージコントロールハンドル
457  POINT m_sPoint; ///< カーソル座標
458  CWndElement* m_pcElement; ///< エレメントウィンドウポインタ
459  int m_nSize; ///< 保存パーティションサイズ
460  int m_nMinSize; ///< 最小パーティションサイズ
461  int m_nMaxSize; ///< 最大パーティションサイズ
462 
463  //=====================================================================
464  // 静的限定公開定数
465  protected:
466  static BYTE const TRANS_SIZEBAR_IMAGE = 96; ///< サイズバーイメージ透明度
467  static int const SIZEBAR_THICK = 4; ///< サイズバー太さ
468  static COLORREF const COLOR_SIZEBAR = RGB( 240, 240, 240 ); ///< サイズバー色
469  static COLORREF const COLOR_SIZEBAR_BORDER = RGB( 108, 94, 79 ); ///< サイズバーボーダー色
470 
471  //=====================================================================
472  // 削除関数
473  private:
474  CWndPartition( CWndPartition const& ) = delete;
475  CWndPartition& operator=( CWndPartition const& ) = delete;
476  };
477 }
478 
479 #pragma managed( pop )
virtual ~CWndPartition() noexcept
デストラクタ
Definition: CWndPartition.h:68
virtual bool IsPartition() const noexcept override
パーティションウィンドウ判別関数
Definition: CWndPartition.h:84
virtual CWndDocumentTab * GetDocumentTab() noexcept
ドキュメントタブウィンドウ取得関数
Definition: CWndPartition.h:95
コンテナウィンドウクラス
Definition: CWndContainer.h:31
CWndElement * m_pcElement
エレメントウィンドウポインタ
コンテナウィンドウクラスヘッダファイル
#define LIB_WINDOW_API
ダイナミックライブラリインポート宣言
Definition: LibWindowDef.h:30
パーティションウィンドウクラス
Definition: CWndPartition.h:31
JSON構成情報クラス
Definition: CJsonConfig.h:31
ウィンドウライブラリ名前空間
Definition: CommandIdDef.h:22
EPartitionPos
パーティション配置位置種別列挙体
Definition: CWndPane.h:58
static wchar_t const *const KEY_PARTITION_POS
パーティション配置位置キー文字列
Definition: CWndPartition.h:41
int m_nMaxSize
最大パーティションサイズ
int m_nMinSize
最小パーティションサイズ
ドキュメントタブウィンドウクラス
POINT m_sPoint
カーソル座標
static wchar_t const *const KEY_PARTITION_SIZE
パーティションサイズキー文字列
Definition: CWndPartition.h:42
int m_nSize
保存パーティションサイズ
ペインウィンドウクラス
Definition: CWndPane.h:74
ドキュメントタブウィンドウクラスヘッダファイル
HWND m_hSizeBarImage
サイズバーイメージコントロールハンドル
子ペインウィンドウ情報構造体
Definition: CWndPane.h:43