日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

wtl重载 CListViewCtrl,及其用法。

發布時間:2025/4/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wtl重载 CListViewCtrl,及其用法。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.控件源碼:ColorListCtrl.h

// 自己的ListBox // // author yuanyc // date 2012.01.12 // Copyright (c) 2012. 中軟萬維 //#ifndef ColorListCtrl_H #define ColorListCtrl_H #include "../stdafx.h" #include <map> using namespace std;typedef CWinTraits<WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, 0> CColorListTraits;class CColorListCtrl : public CWindowImpl<CColorListCtrl, CListViewCtrl,CColorListTraits>, public CCustomDraw<CColorListCtrl> { private:typedef CWindowImpl<CColorListCtrl, CListViewCtrl, CColorListTraits> baseClass; public:DWORD OnPrePaint(int idCtrl, LPNMCUSTOMDRAW lpNMCD);DWORD OnItemPrePaint ( int idCtrl, NMCUSTOMDRAW* pnmcd );void SetItemColor(int nItem, COLORREF nColor){m_mapItemColor[nItem] = nColor;//RedrawItems(nItem, nItem);//UpdateWindow();}void OnRButtonDown(UINT uMsg, CPoint ptx){CMenu menu;menu.CreatePopupMenu();menu.AppendMenu(MF_BYCOMMAND, MENU_CLEAR_LOG, _T("清除日志")); ::GetCursorPos(&ptx);int i = menu.TrackPopupMenu(TPM_RETURNCMD,ptx.x,ptx.y, m_hWnd);if (i == MENU_CLEAR_LOG){DeleteAllItems();m_mapItemColor.clear();}SetMsgHandled(TRUE);}DECLARE_WND_SUPERCLASS(_T("WTL_CheckListView"), GetWndClassName())BEGIN_MSG_MAP_EX(CColorListCtrl)MSG_WM_RBUTTONDOWN(OnRButtonDown)CHAIN_MSG_MAP_ALT(CCustomDraw<CColorListCtrl>, 1)DEFAULT_REFLECTION_HANDLER()END_MSG_MAP()public:map<int,COLORREF> m_mapItemColor; };#endif /*ColorListCtrl_H*/

?ColorListCtrl.cpp

#include "stdafx.h" #include "ColorListCtrl.h" #include <bkres/bkres.h>DWORD CColorListCtrl::OnPrePaint(int idCtrl, LPNMCUSTOMDRAW lpNMCD) {return CDRF_NOTIFYITEMDRAW; }DWORD CColorListCtrl::OnItemPrePaint ( int idCtrl, NMCUSTOMDRAW* pnmcd ) {NMLVCUSTOMDRAW* pnmlv = (NMLVCUSTOMDRAW*) pnmcd;map<int,COLORREF>::iterator pos;pos = m_mapItemColor.find(pnmlv->nmcd.dwItemSpec);if (pos != m_mapItemColor.end()){pnmlv->clrText = pos->second;}else{AtlMessageBox(NULL,_T("ERROR"));}return CDRF_DODEFAULT; }

?2.思想:1.用map來存儲 鍵值對(行號和顏色)

????????????? 2.重載OnPrePaint和OnPrePaint

?

3.用法。

?? 在適當時機,如此調用,多線程,所以加了鎖。

::EnterCriticalSection(&m_log_lock);int n = m_listLog.GetItemCount();m_listLog.SetItemColor(n, RGB(0,255,0));m_listLog.InsertItem(n,CA2T(strprogress.c_str()));::LeaveCriticalSection(&m_log_lock);

?

轉載于:https://www.cnblogs.com/chunyou128/archive/2012/01/14/2322579.html

總結

以上是生活随笔為你收集整理的wtl重载 CListViewCtrl,及其用法。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。