日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

wtl重载 CListViewCtrl,及其用法。

發布時間:2025/4/14 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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,及其用法。的全部內容,希望文章能夠幫你解決所遇到的問題。

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