【问题标题】:Custom drawing Listview Items not changing text color自定义绘图 Listview 项目不改变文本颜色
【发布时间】:2012-10-10 04:32:28
【问题描述】:

我正在尝试在 WTL 中实现自定义绘制的列表视图,这是列表视图的代码:

class CTaskListCtrl:  public CWindowImpl<CTaskListCtrl, CListViewCtrl>,
                   public CCustomDraw<CTaskListCtrl>   
{
public:
    BOOL SubclassWindow(HWND hWnd)
    {
        ATLASSERT(m_hWnd==NULL);
        ATLASSERT(::IsWindow(hWnd));
        BOOL bRet = CWindowImpl<CTaskListCtrl, CListViewCtrl>::SubclassWindow(hWnd);
          return bRet;
   }
   BEGIN_MSG_MAP(CTaskListCtrl)
      CHAIN_MSG_MAP(CCustomDraw<CTaskListCtrl>)
   END_MSG_MAP()

   DWORD OnPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
   {        
      return  CDRF_NOTIFYITEMDRAW;
   }

   DWORD OnItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW lpNMCustomDraw)
   {
      NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( lpNMCustomDraw );

      COLORREF crText;

      if ( (pLVCD->nmcd.dwItemSpec % 2) == 0 )
         crText = RGB(200,200,255);
      else 
         crText = RGB(255,255,255);   

      pLVCD->clrTextBk = crText;

      return CDRF_DODEFAULT;
    }
};   

这就是我使用它的方式:IDC_LIST_TASKS 是我在资源向导中创建的 ListVieew 资源。

CTaskListCtrl m_taskList;
m_taskList.SubclassWindow(GetDlgItem(IDC_LIST_TASKS));

m_taskList.AddColumn( TEXT("Name"),0);
m_taskList.SetColumnWidth(0,100);

m_taskList.AddColumn( TEXT("Algorithm"), 1);
m_taskList.SetColumnWidth(1,100);

m_taskList.AddColumn( TEXT("Status"), 2);
m_taskList.SetColumnWidth(2,100);

m_taskList.AddItem(0,0,L"ASDASD");
m_taskList.AddItem(0,1,L"ASDASD");
m_taskList.AddItem(0,2,L"ASDASD");

并且项目文本的颜色不会改变。为什么?

【问题讨论】:

  • 问题说“项目文本的颜色”,但代码设置的是文本背景颜色,而不是文本颜色。如果 BkMode 为 TRANSPARENT,则不会看到背景颜色。

标签: c++ winapi mfc wtl


【解决方案1】:

如果不整理previous questions,您就会继续发布具有相同问题的新内容。

这段代码sn-p没什么可修复的,错的太多了。

您可以从工作示例 Lazy Grid WTL implementationCustom Drawn Controls using WTL 开始,并弄清楚事情是如何工作的。

  • 您不需要子类化到自定义绘图
  • 自定义绘图通知到达控件的父级,而不是控制自身 - 您需要在父窗口或REFLECT_NOTIFICATIONS 上处理它们,在这种情况下,您可以选择在控件上处理它们(子类化是有意义的)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多