Outlook风格的单列使用不同的颜色显示条目

利用业余时间开发完成了一个类似Outlook的客户端的邮件程序后 , 发现Outlook的新邮件的显示使用单列不同的颜色,酷酷的,于是决定,也该让我的 Outplay如此...说做就做,就立刻查找了codeguru里的关于CTreeView的文章,找到了一些合适的信息,大概花了30分钟的时间,终于让我的纷飞(Outplay...)也酷了一把。Follow me,你会发现它是如此的简单和便捷,仅仅需要在你的CTreeView中添加几行代码而已。该怎么做呢?(as below)首先假定你的CTreeView派生类CTreeViewEx,然后你需要在TreeViewEx.h中,添加如下行:

afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);

然后你需要在消息映射中添加:

ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)

在OnCusteomDraw消息处理例程中添加如下代码:

void CLeftView::OnCustomDraw(LPNMHDR pNmhdr, LRESULT* pResult)
{
    static CRect    rcItem;
    static int      nItemState;
 
    LPNMTVCUSTOMDRAW pCustomDraw = (LPNMTVCUSTOMDRAW)pNmhdr;
    switch (pCustomDraw->nmcd.dwDrawStage)
    {
        case CDDS_PREPAINT:
            // 这种情况必须处理,且必须将pResult设置为 CDRF_NOTIFYITEMDRAW, 
            // 否则父窗口怎么也收不到 CDDS_ITEMPREPAINT 通知消息 (GGH) 
            *pResult = CDRF_NOTIFYITEMDRAW;
 

你可能感兴趣的:(C++编程)