CListCtrl控制項使用方法總結

2021-12-24 14:38:54 字數 3571 閱讀 7388

列表控制項可以看作是功能增強的listbox,它提供了四種風格,而且可以同時顯示一列的多中屬性值。

mfc中使用clistctrl類來封裝列表控制項的各種操作。

通過呼叫 bool create( dword dwstyle, const rect& rect, cwnd* pparentwnd, uint nid )建立乙個視窗,

dwstyle中可以使用以下一些列表控制項的專用風格:

lvs_icon lvs_smallicon lvs_list lvs_report

這四種風格決定控制項的外觀,同時只可以選擇其中一種,分別對應:大圖示顯示,小圖示顯示,列表顯示,詳細報表顯示

lvs_editlabels

結點的顯示字元可以被編輯,對於報表風格來講可編輯的只為第一列。

lvs_showselalways

在失去焦點時也顯示當前選中的結點

lvs_singlesel

同時只能選中列表中一項

clistctrl初始化使用過程:

1. 首先你需要設定列表控制項所使用的imagelist(圖示列表)

1.1) 如果你使用大圖示顯示風格,你就需要以如下形式呼叫:

cimagelist* setimagelist( cimagelist* pimagelist, lvsil_normal);

1.2) 如果使用其它三種風格顯示而不想顯示圖示你可以不進行任何設定,否則需要以如下形式呼叫:

cimagelist* setimagelist( cimagelist* pimagelist, lvsil_small);

2. 設定列表各項文字列表。

通過呼叫int insertitem( int nitem, lpctstr lpszitem )可以在列表控制項中nitem指明位置插入一項,lpszitem為顯示字元。

3. 除lvs_report風格外, 其他三種風格都只需要直接呼叫 insertitem就可以了。

但如果使用報表風格就必須先設定列表控制項中的列資訊。

通過呼叫:

int insertcolumn( int ncol, lpctstr lpszcolumnheading, int nformat , int nwidth, int nsubitem)插入列。

icol為列的位置,從零開始,lpszcolumnheading為顯示的列名,nformat為顯示對齊方式, nwidth為顯示寬度,nsubitem為分配給該列的列索引。

在有多列的列表控制項中就需要為每一項指明其在每一列中的顯示字元,通過呼叫:

bool setitemtext( int nitem, int nsubitem, lptstr lpsztext )可以設定每列的顯示字元。

nitem為設定的項的位置,nsubitem為列位置,lpsztext為顯示字元。

下面的**演示了如何設定多列並插入資料:

m_設定imagelist

m_"col 1",lvcfmt_left,300,0); //設定列

m_"col 2",lvcfmt_left,300,1);

m_"col 3",lvcfmt_left,300,2);

m_"item 1_1"); //插入行

m_"item 1_2"); //設定該行的不同列的顯示字元

m_"item 1_3");

4. 此外clistctrl還提供了一些函式用於得到/修改控制項的狀態。

colorref gettextcolorbool settextcolor( colorref cr )

用於得到/設定顯示的字元顏色。

colorref gettextbkcolorbool settextbkcolor( colorref cr )

用於得到/設定顯示的背景顏色。

void setitemcount( int icount )

用於得到新增進列表中項的數量。

bool deleteitem(int nitem)

用於刪除某一項

bool deleteallitems( )

將刪除所有項。

bool setbkimage(hbitmap hbm, bool ftile , int xoffsetpercent, int yoffsetpercent)

用於設定背景位圖。

cstring getitemtext( int nitem, int nsubitem )

用於得到某項的顯示字元。

5. 列表控制項的訊息對映同樣使用on_notify巨集,

形式如同:

on_notify( wnotifycode, id, memberfxn )

wnotifycode為通知**,id為產生該訊息的視窗id,memberfxn為處理函式

函式的原型如同:

void on***list(nmhdr* pnmhdr, lresult* presult)

其中pnmhdr為一資料結構,在具體使用時需要轉換成其他型別的結構。

對於列表控制項可能取值和對應的資料結構為:

lvn_beginlabeledit 在開始某項編輯字元時傳送,所用結構:nmlvdispinfo

lvn_endlabeledit 在結束某項編輯字元時傳送,所用結構:nmlvdispinfo

lvn_getdispinfo 在需要得到某項資訊時傳送,(如得到某項的顯示字元)所用結構:nmlvdispinfo

關於on_notify有很多內容,將在以後的內容中進行詳細講解。

關於動態提供結點所顯示的字元:

首先你在項時需要指明lpszitem引數為: lpstr_textcallback。

在控制項顯示該結點時會通過傳送tvn_getdispinfo來取得所需要的字元,在處理該訊息時先將引數 pnmhdr轉換為lpnmlvdispinfo,

然後填充其中通過item中的iitem,isubitem可以知道當前顯示的為那一項。下面的**演示了這種方法:

char szout[8][3]=;

//新增結點

m_m_

//處理訊息

void cparentwnd::ongetdispinfolist(nmhdr* pnmhdr, lresult* presult)

關於編輯某項的顯示字元:

(在報表風格中只對第一列有效)首先需要設定列表控制項的 lvs_editlabels風格,在開始編輯時該控制項將會傳送lvn_beginlabeledit,

你可以通過在處理函式中返回true來取消接下來的編輯,在編輯完成後會傳送lvn_endlabeledit,在處理該訊息時需要將引數pnmhdr轉換為lpnmlvdispinfo,

然後通過其中的得到編輯後的字元,並重置顯示字元。如果編輯在中途中取消該變數為null。

下面的**說明如何處理這些訊息:

//處理訊息 lvn_beginlabeledit

void cparentwnd::onbegineditlist(nmhdr* pnmhdr, lresult* presult)

//處理訊息 lvn_beginlabeledit

void cparentwnd::onbegineditlist(nmhdr* pnmhdr, lresult* presult)

paintman使用方法

paintman講義 選單和面板介紹 浮動面板 a.工具面板切換圖象編輯工具 b.檔案預覽用於確認和切換 檔案 c.著色鏡面板 d.油漆調色盤 油漆有關的特性開關和設定.d 1.填充 填充方式設定.d 2.刷子 氣刷大小和淡入淡出設定.d 3.動畫臺 動畫臺設定.e.顏色圖表調色盤 註冊,重新命名並...

CorelDRAW使用方法

藝術筆工具的使用 可以繪製出類似鋼筆 毛筆的線條,製作出不同風格的作品,在藝術筆工具的屬性欄中提供了5種筆觸工具。預置工具 提供了23種預設筆劃樣式,繪製線條時會依據所選筆畫的樣式繪製出符合要求的線條。畫筆工具的使用 可以隨著畫出的曲線路徑,將畫筆筆劃列表中所選的圖案拉長變形,也就是說將線條賦予圖案...

PPS使用方法

1 物料乾燥工藝 根據料受潮的情況確定 溫度 120 140 時間 4 8hr 注 如成型產品中有金屬嵌件,必須先預熱嵌件 金屬嵌件預熱溫度 130 140 金屬嵌件預熱時間 恆溫1 hr 2 注塑工藝 模具溫度 130 140 料筒溫度 前段 240 260 中段 290 310 後段 300 3...