- ベストアンサー
MFCのListCtrlを使ってセルに色をつけたい
- MFCのリストコントロールを使って、セルごとに色をつける方法について調べています。CMFCListCtrl::OnGetCellBkColorを使用すると可能なようですが、具体的な使い方がわかりません。
- Clistctrol_colorDlg::OnInitDialog関数において、リストコントロールのカラムとデータ部を作成しているコードがあります。
- 以下のURLには、MFCのリストコントロールに関する情報があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 上記サンプルに添削いただくレベルでは、解決しないでしょうか? 提示部分には修正する場所はない。 > CMFCListCtrlを派生したクラスを作成し、そのクラスにOnGetCellBkColorを実装して、呼び出された引数(行、列)に応じたCOLOREF 値を返すようにする。 ----ColoredListControl.h(新規作成)---- #pragma once class CColoredListControl : public CMFCListCtrl { DECLARE_DYNAMIC(CColoredListControl) public: CColoredListControl(){} virtual ~CColoredListControl(){} virtual COLORREF OnGetCellBkColor(int row, int column) { // row, columnに応じた色を返すように変更! return RGB((row+2) * 64, (column+2) * 64, 128); } protected: DECLARE_MESSAGE_MAP() }; ----ColoredListControl.cpp(新規作成)---- #include "stdafx.h" #include "ColeredList.h" #include "ColeredListControl.h" // CColeredListControl IMPLEMENT_DYNAMIC(CColoredListControl, CMFCListCtrl) BEGIN_MESSAGE_MAP(CColoredListControl, CMFCListCtrl) END_MESSAGE_MAP() ----listctrol_colorDlg.h(Clistctrol_colorDlgの定義)---- CMFCListCtrl m_wndList; ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ CColoredListControl m_wndList; // 変更 ----listctrol_colorDlg.cpp(Clistctrol_colorDlgの実装)---- #include "ColoredListControl.h" // 追加
その他の回答 (1)
- maru_yoshi_
- ベストアンサー率39% (17/43)
提示されているMSDNを見たところ、CMFCListCtrl::OnGetCellBkColorは、 「フレームワークは、個々のセルの背景色を確認する必要がある場合に、このメソッドを呼び出します。」 とあり、解説には 「OnGetCellBkColor の既定の実装は、指定された入力パラメーターを使用するのではなく、単に GetBkColor を呼び出します。 したがって、既定では、リスト コントロール全体に同じ背景色が設定されます。 個々のセルに個別の背景色を設定する場合は、派生クラスで OnGetCellBkColor をオーバーライドします。 」 と説明されています。 ポイントは、「個々のセルに個別の背景色を設定する場合は、派生クラスで OnGetCellBkColor をオーバーライドします。」です。 つまり、CMFCListCtrlを派生したクラスを作成し、そのクラスにOnGetCellBkColorを実装して、呼び出された引数(行、列)に応じたCOLOREF 値を返すようにする。 リストビューコントロールはCMFCListCtrlではなく、派生したクラスを対応させる。 自分ではやったことがないですけど、MSDNによれば、これで出来るはず。
お礼
ご回答ありがとうございます。 ですが申し訳ありません。 C++に詳しくなく派生クラスやオーバーライドがよくわかりません・・・ http://www.orangemaker.sakura.ne.jp/labo/memo/sdk-mfc/CMFCListCtrl.html http://www.aspfree.com/c/a/.NET/List-Control-and-Property-Grid-with-the-MFC-Feature-Pack/ で、おそらく派生クラス等がでているのですが、いったいDDX変数で設定した m_wndListにどのように関連付けるのかがさっぱりわかりません… 上記サンプルに添削いただくレベルでは、解決しないでしょうか?
お礼
ご回答ありがとうございます。 今、いろいろとやっているのですが、なぜかうまくいきません。 もう少しやってみます。 本当にありがとうございます。
補足
できました!!! 本当に丁寧にありがとうございました!!