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;
}
こうすることにより,文字の背景が青,文字が赤になる.
(選択アイテムも同様)
参照