CListCtrl, 過載DrawItem函式

2021-08-31 05:52:31 字數 3011 閱讀 4784

定義你自己的類,繼承clistctrl

類,然後過載drawitem

函式,並保證在屬性中有lvs_ownerdrawfixed

風格.exp:

clistctrlext m_listctrl;

m_listctrl.modifystyle(0,lvs_ownerdrawfixed,0);

void clistctrlext::drawitem(lpdrawitemstruct lpdis)

else

lv_column lvc;

lvc.mask=lvcf_fmt|lvcf_width;

rccol.right = rccol.left;

for(int ncol=0; getcolumn(ncol,&lvc); ncol++)

pdc->restoredc(nolddcmode);

}

在實現自畫功能的時候, 注意要畫的時候只能對乙個crect 裡面來描畫, 也就是說對乙個item 所佔的格仔進行描畫, 不能同時畫這個區域,drawitem 函式當畫面有什麼變化時都會自動呼叫.

// 機能:drawitem 関數のオーバーライドので、リストビューの自畫ことができる。

void cdiameterlogwndone::drawitem(lpdrawitemstruct lpdrawitemstruct)

// 機能:シーケンスウインドウには各訊號の訊號名と訊號タイプを表示する。

void cdiameterlogwndone::drawtext(cdc *pdc, clistctrl &m_listctrl, int nitem, int ncount, int dw)

else

//sendipport の下縦線を描畫する

if(nitem > 1)

for(int i = 0 ; i < ncount ; i ++)

//recvipport の下縦線を描畫する

if(nitem > 1)

}if(dw == itemcolor_change)

else

// commandname の描畫領域計算

m_listctrl.getsubitemrect(nitem,1,lvir_label,rectthr);

cstring stexttwo = m_listctrl.getitemtext ( nitem, 1);

//commandname の文字の描畫

if(!stexttwo.isempty() && stexttwo.getlength() != 0)

pdc->setbkcolor(color);

pdc->settextcolor(rgb(0,0,0));}

// 機能:マウスにて左クリックした際に、パラメータウインドウには選択した訊號名の內容を表示する。

void cdiameterlogwndone::onclick(nmhdr* pnmhdr, lresult* presult) */

/*// 方法 二

position pos = thectrl.getfirstselecteditemposition();

int m_nindex = thectrl.getnextselecteditem(pos); // get the item be selected

*/// 方法 三

pt.x-=rect.left;

pt.y-=rect.top;

//listctrl 中で選中item を確認する

i= thectrl.hittest(cpoint(pt));

cmainframe* pframe = (cmainframe*)afxgetmainwnd();

cdiameterlogwndtwo *pview = (cdiameterlogwndtwo *)pframe->m_wndsplitter.getpane(1, 0);

int ncount = m_allcommandname.size();

for(int k = 0 ; k < ncount ; k ++)

}if(flag == 0)

flag = 0;

//m_clicknumber.push_back((k+1) * 4);}}

// ソーティングする

for(k = 0 ; k < m_clicknumber.size(); k ++)}}

}最後在儲存到html 裡面, 注意

語法是用於儲存txt 裡面的內容原封不動的放到html 裡面, 還要注意用: 來控制畫面的大小

通過處理nm_customdraw ,可以實現你的功能!但是nm_customdraw 在class wizard 中有可能看不到,不用管他,直接按照小麵的方法新增處理過程即可!

1. 在訊息對映表中

begin_message_map(cihisserverview, clistview)

//}afx_msg_map

// standard printing commands

end_message_map()

2. 在標頭檔案中

afx_msg void oncustomdraw(nmhdr*, lresult*);

3. 在cpp 檔案中

void cihisserverview::oncustomdraw(nmhdr* pnmhdr, lresult* presult)

// this is the notification message for an item. we'll request

// notifications before each subitem's prepaint stage.

else if ( plvcd->nmcd.dwdrawstage==cdds_itemprepaint )

else

plvcd->clrtextbk = m_crtextbk;

plvcd->clrtext = m_clrtext;

*presult = cdrf_dodefault; }}

CListCtrl用法 收藏

1。先來介紹report型別的clistctrl 首先使用下面的語句設定clistctrl的style dword setextendedstyle dword dwnewstyle 其中lvs ex checkboxes 表示新增checkbox lvs ex fullrowselect 表示選擇...

CListCtrl控制項應用

常用操作 1 新增列標題頭 insertcolumn 2 獲取與設定列寬 getcolumnwidth setcolumnwidth 3 新增一行 insertitem setitemtext 4 獲取與設定單元文字 getitemtext setitemtext 5 允許多行選中時,獲取選中的行數...

列表控制項CListCtrl

clistctrl m listdevice 設定listctrl 風格及擴充套件風格 m listdevice.setextendedstyle m listdevice.getextendedstyle lvs ex gridlines lvs ex fullrowselect dwstyle ...