5. DuiLib コンポーネントの構造に関する予備調査

1.DuiLibコンポーネントの構造に関する予備調査

DuiLibの全体的な実装には、コントロールだけでなく、ウィンドウ メッセージやXML処理などのモジュールも含まれており、公式の構造図は次のとおりです。

ここに画像の説明を挿入

この図は、引き続きDuiLibの全体的な設計を詳細に説明しています. 注目に値する部分は、一連のウィンドウ リソースの管理とウィンドウ メッセージの処理を引き受けるだけでなく、 「ウィンドウ マネージャー」部分 (メイン関数のCPaintManagerUI ) です。また、解析されXMLwindowの間のブリッジの役割も担うため、ウィンドウ マネージャーを通じて指定された名前のコントロールを見つけて保存し、指定されたコントロール オブジェクトに変換して、オブジェクトの対応するメソッドを呼び出すことができます。コントロールの状態を制御します。

次のコード デモを学習し、表示しやすくするために、 cpp ファイルに記述されたMainWndFrameクラスを別のファイルに配置します。以下に示すように:
ここに画像の説明を挿入

次に、次のように、基本クラスWindowImplBaseによって提供されるInitWindowメソッドを実装します。このメソッドは、ウィンドウの作成 (OnCreate)時に呼び出されます。

ここに画像の説明を挿入
このメソッドでは、必要なコントロールをXMLで見つけて実際のコントロール オブジェクトに変換できます。まず、コントロールに必要なコントロールに名前を付ける必要があります。コントロールのXML構成にname属性を追加して、コントロールの名前を指定します。次に、MainWndFrame クラスにいくつかのプライベート メンバー変数を追加して、これらのコントロールを「受け取る」準備をします。ここでのコントロールへの初期値の割り当ては C++11 の新機能であり、古いバージョンではサポートされていないことに注意してください。コンパイラのバージョンコンストラクタに配置して初期化できます。次に、次のように、前に説明したウィンドウ マネージャーを使用して、オーバーライドしたInitWindow関数内のコントロールを見つけます。
ここに画像の説明を挿入

ここに画像の説明を挿入

void MainWndFrame::InitWindow(){
	btn_min_ = dynamic_cast<CButtonUI*>(m_PaintManager.FindControl(_T("btn_wnd_min")));
	btn_max_ = dynamic_cast<CButtonUI*>(m_PaintManager.FindControl(_T("btn_wnd_max")));
	btn_close_ = dynamic_cast<CButtonUI*>(m_PaintManager.FindControl(_T("btn_wnd_close")));
}

このようにして、ウィンドウ マネージャーm_PaintManagerFindControl メソッドを通じてコン​​トロール名を使用してコントロールを見つけます。FindControlメソッドは CControlUI *タイプを返します。指定されたコントロール タイプへの動的な型変換を通じて、操作する権利を取得します。制御。m_PaintManager は初期化され、基本クラスWindowImplBaseに割り当てられます。興味がある場合は、フォローアップして確認してください。これは、基本的なコントロールが作成され、制御可能なメンバー変数に変換される方法です。DuiLibが豊富なコントロール タイプを多数提供していることを見てきましたが、上の図で紹介されているコントロールは不完全です。結局のところ、それはかなり前の図です。 . さて、これを標準として使用することはできないため、自分でコードを調べなければなりません。以下は、DuiLibに現在含まれているすべてのコントロールをリストした、コントロールのみを整理した構造図です。分岐関係は継承関係を表し矢印は多重継承の親クラス間の関係を表します
ここに画像の説明を挿入
図から、レイアウトクラス(またはコンテナクラス)のUIコンポーネントはCContainerUIから継承され、コントロールクラスのUIコンポーネントはCControlUIから継承されていることがわかります。これが、上記の型変換で指定されたコントロールの型に変換できる理由です。現時点ではこれを念頭に置いておけば、ほとんどの問題には十分対処できます。上記のコードは、XML内のコントロールを制御可能なコントロール メンバー変数に変換するだけです。ユーザーの操作ウィンドウのイベントを通じてコン​​トロールを操作する場合が多くなりますが、次に、ユーザーの操作ウィンドウのメッセージやイベントに応答して、コントロールの状態を操作する方法についても紹介します。道。

おすすめ

転載: blog.csdn.net/qq_44918090/article/details/131234086