Solution46
CWndDocumentTab.h
[詳解]
1 //=============================================================================
2 /// @file
3 /// ドキュメントタブウィンドウクラスヘッダファイル
4 ///
5 /// ドキュメントタブウィンドウクラスヘッダファイルです。
6 ///
7 /// $Id: CWndDocumentTab.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 <CWndTitleBar.h>
20 #include <CWndDocument.h>
21 
22 //=============================================================================
23 // ウィンドウライブラリ名前空間
24 namespace LibWindow {
25  //=========================================================================
26  /// ドキュメントタブウィンドウクラス
27  ///
28  /// ドキュメントタブウィンドウクラスです。
29  ///
30  /// @attention なし
31  ///
33  //=====================================================================
34  // 構築子と解体子
35  public:
36  //---------------------------------------------------------------------
37  /// コンストラクタ
38  ///
39  /// コンストラクタです。
40  ///
41  /// @param[in] pfnCreateElement 新規エレメントウィンドウ作成関数ポインタ
42  /// @param[in] pszElementName エレメントウィンドウ名
43  /// @return なし
44  /// @attention なし
45  ///
46  explicit CWndDocumentTab( CWndElement* ( *pfnCreateElement )() = &CreateDocumentWindow, wchar_t const* pszElementName = L"ドキュメントウィンドウ" ) noexcept;
47 
48  //---------------------------------------------------------------------
49  /// ムーブコンストラクタ
50  ///
51  /// ムーブコンストラクタです。
52  ///
53  /// @param[in] rcInstance インスタンス左辺値参照
54  /// @return なし
55  /// @attention なし
56  ///
57  explicit CWndDocumentTab( CWndDocumentTab&& rcInstance ) noexcept;
58 
59  //---------------------------------------------------------------------
60  /// デストラクタ
61  ///
62  /// デストラクタです。
63  ///
64  /// @param なし
65  /// @return なし
66  /// @attention なし
67  ///
68  virtual ~CWndDocumentTab() noexcept {}
69 
70  //=====================================================================
71  // インライン公開関数
72  public:
73  //---------------------------------------------------------------------
74  /// セクション名取得関数
75  ///
76  /// セクション名取得関数です。
77  ///
78  /// @param なし
79  /// @return 文字列ポインタ
80  /// @attention オーバライド関数です。
81  ///
82  inline virtual wchar_t const* GetSectionName() const noexcept override { return L"ドキュメントタブウィンドウ"; }
83 
84  //---------------------------------------------------------------------
85  /// タブ下端表示状態取得関数
86  ///
87  /// タブ下端表示状態取得関数です。
88  ///
89  /// @param なし
90  /// @return タブ下端表示状態
91  /// - true 真
92  /// - false 偽
93  /// @attention なし
94  ///
95  inline virtual bool IsTabBottom() const noexcept { return false; }
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, HMENU hMenu = nullptr ) noexcept override;
113 
114  //---------------------------------------------------------------------
115  /// ウィンドウ作成スタイル取得関数
116  ///
117  /// ウィンドウ作成スタイル取得関数です。
118  ///
119  /// @param なし
120  /// @return ウィンドウスタイル
121  /// @attention オーバライド関数です。
122  ///
123  virtual DWORD GetCreateStyle() noexcept override { return ( WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN ); }
124 
125  //---------------------------------------------------------------------
126  /// 各種メッセージ処理関数
127  ///
128  /// 各種メッセージ処理関数です。
129  ///
130  /// @param なし
131  /// @return メッセージ終了コード
132  /// @attention オーバライド関数です。
133  ///
134  virtual LRESULT WmSize() noexcept override;
135  virtual LRESULT WmDrawItem() noexcept override;
136  virtual LRESULT TcnSelChange() noexcept override;
137  virtual LRESULT NmClick() noexcept override;
138  virtual LRESULT StnClicked() noexcept override;
139  virtual LRESULT WmContextMenu() noexcept override;
140 
141  //---------------------------------------------------------------------
142  /// クライアント領域更新関数
143  ///
144  /// クライアント領域更新関数です。
145  ///
146  /// @param なし
147  /// @return 実行結果
148  /// - true 成功
149  /// - false 失敗
150  /// @attention オーバライド関数です。
151  ///
152  virtual bool UpdateClientRect() noexcept override;
153 
154  //---------------------------------------------------------------------
155  /// クライアント描画領域取得関数
156  ///
157  /// クライアント描画領域取得関数です。
158  ///
159  /// @param[out] rsRect 矩形領域参照
160  /// @return 実行結果
161  /// - true 成功
162  /// - false 失敗
163  /// @attention オーバライド関数です。
164  ///
165  virtual bool GetPaintRect( RECT& rsRect ) noexcept override;
166 
167  //---------------------------------------------------------------------
168  /// 最小水平サイズ取得関数
169  ///
170  /// 最小水平サイズ取得関数です。
171  ///
172  /// @param なし
173  /// @return 水平サイズ
174  /// @attention オーバライド関数です。
175  ///
176  virtual int GetMinWidth() noexcept override;
177 
178  //---------------------------------------------------------------------
179  /// 最小垂直サイズ取得関数
180  ///
181  /// 最小垂直サイズ取得関数です。
182  ///
183  /// @param なし
184  /// @return 垂直サイズ
185  /// @attention オーバライド関数です。
186  ///
187  virtual int GetMinHeight() noexcept override;
188 
189  //---------------------------------------------------------------------
190  /// タイトルバー描画関数
191  ///
192  /// タイトルバー描画関数です。
193  ///
194  /// @param[in] lpDraw 描画アイテム構造体ポインタ
195  /// @return 実行結果
196  /// - true 成功
197  /// - false 失敗
198  /// @attention なし
199  ///
200  virtual bool DrawTitleBar( LPDRAWITEMSTRUCT lpDraw ) noexcept;
201 
202  //---------------------------------------------------------------------
203  /// タブコントロール作成関数
204  ///
205  /// タブコントロール作成関数です。
206  ///
207  /// @param なし
208  /// @return 実行結果
209  /// - true 成功
210  /// - false 失敗
211  /// @attention なし
212  ///
213  virtual bool CreateTabControl() noexcept;
214 
215  //---------------------------------------------------------------------
216  /// タブコントロール更新関数
217  ///
218  /// タブコントロール更新関数です。
219  ///
220  /// @param なし
221  /// @return 実行結果
222  /// - true 成功
223  /// - false 失敗
224  /// @attention なし
225  ///
226  virtual bool UpdateTabControl() noexcept;
227 
228  //---------------------------------------------------------------------
229  /// タブコントロール描画関数
230  ///
231  /// タブコントロール描画関数です。
232  ///
233  /// @param[in] lpDraw 描画アイテム構造体ポインタ
234  /// @return 実行結果
235  /// - true 成功
236  /// - false 失敗
237  /// @attention なし
238  ///
239  virtual bool DrawTabControl( LPDRAWITEMSTRUCT lpDraw ) noexcept;
240 
241  //=====================================================================
242  // 静的公開関数
243  public:
244  //---------------------------------------------------------------------
245  /// ドキュメントウィンドウ作成関数
246  ///
247  /// ドキュメントウィンドウ作成関数です。
248  ///
249  /// @param なし
250  /// @return エレメントウィンドウポインタ
251  /// @attention なし
252  ///
253  static CWndElement* CreateDocumentWindow() noexcept { return new CWndDocument(); }
254 
255  //=====================================================================
256  // 限定公開変数
257  protected:
258  CWndTitleBar m_cTitleBar; ///< タイトルバー
259  HWND m_hTabControl; ///< タブコントロールハンドル
260 
261  //=====================================================================
262  // 静的限定公開定数
263  protected:
264  static int const TITLE_BAR_HEIGHT = 20; ///< タイトルバー垂直サイズ
265  static int const SEPARATOR_HEIGHT = 1; ///< セパレータコントロール垂直サイズ
266  static COLORREF const COLOR_TITLE_SEPARATOR = RGB( 68, 79, 90 ); ///< タイトルバー境界色
267  static COLORREF const COLOR_TAB_NORMAL = RGB( 240, 240, 240 ); ///< 通常タブ項目背景色
268  static COLORREF const COLOR_TAB_FOCUS = RGB( 255, 242, 157 ); ///< フォーカス所有タブ項目背景色
269 
270  //=====================================================================
271  // 削除関数
272  private:
273  CWndDocumentTab( CWndDocumentTab const& ) = delete;
274  CWndDocumentTab& operator=( CWndDocumentTab const& ) = delete;
275  };
276 }
277 
278 #pragma managed( pop )
タイトルバークラス
Definition: CWndTitleBar.h:31
ドキュメントウィンドウクラスヘッダファイル
コンテナウィンドウクラス
Definition: CWndContainer.h:31
virtual bool IsTabBottom() const noexcept
タブ下端表示状態取得関数
CWndTitleBar m_cTitleBar
タイトルバー
static CWndElement * CreateDocumentWindow() noexcept
ドキュメントウィンドウ作成関数
コンテナウィンドウクラスヘッダファイル
タイトルバークラスヘッダファイル
#define LIB_WINDOW_API
ダイナミックライブラリインポート宣言
Definition: LibWindowDef.h:30
virtual DWORD GetCreateStyle() noexcept override
ウィンドウ作成スタイル取得関数
ドキュメントウィンドウクラス
Definition: CWndDocument.h:30
ウィンドウライブラリ名前空間
Definition: CommandIdDef.h:22
HWND m_hTabControl
タブコントロールハンドル
ドキュメントタブウィンドウクラス
virtual ~CWndDocumentTab() noexcept
デストラクタ
ペインウィンドウクラス
Definition: CWndPane.h:74
virtual wchar_t const * GetSectionName() const noexcept override
セクション名取得関数