Solution46
CConsoleMenu.h
[詳解]
1 //=============================================================================
2 /// @file
3 /// コンソールメニュークラスヘッダファイル
4 ///
5 /// コンソールメニュークラスヘッダファイルです。
6 ///
7 /// $Id: CConsoleMenu.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 <CMutex.h>
19 #include <CEvent.h>
20 #include <CThread.h>
21 
22 //=============================================================================
23 // 共通ライブラリ名前空間
24 namespace LibCommon {
25  //=========================================================================
26  /// コンソールメニュークラス
27  ///
28  /// コンソールメニュークラスです。
29  ///
30  /// @attention なし
31  ///
33  //=====================================================================
34  // 限定公開型定義
35  protected:
36  //---------------------------------------------------------------------
37  /// メニュー項目情報構造体
38  ///
39  /// メニュー項目情報構造体です。
40  ///
41  /// @attention なし
42  ///
43  struct SMenuItemInfo {
44  wchar_t const* const m_pszItemName; ///< 項目名称
45  bool m_bSubMenu; ///< サブメニューフラグ
46  };
47 
48  //---------------------------------------------------------------------
49  /// メニュー定義情報構造体
50  ///
51  /// メニュー定義情報構造体です。
52  ///
53  /// @attention なし
54  ///
55  struct SMenuInfo {
56  wchar_t const* const m_pszName; ///< メニュー名称
57  int const m_nCount; ///< メニュー項目数
58  SMenuItemInfo const* m_psItemInfo; ///< メニュー項目情報構造体配列ポインタ
59  };
60 
61  //=====================================================================
62  // 構築子と解体子
63  public:
64  //---------------------------------------------------------------------
65  /// コンストラクタ
66  ///
67  /// コンストラクタです。
68  ///
69  /// @param[in] psMenuInfo メニュー定義情報構造体ポインタ
70  /// @return なし
71  /// @attention なし
72  ///
73  explicit CConsoleMenu( SMenuInfo const* psMenuInfo ) noexcept;
74 
75  //---------------------------------------------------------------------
76  /// デストラクタ
77  ///
78  /// デストラクタです。
79  ///
80  /// @param なし
81  /// @return なし
82  /// @attention なし
83  ///
84  virtual ~CConsoleMenu() noexcept {}
85 
86  //=====================================================================
87  // インライン公開関数
88  public:
89  //---------------------------------------------------------------------
90  /// 実行状態取得関数
91  ///
92  /// 実行状態取得関数です。
93  ///
94  /// @param なし
95  /// @return 実行結果
96  /// - true 実行中
97  /// - false 非実行中
98  /// @attention なし
99  ///
100  inline virtual bool IsExecMenu() noexcept { return ( ( nullptr != m_cThreadSub.GetHandle() ) && !m_cThreadSub.Wait( 0 ) ); }
101 
102  //=====================================================================
103  // 公開関数
104  public:
105  //---------------------------------------------------------------------
106  /// メニュー開始関数
107  ///
108  /// メニュー開始関数です。
109  ///
110  /// @param なし
111  /// @return 実行結果
112  /// - true 成功
113  /// - false 失敗
114  /// @attention なし
115  ///
116  virtual bool StartMenu() noexcept;
117 
118  //---------------------------------------------------------------------
119  /// メニュー実行関数
120  ///
121  /// メニュー実行関数です。
122  ///
123  /// @param なし
124  /// @return 実行結果
125  /// - true 成功
126  /// - false 失敗
127  /// @attention なし
128  ///
129  virtual bool ExecMenu() noexcept;
130 
131  //---------------------------------------------------------------------
132  /// メニュー中止要求関数
133  ///
134  /// メニュー中止要求関数です。
135  ///
136  /// @param なし
137  /// @return 入力レコード数
138  /// @attention なし
139  ///
140  virtual void StopMenu() noexcept;
141 
142  //---------------------------------------------------------------------
143  /// メニュー終了待ち関数
144  ///
145  /// メニュー終了待ち関数です。
146  ///
147  /// @param[in] dwTime 待機時間
148  /// @return 実行結果
149  /// - true 成功
150  /// - false 失敗
151  /// @attention なし
152  ///
153  virtual bool WaitForMenuFinish( DWORD dwTime = INFINITE ) noexcept { return m_cThreadSub.Wait( dwTime ); }
154 
155  //---------------------------------------------------------------------
156  /// 終了可能状態取得関数
157  ///
158  /// 終了可能状態取得関数です。
159  ///
160  /// @param なし
161  /// @return 実行結果
162  /// - true 終了可能
163  /// - false 終了不可能
164  /// @attention なし
165  ///
166  virtual bool CanBeExit() const noexcept { return true; }
167 
168  //---------------------------------------------------------------------
169  /// サブメニュー取得関数
170  ///
171  /// サブメニュー取得関数です。
172  ///
173  /// @param なし
174  /// @return コンソールメニュークラスポインタ
175  /// @attention なし
176  ///
177  virtual CConsoleMenu* GetSubMenu() const noexcept { return nullptr; }
178 
179  //---------------------------------------------------------------------
180  /// メニューコールバック関数
181  ///
182  /// メニューコールバック関数です。
183  ///
184  /// @param[in] bPreCallBack 事前コールバックフラグ
185  /// @return 実行結果
186  /// - true 継続
187  /// - false 中止
188  /// @attention なし
189  ///
190  virtual bool MenuCallBackProc( bool bPreCallBack = false ) noexcept { return bPreCallBack; }
191 
192  //=====================================================================
193  // 限定公開関数
194  protected:
195  //---------------------------------------------------------------------
196  /// サブスレッド実行関数
197  ///
198  /// サブスレッド実行関数です。
199  ///
200  /// @param なし
201  /// @return 実行結果
202  /// - true 成功
203  /// - false 失敗
204  /// @attention なし
205  ///
206  virtual bool ExecSubThread() noexcept;
207 
208  //=====================================================================
209  // 静的限定公開関数
210  protected:
211  //---------------------------------------------------------------------
212  /// サブスレッド関数
213  ///
214  /// サブスレッド関数です。
215  ///
216  /// @param[in] lpParam 引数ポインタ
217  /// @return 終了コード
218  /// @attention なし
219  ///
220  static DWORD WINAPI SubThreadProc( LPVOID lpParam ) noexcept;
221 
222  //=====================================================================
223  // 限定公開変数
224  protected:
225  SMenuInfo const* m_psMenuInfo; ///< メニュー定義情報構造体ポインタ
226  CEvent m_cEventRequest; ///< 要求イベント
227  CEvent m_cEventNotify; ///< 通知イベント
228  CEvent m_cEventFinish; ///< 終了イベント
229  CThread m_cThreadSub; ///< サブスレッド
230  int m_nMenuIndex; ///< メニュー項目インデックス
231  int m_nRepeat; ///< リピートカウント
232  bool m_bRepeat; ///< リピート実行フラグ
233  bool m_bSubMenu; ///< サブメニュー要求フラグ
234  CConsoleMenu* m_pcSubMenu; ///< サブメニューポインタ
235  CConsoleMenu* m_pcParent; ///< 親メニューポインタ
236 
237  //=====================================================================
238  // 静的限定公開定数
239  protected:
240  static wchar_t const* const ITEM_KEY_LIST; ///< 項目選択文字リスト
241 
242  //=====================================================================
243  // 静的限定公開変数
244  protected:
245  static bool s_bStopMenu; ///< メニュー中止要求フラグ
246 
247  //=====================================================================
248  // 削除関数
249  private:
250  CConsoleMenu( CConsoleMenu const& ) = delete;
251  CConsoleMenu& operator=( CConsoleMenu const& ) = delete;
252  };
253 }
254 
255 #pragma managed( pop )
SMenuInfo const * m_psMenuInfo
メニュー定義情報構造体ポインタ
Definition: CConsoleMenu.h:225
CConsoleMenu * m_pcSubMenu
サブメニューポインタ
Definition: CConsoleMenu.h:234
virtual ~CConsoleMenu() noexcept
デストラクタ
Definition: CConsoleMenu.h:84
スレッドクラスヘッダファイル
virtual bool CanBeExit() const noexcept
終了可能状態取得関数
Definition: CConsoleMenu.h:166
メニュー定義情報構造体
Definition: CConsoleMenu.h:55
bool m_bRepeat
リピート実行フラグ
Definition: CConsoleMenu.h:232
virtual bool IsExecMenu() noexcept
実行状態取得関数
Definition: CConsoleMenu.h:100
CThread m_cThreadSub
サブスレッド
Definition: CConsoleMenu.h:229
bool m_bSubMenu
サブメニューフラグ
Definition: CConsoleMenu.h:45
virtual bool WaitForMenuFinish(DWORD dwTime=INFINITE) noexcept
メニュー終了待ち関数
Definition: CConsoleMenu.h:153
イベントクラス
Definition: CEvent.h:30
virtual CConsoleMenu * GetSubMenu() const noexcept
サブメニュー取得関数
Definition: CConsoleMenu.h:177
int const m_nCount
メニュー項目数
Definition: CConsoleMenu.h:57
共通ライブラリ名前空間
Definition: CArray.h:23
コンソールメニュークラス
Definition: CConsoleMenu.h:32
CEvent m_cEventRequest
要求イベント
Definition: CConsoleMenu.h:226
int m_nRepeat
リピートカウント
Definition: CConsoleMenu.h:231
ミューテックスクラス
Definition: CMutex.h:30
static wchar_t const *const ITEM_KEY_LIST
項目選択文字リスト
Definition: CConsoleMenu.h:240
int m_nMenuIndex
メニュー項目インデックス
Definition: CConsoleMenu.h:230
ミューテックスクラスヘッダファイル
wchar_t const *const m_pszItemName
項目名称
Definition: CConsoleMenu.h:44
CEvent m_cEventNotify
通知イベント
Definition: CConsoleMenu.h:227
スレッドクラス
Definition: CThread.h:30
static bool s_bStopMenu
メニュー中止要求フラグ
Definition: CConsoleMenu.h:245
bool m_bSubMenu
サブメニュー要求フラグ
Definition: CConsoleMenu.h:233
メニュー項目情報構造体
Definition: CConsoleMenu.h:43
SMenuItemInfo const * m_psItemInfo
メニュー項目情報構造体配列ポインタ
Definition: CConsoleMenu.h:58
イベントクラスヘッダファイル
#define LIB_COMMON_API
ダイナミックライブラリインポート宣言
Definition: LibCommonDef.h:44
CConsoleMenu * m_pcParent
親メニューポインタ
Definition: CConsoleMenu.h:235
virtual bool MenuCallBackProc(bool bPreCallBack=false) noexcept
メニューコールバック関数
Definition: CConsoleMenu.h:190
wchar_t const *const m_pszName
メニュー名称
Definition: CConsoleMenu.h:56
CEvent m_cEventFinish
終了イベント
Definition: CConsoleMenu.h:228