Solution46
CWndDocking.cpp
[詳解]
1 //=============================================================================
2 /// @file
3 /// ドッキングウィンドウクラス実装ファイル
4 ///
5 /// ドッキングウィンドウクラス実装ファイルです。
6 ///
7 /// $Id: CWndDocking.cpp 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 managed( push, off )
14 
15 //=============================================================================
16 // インクルードファイル
17 #include <CWndDocking.h>
18 #include <CWndPartition.h>
19 #include <CommandIdDef.h>
20 #include <algorithm>
21 
22 //=============================================================================
23 // インクルード実装ファイル
24 #include <CArray.hpp>
25 
26 //=============================================================================
27 // ウィンドウライブラリ名前空間
28 namespace LibWindow {
29  //=========================================================================
30  // ドッキングウィンドウクラス
31  //=========================================================================
32  // 構築子と解体子
33  //-------------------------------------------------------------------------
34  // コンストラクタ
36  // 基底クラスコンストラクタ
37  : CWndDocumentTab( &CreateToolDocumentWindow, L"ツールドキュメントウィンドウ" )
38  // メンバ変数初期化
39  , m_hSizeBar( nullptr )
40  , m_nPartitionSize( CWndPartition::PARTITION_SIZE )
41  {}
42 
43  //-------------------------------------------------------------------------
44  // ムーブコンストラクタ
45  CWndDocking::CWndDocking( CWndDocking&& rcInstance ) noexcept
46  // 基底クラスコンストラクタ
47  : CWndDocumentTab( std::move( rcInstance ) )
48  // メンバ変数初期化
49  , m_hSizeBar( nullptr )
50  , m_nPartitionSize( CWndPartition::PARTITION_SIZE )
51  {}
52 
53  //-------------------------------------------------------------------------
54  // デストラクタ
56  // サイズバーコントロールを破棄する
57  ::DestroyWindow( m_hSizeBar );
58  }
59 
60  //=========================================================================
61  // 公開関数
62  //-------------------------------------------------------------------------
63  // ウィンドウ作成関数
64  bool CWndDocking::Create( HWND hParent, HMENU hMenu ) noexcept {
65  // 処理ブロック
66  bool result = false;
67  do {
68  // 基底クラスの関数を実行する
69  if ( !CWndDocumentTab::Create( hParent, hMenu ) ) {
70  // 失敗!
71  break;
72  }
73 
74  // サイズバーコントロールを作成する
76  if ( nullptr == m_hSizeBar ) {
77  // 失敗!
78  break;
79  }
80 
81  // 成功!
82  result = true;
83  } while ( false );
84 
85  // 実行結果を返す
86  return result;
87  }
88 
89  //-------------------------------------------------------------------------
90  // WM_LBUTTONDBLCLKメッセージ処理関数
91  LRESULT CWndDocking::WmLButtonDblClk() noexcept {
92  // 処理ブロック
93  LRESULT result = 0;
94  do {
95  // タイトルバー表示領域を取得する
96  RECT sTitleBar;
97  ::GetWindowRect( m_cTitleBar.GetHandle(), &sTitleBar );
98 
99  // カーソル位置を取得する
100  POINT sPoint = { LOWORD( m_lParam ), HIWORD( m_lParam ) };
101 
102  // スクリーン座標系に変換する
103  ::ClientToScreen( m_hWnd, &sPoint );
104 
105  // カーソル座標を調べる
106  if ( 0 != ::PtInRect( &sTitleBar, sPoint ) ) {
107  // 最上位ペインウィンドウを取得する
108  CWndPane* pcTopLevel = GetTopLevelPane();
109  if ( nullptr != pcTopLevel ) {
110  // フローティング表示コマンドメッセージをポストする
111  ::PostMessageW( pcTopLevel->GetHandle(), WM_COMMAND, MAKELONG( ID_WINDOW_FLOATING, 0 ), reinterpret_cast< LPARAM >( m_hWnd ) );
112  }
113 
114  // 終了!
115  break;
116  }
117 
118  // 基底クラスの関数を実行する
120  } while ( false );
121 
122  // 実行結果を返す
123  return result;
124  }
125 
126  //-------------------------------------------------------------------------
127  // ウィンドウ構成情報初期化関数
128  bool CWndDocking::InitConfig( CJsonConfig& rcConfig ) noexcept {
129  // 処理ブロック
130  bool result = false;
131  do {
132  // 基底クラスの関数を実行する
133  if ( !CWndDocumentTab::InitConfig( rcConfig ) ) {
134  // 失敗!
135  break;
136  }
137 
138  // パーティションサイズを取得する
140 
141  // 成功!
142  result = true;
143  } while ( false );
144 
145  // 実行結果を返す
146  return result;
147  }
148 
149  //-------------------------------------------------------------------------
150  // ウィンドウ構成情報保存関数
151  bool CWndDocking::SaveConfig( CJsonConfig& rcConfig ) noexcept {
152  // 処理ブロック
153  bool result = false;
154  do {
155  // 基底クラスの関数を実行する
156  if ( !CWndDocumentTab::SaveConfig( rcConfig ) ) {
157  // 失敗!
158  break;
159  }
160  // パーティションサイズを保存する
161  else if ( !rcConfig.Set( m_nPartitionSize, CWndPartition::KEY_PARTITION_SIZE ) ) {
162  // 失敗!
163  break;
164  }
165 
166  // 成功!
167  result = true;
168  } while ( false );
169 
170  // 実行結果を返す
171  return result;
172  }
173 }
174 
175 #pragma managed( pop )
virtual HWND & GetHandle() noexcept
ウィンドウハンドル取得関数
Definition: CWndBase.h:69
virtual LRESULT WmLButtonDblClk() noexcept override
各種メッセージ処理関数
Definition: CWndDocking.cpp:91
virtual bool InitConfig(CJsonConfig &rcConfig) noexcept override
ウィンドウ構成情報初期化関数
コマンドID定義ヘッダファイル
static HWND CreateSizeBar(HWND hParent) noexcept
サイズバーコントロール作成関数
ドッキングウィンドウクラスヘッダファイル
constexpr WORD const ID_WINDOW_FLOATING
ウィンドウ::フローティング
Definition: CommandIdDef.h:48
virtual bool Create(HWND hParent, HMENU hMenu=nullptr) noexcept override
ウィンドウ作成関数
virtual bool SaveConfig(CJsonConfig &rcConfig) noexcept override
ウィンドウ構成情報保存関数
CWndTitleBar m_cTitleBar
タイトルバー
virtual CWndPane * GetTopLevelPane() noexcept
最上位ペインウィンドウ取得関数
Definition: CWndPane.cpp:472
HWND m_hSizeBar
サイズバーコントロールハンドル
Definition: CWndDocking.h:201
配列クラス実装ヘッダファイル
virtual bool Create(HWND hParent=nullptr, HMENU hMenu=nullptr) noexcept override
ウィンドウ作成関数
Definition: CWndDocking.cpp:64
virtual bool InitConfig(CJsonConfig &rcConfig) noexcept override
ウィンドウ構成情報初期化関数
CWndDocking() noexcept
コンストラクタ
Definition: CWndDocking.cpp:35
HWND m_hWnd
ウィンドウハンドル
Definition: CWndBase.h:1539
パーティションウィンドウクラス
Definition: CWndPartition.h:31
JSON構成情報クラス
Definition: CJsonConfig.h:31
ウィンドウライブラリ名前空間
Definition: CommandIdDef.h:22
int m_nPartitionSize
パーティションサイズ
Definition: CWndDocking.h:202
ドッキングウィンドウクラス
Definition: CWndDocking.h:31
virtual LRESULT WmLButtonDblClk() noexcept
Definition: CWndBase.h:694
LPARAM m_lParam
メッセージ第2引数
Definition: CWndBase.h:1542
ドキュメントタブウィンドウクラス
virtual ~CWndDocking() noexcept
デストラクタ
Definition: CWndDocking.cpp:55
パーティションウィンドウクラスヘッダファイル
static wchar_t const *const KEY_PARTITION_SIZE
パーティションサイズキー文字列
Definition: CWndPartition.h:42
ペインウィンドウクラス
Definition: CWndPane.h:74
virtual bool SaveConfig(CJsonConfig &rcConfig) noexcept override
ウィンドウ構成情報保存関数