久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

(轉)CListView常用用法 - wolfplan - 博客園

 zhaopengxslc 2011-05-26
1
2
3 CListView中內置了CListCtrl,,所以對CListView的操作實際上就是對內置CListCtrl的操作,。下面就從新建一個CListView的子類開始,,我從工程中新建了一個叫做CInfoView的類,基類選擇CListView,。
4
5 1>----------初始化CListView,,設置風格,背景和字體顏色,,初始化行列,。該項工作在OnInitialUpdate()中完成,如下所示,。
6
7 void CInfoView::OnInitialUpdate()
8 {
9 CListView::OnInitialUpdate();
10 // TODO: Add your specialized code here and/or call the base class
11 CListCtrl& m_list = GetListCtrl();//得到內置的listctrl引用
12 LONG lStyle;
13 lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//獲取當前窗口風格
14 lStyle &= ~LVS_TYPEMASK; //清除顯示方式位
15 lStyle |= LVS_REPORT; //設置報表風格
16 SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle); //設置窗口風格
17
18 DWORD dwStyle = m_list.GetExtendedStyle();
19
20 //選中某行使整行高亮(只適用于報表風格的listctrl)
21 dwStyle |= LVS_EX_FULLROWSELECT;
22 dwStyle |= LVS_EX_GRIDLINES;//網(wǎng)格線(只適用與報表風格的listctrl)
23
24 m_list.SetExtendedStyle(dwStyle); //設置擴展風格
25 m_list.SetBkColor(RGB(200, 200, 200)); //設置背景顏色
26 m_list.SetTextBkColor(RGB(200, 200, 200)); //設置文本背景顏色
27 m_list.SetTextColor(RGB(10, 10, 80)); //設置文本顏色
28
29 //插入列的標題,,為了簡單起見,我只插入三列
30 m_list.InsertColumn( 0, "圖像幀號", LVCFMT_CENTER, 80 );
31 m_list.InsertColumn( 1, "可見性判斷", LVCFMT_CENTER, 110 );
32 m_list.InsertColumn( 2, "置信度結果", LVCFMT_CENTER, 110 );
33 }
34
35
36 2>----------插入一行數(shù)據(jù),。一般在實際應用中,,都是在程序運行中,插入一行數(shù)據(jù),,這時候,,需要在當前的程序語境中得到CInfoView的指針,然后進行插入數(shù)據(jù)的操作,。在我的應用中,,我把CinfoView作為拆分窗口的一個子窗口,所以具體操作如下:
37
38 CListView*listview=(CListView*)(((CMainFrame*)theApp.GetMainWnd())->m_wndSplitter1.GetPane(1,0));//得到ListView的指針
39 CListCtrl& list = listview->GetListCtrl();//得到listview內置listctrl的引用
40 CString strId, strCo;//圖像幀號,,置信度
41 CString strVb = "Y"; //可見性
42 if(fConfid[nIndex] <= 0)
43 {
44 strVb = "N";
45 }
46 strId.Format("%d", nIndex+1);
47 strCo.Format("%.4f", fConfid[nIndex]);
48
49 //插入一行數(shù)據(jù),,始終在頂端插入新的數(shù)據(jù)
50 int nRow = list.InsertItem(0, strId);
51 list.SetItemText(nRow, 1, strVb);
52 list.SetItemText(nRow, 2, strCo);
53
54 3>----------右鍵單擊彈出浮動菜單,。在我的應用中,右鍵彈出的浮動菜單,,只有一項:“刪除所有內容”,。要彈出浮動菜單,首先先要在“資源”的“Menu”中新建一個Menu,,ID命名為IDR_POPMENU,,然后在該Menu中添加一個主菜單“操作”,在“操作”下添加一個子菜單“刪除所有內容”,,ID命名為“ID_DELETE_ALL”,,通過向導在CInfoView中給ID_DELETE_ALL添加消息響應函數(shù)OnDeleteAll(),如下:
55
56 void CInfoView::OnDeleteAll()
57 {
58 CListCtrl &m_list = GetListCtrl();
59 m_list.DeleteAllItems();
60 }
61
62 然后通過向導在CInfoView中添加右鍵單擊響應函數(shù)=NM_RCLICK,,如下:
63
64 void CInfoView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
65 {
66 // TODO: Add your control notification handler code here
67 CListCtrl &m_list = GetListCtrl(); //獲取當前列表控件的指針
68 CMenu menu, *pSubMenu; //定義下面要用到的cmenu對象
69 menu.LoadMenu(IDR_POPMENU); //裝載自定義的右鍵菜單
70 pSubMenu = menu.GetSubMenu(0); //獲取第一個彈出菜單
71 CPoint oPoint; //定義一個用于確定光標位置的位置
72 GetCursorPos(&oPoint); //獲取當前光標的位置
73
74 //在指定位置顯示彈出菜單
75 pSubMenu->TrackPopupMenu(TPM_LEFTALIGN, oPoint.x, oPoint.y, this);
76 }
77
78 4>----------添加消息響應函數(shù)OnCustomDraw(),,為ClistCtrl的每個Item設置不同的顏色,在該應用中,,為單數(shù)和偶數(shù)的Item項設置兩種不同的顏色,。具體步驟如下:
79 首先在InfoView.h的AFX_MSG之間添加消息函數(shù)聲明:
80 afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
81 然后在InfoView.cpp的BEGIN_MESSAGE_MAP之間添加消息映射:
82 ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
83 最后在InfoView.cpp中添加函數(shù)實現(xiàn):
84
85 void CInfoView::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
86 {
87 LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
88
89 switch(lplvcd->nmcd.dwDrawStage)
90 {
91 int iRow;
92 case CDDS_PREPAINT:
93 *pResult = CDRF_NOTIFYITEMDRAW;
94 break;
95 case CDDS_ITEMPREPAINT:
96 *pResult = CDRF_DODEFAULT;
97 iRow= lplvcd->nmcd.dwItemSpec;
98 if(iRow & 1)
99 {
100 lplvcd->clrTextBk = RGB(230, 230, 230);
101 //lplvcd->clrText = RGB(255, 255, 0);
102 *pResult = CDRF_NEWFONT;
103 }
104 break;
105 default:
106 *pResult = CDRF_DODEFAULT;
107 }
108 }
109
110 5>----------為CInfoView添加點擊列的標題進行排序的消息響應函數(shù),在添加該消息響應函數(shù)之前,,先要定義實現(xiàn)排序的回調函數(shù),。在該應用中,第一列是圖像幀號,,按自然數(shù)排序,,其他列都按字串進行排列,所以定義兩個比較的回調函數(shù),。
111 在InfoView.h中聲明兩個靜態(tài)的回調函數(shù):
112
113 static int CALLBACK ListViewCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);//按字串排序
114
115 static int CALLBACK ListViewCompareIntFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);//按自然數(shù)排序
116
117 在InfoView.cpp中實現(xiàn)兩個靜態(tài)的回調函數(shù):
118
119 int CALLBACK CInfoView::ListViewCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
120 {
121 // 得到排序方式
122 int *pisortorder = (int *)lParamSort;
123
124 // 得到兩個列的排序信息
125 TCHAR *sz1 = (TCHAR *)lParam1;
126 TCHAR *sz2 = (TCHAR *)lParam2;
127 // 比較列的信息并返回比較結果,。
128 // 若為減序,則將比較結果乘上-1,。
129 if (*pisortorder == LVS_SORTASCENDING)
130 return lstrcmp(sz1, sz2);
131 else
132 return lstrcmp(sz1, sz2) * (-1);
133 }
134
135 int CALLBACK CInfoView::ListViewCompareIntFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
136 {
137 // 得到排序方式
138 int *pisortorder = (int *)lParamSort;
139 // 得到兩個列的排序信息
140 TCHAR *sz1 = (TCHAR *)lParam1;
141 TCHAR *sz2 = (TCHAR *)lParam2;
142 int n1 = _ttoi(sz1);
143 int n2 = _ttoi(sz2);
144 // 比較列的信息并返回比較結果,。
145 // 若為減序,則將比較結果乘上-1,。
146 if(*pisortorder == LVS_SORTASCENDING)
147 {
148 if(n1 - n2 > 0) return 1;
149 else if(n1 -n2 == 0) return 0;
150 else return -1;
151 }
152 else
153 {
154 if(n1 - n2 > 0) return -1;
155 else if(n1 -n2 == 0) return 0;
156 else return 1;
157 }
158 }
159
160 //然后通過向導為事件LVN_COLUMNCLICK添加消息響應函數(shù)OnColumnclick(),在該函數(shù)中調用上面的回調函數(shù)
161 void CInfoView::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult)
162 {
163 // TODO: Add your control notification handler code here
164 static int ncurSortCol = -1; // 保存當前的排序列,。
165 // 一開始表示為-1,表示尚未按任何列排序,。
166 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
167 CListCtrl* lc = &GetListCtrl();
168 LONG ws = GetWindowLong(lc->m_hWnd, GWL_STYLE);
169 int nSortOrder; // 排序的方式
170
171 // 若點擊列與當前排序列不同的列,,則改變排序序,并將排序方式改為增序,。
172 // 若當前排序列與點擊列相同,,則更改增、減序的排序方式
173 if (ncurSortCol == pNMListView->iSubItem)
174 {
175 if (ws & LVS_SORTASCENDING)
176 {
177 ws ^= LVS_SORTASCENDING;
178 nSortOrder = LVS_SORTDESCENDING;
179 }
180 else
181 {
182 ws ^= LVS_SORTDESCENDING;
183 nSortOrder = LVS_SORTASCENDING;
184 }
185 }
186 else
187 {
188 if (ws & LVS_SORTASCENDING)
189 {
190 nSortOrder = LVS_SORTDESCENDING;
191 ncurSortCol = pNMListView->iSubItem;
192 }
193 else
194 {
195 nSortOrder = LVS_SORTASCENDING;
196 ncurSortCol = pNMListView->iSubItem;
197 }
198 }
199
200 // 將當前的排序信息保存在窗口Style中,,供以后使用
201 ws |= nSortOrder;
202 SetWindowLong(lc->m_hWnd, GWL_STYLE, ws);
203
204 // 將各ITEM的LPARAM用新排序列的內容替換
205 LVITEM li;
206 li.mask = LVIF_PARAM|LVIF_TEXT;
207 TCHAR szItemText[1024];
208 for (int i = 0; i < lc->GetItemCount(); i++)
209 {
210 li.iItem = i;
211 li.iSubItem = ncurSortCol;
212 li.cchTextMax = 1024;
213 li.pszText = szItemText;
214 lc->GetItem(&li);
215 TCHAR * szlparam = (TCHAR *)li.lParam;
216 // 刪除以前的信息,,釋放空間
217 // 添加List Item時應注意將lParam初始化NULL
218 if (szlparam != NULL)
219 delete szlparam;
220
221 // 復制當前列的szItemText到Item的lParam中
222 szlparam = new TCHAR[lstrlen(szItemText) + 1];
223 lstrcpy(szlparam, szItemText);
224 lc->SetItemData(i, DWORD(szlparam));
225 }
226
227 // 開始排序
228 if(ncurSortCol == 0)//第一列按整數(shù)排序
229 {
230 GetListCtrl().SortItems(ListViewCompareIntFunc,(LPARAM)(&nSortOrder));
231 }
232 else
233 GetListCtrl().SortItems(ListViewCompareFunc,(LPARAM)(&nSortOrder));
234 *pResult = 0;
235
236 }
237

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多