Visual Studioの出力ウィンドウのようなものを目指し,CDockableDialogとCOutputListBox(CListBoxのサブクラス)を用いて実装した.
メッセージの表示は出力対象は様々なものが考えられる.例えば,標準出力(コンソール)であったり,CListBoxであったり,ファイルでも対応するべきである.
そのためCLogManagerクラスとCLogOutput基本クラスを作り,COutputListBoxはCListBoxとCLogOutputの多重継承とした.
CLogManagerはシングルトンとなっており,任意のCLogOutput派生クラスを追加・削除できる.
CLogManager::Writeにより全てのCLogOutputに出力する.その際,{Debug, Warning, Info, Error}というメッセージレベルを定義することでレベルに応じた表示・非表示や色の設定などを可能とした.
簡単のために4種のマクロ,{Debug|Warning|Info|Error}LogMacroを定義し,CLogManagerのインスタンスの取得と書式をマクロ化している.
グローバル関数やCLogManagerの静的関数とすると _ _FUNCTION_ _ が使えないためマクロとした(下付きになってしまうため,とりあえずスペースを挿入).
COutputListBoxではメッセージレベルに応じた色わけをするためにオーナードローとした.
また,どの項目も選択されていない場合は末尾が常に表示されるようにし,メッセージが追加されると自動でスクロールするようにした.
逆に項目が選択されている場合は自動でスクロールすることはない.選択状態の解除は右クリックでできるようにした.
COutputListBoxはCDockablePane上に作成することで自由な配置および非表示を可能とした.
コード詳細(アクセス制限)
そのためCLogManagerクラスとCLogOutput基本クラスを作り,COutputListBoxはCListBoxとCLogOutputの多重継承とした.
CLogManagerはシングルトンとなっており,任意のCLogOutput派生クラスを追加・削除できる.
CLogManager::Writeにより全てのCLogOutputに出力する.その際,{Debug, Warning, Info, Error}というメッセージレベルを定義することでレベルに応じた表示・非表示や色の設定などを可能とした.
簡単のために4種のマクロ,{Debug|Warning|Info|Error}LogMacroを定義し,CLogManagerのインスタンスの取得と書式をマクロ化している.
グローバル関数やCLogManagerの静的関数とすると _ _FUNCTION_ _ が使えないためマクロとした(下付きになってしまうため,とりあえずスペースを挿入).
COutputListBoxではメッセージレベルに応じた色わけをするためにオーナードローとした.
また,どの項目も選択されていない場合は末尾が常に表示されるようにし,メッセージが追加されると自動でスクロールするようにした.
逆に項目が選択されている場合は自動でスクロールすることはない.選択状態の解除は右クリックでできるようにした.
COutputListBoxはCDockablePane上に作成することで自由な配置および非表示を可能とした.
コード詳細(アクセス制限)
コメントをかく