Last Updated 2002/12/10
Programming Tips Visual C++ MFC CTreeView(CTreeCtrl)  索 引 
TreeViewのテキスト色背景色
2002/12/10

ComCtl32.dll Ver4.71(Windows 95 with Internet Explorer 4.0 or later)より TVM_SETTEXTCOLOR と TVM_SETBKCOLOR のメッセージが追加されている.
またそのメッセージを使用したマクロ TreeView_SetTextColor,TreeView_SetBkColor も追加されている.

--- CTreeViewEx.h ---
Class CTreeViewEx : public CTreeView
{
public:
    void SetTextColor(COLORREF clr)
        { TreeView_SetTextColor(GetTreeCtrl().GetSafeHwnd(), clr); }
    void SetBkColor(COLORREF clr)
        { TreeView_SetBkColor(GetTreeCtrl().GetSafeHwnd(), clr); }
};


--- CTreeViewEx.cpp ---
CTreeViewEx::OnCreate (...)
{
    CTreeView::OnCreate(...);

    SetTextColor(RGB(255, 0, 0));
    SetBkColor(RGB(0, 0, 255));
}

こうすることにより,背景が青,文字が赤になる.
(選択されているアイテムは標準の色です)
(全背景が青になります)



ComCtl32.dll のバージョンに左右されないようにカスタム描画を行ってみる.

--- CTreeViewEx.h ---
// 生成されたメッセージ マップ関数
protected:
	//{{AFX_MSG(CLeftView)
	afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()


--- CTreeViewEx.cpp ---
BEGIN_MESSAGE_MAP(CTreeViewEx, CTreeView)
	//{{AFX_MSG_MAP(CTreeViewEx)
	ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
	//}}AFX_MSG_MAP
	// 標準印刷コマンド
	ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview)
END_MESSAGE_MAP()


void CTreeViewEx::OnCustomDraw (NMHDR* pNMHDR, LRESULT* pResult)
{
    LPNMTVCUSTOMDRAW lpCustomDraw = (LPNMTVCUSTOMDRAW)pNMHDR;

    if( lpCustomDraw->nmcd.dwDrawStage == CDDS_PREPAINT ) {
        *pResult = CDRF_NOTIFYITEMDRAW;
        return;
    }

    if( lpCustomDraw->nmcd.dwDrawStage == CDDS_ITEMPREPAINT ) {
        lpCustomDraw->clrText = RGB(255, 0, 0);
        lpCustomDraw->clrTextBk = RGB(0, 0, 255);
        *pResult = 0;
        return;
     }

     *pResult = 0;
     return;
}

こうすることにより,文字の背景が青,文字が赤になる.
(選択アイテムも同様)



参照
前後のTips
TreeViewのテキスト色背景色

DSS ProgrammingTipsCGI Ver2.01