clistctrl控制項使用方法總結
今天第一次用clistctrl控制項,遇到不少問題,查了許多資料,現將用到的一些東西總結如下:
以下未經說明,listctrl預設view 風格為report
相關類及處理函式
mfc:clistctrl類
sdk:以 「listview_」開頭的一些巨集。如 listview_insertcolumn
lvs_icon: 為每個item顯示大圖示
lvs_smallicon: 為每個item顯示小圖示
lvs_list: 顯示一列帶有小圖示的item
lvs_report: 顯示item詳細資料
直觀的理解:windows資源管理器,「檢視」標籤下的「大圖示,小圖示,列表,詳細資料」
long lstyle;
lstyle = getwindowlong(m_list.m_hwnd, gwl_style);//獲取當前視窗style
lstyle &= ~lvs_typemask; //清除顯示方式位
lstyle |= lvs_report; //設定style
setwindowlong(m_list.m_hwnd, gwl_style, lstyle);//設定style
dword dwstyle = m_list.getextendedstyle();
dwstyle |= lvs_ex_fullrowselect;//選中某行使整行高亮(只適用與report風格的listctrl)
dwstyle |= lvs_ex_gridlines;//網格線(只適用與report風格的listctrl)
dwstyle |= lvs_ex_checkboxes;//item前生成checkbox控制項
m_list.setextendedstyle(dwstyle); //設定擴充套件風格
注:listview的style請查閱msdn
m_list.insertcolumn( 0, "id", lvcfmt_left, 40 );//插入列
m_list.insertcolumn( 1, "name", lvcfmt_left, 50 );
int nrow = m_list.insertitem(0, 「11」);//插入行
m_list.setitemtext(nrow, 1, 「jacky」);//設定資料
選中style中的show selection always,或者在上面第2點中設定lvs_showselalways
int nindex = 0;
//選中
m_list.setitemstate(nindex, lvis_selected|lvis_focused, lvis_selected|lvis_focused);
//取消選中
m_list.setitemstate(nindex, 0, lvis_selected|lvis_focused);
m_list.setextendedstyle(lvs_ex_checkboxes);
cstring str;
for(int i=0; i
方法一:
cstring str;
for(int i=0; i方法二:
position pos = m_list.getfirstselecteditemposition();
if (pos == null)
trace0("no items were selected!\n");
else
}tchar szbuf[1024];
lvitem lvi;
lvi.iitem = nitemindex;
lvi.isubitem = 0;
lvi.mask = lvif_text;
lvi.psztext = szbuf;
lvi.cchtextmax = 1024;
m_list.getitem(&lvi);
關於得到設定item的狀態,還可以參考msdn文章
q173242: use masks to set/get item states in clistctrl
lvcolumn lvcol;
char str[256];
int ncolnum;
cstring strcolumnname[4];//假如有4列
ncolnum = 0;
lvcol.mask = lvcf_text;
lvcol.psztext = str;
lvcol.cchtextmax = 256;
while(m_list.getcolumn(ncolnum, &lvcol))
m_list.ensurevisible(i, false);
int nheadnum = m_list.getheaderctrl()->getitemcount();
方法一:
while ( m_list.deletecolumn (0))
因為你刪除了第一列後,後面的列會依次向上移動。
方法二:
int ncolumns = 4;
for (int i=ncolumns-1; i>=0; i--)
m_list.deletecolumn (i);
新增listctrl控制項的nm_click訊息相應函式
void ctest6dlg::onclicklist1(nmhdr* pnmhdr, lresult* presult)
*/// 方法二:
/*nm_listview* pnmlistview = (nm_listview*)pnmhdr;
if(pnmlistview->iitem != -1)
*/*presult = 0;
}新增listctrl控制項的nm_click訊息相應函式
void ctest6dlg::onclicklist1(nmhdr* pnmhdr, lresult* presult)
*presult = 0;
}新增listctrl控制項的nm_rclick訊息相應函式
void ctest6dlg::onrclicklist1(nmhdr* pnmhdr, lresult* presult)
*presult = 0;
}新增listctrl控制項的lvn_itemchanged訊息相應函式
void ctest6dlg::onitemchangedlist1(nmhdr* pnmhdr, lresult* presult)
else if((pnmlistview->uoldstate & lvis_focused) == 0 &&
(pnmlistview->unewstate & lvis_focused) == lvis_focused)
if((pnmlistview->uoldstate & lvis_selected) == lvis_selected &&
(pnmlistview->unewstate & lvis_selected) == 0)
else if((pnmlistview->uoldstate & lvis_selected) == 0 &&
(pnmlistview->unewstate & lvis_selected) == lvis_selected)
*presult = 0;
}17. 改變選中行的顏色
首先是新增以下訊息
on_notify( nm_customdraw, idc_list1, ondrawcolorformylist ) //為改變顏色新增的訊息
再新增類成員函式,就ok了:
//改變 m_list 控制項單行的顏色
void cssdtdlg::ondrawcolorformylist( nmhdr *pnmhdr, lresult *presult )
else if ( cdds_itemprepaint == plvcd->nmcd.dwdrawstage )
else if ( (cdds_itemprepaint | cdds_subitem) == plvcd->nmcd.dwdrawstage )
else //設定為黑色
//設定背景色
if( nitem%2 ==0 )
else
plvcd->clrtext = clrnewtextcolor;
plvcd->clrtextbk = clrnewbkcolor;
*presult = cdrf_dodefault;}}
html控制項使用方法!!!
1.建立按鈕 click me 2.段落 第一段第二段 3.輸入框 first name type 指出輸入框文字型別。name 指出該輸入框唯一的名字。以便在以後使用。4.get 與 post 的區別 get通常是值傳遞,如密碼 post是表單傳遞,action到乙個地方寫入資料庫。get 方法是...
VC LIST控制項使用方法
首先初始化list控制項 m list.insertcolumn 0,學號 lvcfmt center,50 m list.insertcolumn 1,姓名 lvcfmt left,75 m list.insertcolumn 2,數學 lvcfmt left,50 m list.insertco...
Android Gallery控制項使用方法詳解
我們今天給大家講的就是gallery控制項,這個控制項在android當中是非常重要的,我們今天就給大家介紹一下3d的gallery控制項是怎麼樣來實現的。下面我們就來直接看看 吧。1.擴充套件gallery public class galleryflow extends gallery publ...