MFC では、提供される特定のメカニズムにより、プログラマーは、オブジェクト指向フレームワークの最も望ましい機能であるモジュール性、カプセル化、および情報の隠蔽を回避できます。
(多くの) 例の 1 つが Owner Drawn コントロールです。子コントロールのサブクラスで実装DrawItem
し、そのサブクラスでそのコントロールのすべての描画を行うことを選択して、よりモジュール的に見えるようにすることができます。
class CustomButton: CButton{
// --- Lots of stuff, DECLARE_DYNAMIC etc
virtual void DrawItem(LPDRAWITEMSTRUCT lpdis){
// Drawing code for this button in the button's subclass
}
};
WM_DRAWITEM
...または、OnDrawItem を介して親 Window クラスでメッセージを処理することを選択できます
class MainFrame: CFrameWnd{
// --- Lots of stuff, DECLARE_DYNAMIC etc
CustomButton button;
afx_msg void OnDrawItem(LPDRAWITEMSTRUCT lpdis, UINT id){
if(id == CUSTOM_BUTTON_ID){
// Drawing code for this button in the button's subclass
}
}
};
後者の状況では、コントロールの描画はコントロール サブクラスの外にあります。つまり、「OOP データ構造は独自の演算子を持ち歩く傾向がある」という概念が損なわれます..そうですか?
だから私の質問は次のとおりです。どれが「ベストプラクティス」と見なされますか? 2 番目の理由が存在するのには理由があるはずです。