vc listctrl裡相同的列不同行顯示不同圖示
2009-02-26 20:52
我的一段代碼,報表風格:(部分)
對話框初始化中:
m_List.InsertColumn(0,"使用者",LVCFMT_LEFT,60);
m_List.InsertColumn(1,"IP",LVCFMT_LEFT,60);
m_List.InsertColumn(2,"開始時間",LVCFMT_LEFT,60);
m_List.InsertColumn(3,"請求站點",LVCFMT_LEFT,60);
///
DWORD dwStyle = GetWindowLong(m_List.GetSafeHwnd(),GWL_STYLE);
dwStyle &= ~LVS_TYPEMASK;
dwStyle |= LVS_REPORT;
SetWindowLong(m_List.GetSafeHwnd(),GWL_STYLE,dwStyle);
SetRedraw(TRUE);
Invalidate();
重新整理函數中:
m_List.DeleteAllItems();
POSITION pos = m_ptrlist.GetHeadPosition();
while(pos)
{
CInfo* pInfo = (CInfo*)m_ptrlist.GetNext(pos);
m_List.InsertItem(0,pInfo->GetCustomerName());
m_List.SetItemText(0,1,pInfo->GetCustomerAdd());
CTime time(pInfo->GetBeginTime());
CString strTime = time.Format("%H:%M:%S");
m_List.SetItemText(0,2,strTime);
CString str;
str.Format("%s",pInfo->GetStation());
m_List.SetItemText(0,3,str);
}
一.将圖示1和圖示2并排添加到一個BITMAP資源中(IDB_BITMAP1)
1.先添加兩個16×16的ico圖示,然後添加資源,選擇bitmap,該bitmap是32×32的,然後打開Bitmap,打開“資源工具條”裡面的"ID="
2.然後選擇“改變”-> “檢視使用”,然後修改"寬"32,“高”16,然後打開第一個ico,CTRL+C複制,然後打開bitmap,CTRL+V,然後再點選第二個ico,CTRL+C複制,然後打開bitmap,CTRL+V
3.這時這兩個圖示重疊在一起的, 将後添加的第二個ico移到bitmap右面然後,儲存
二,對話框初始化函數裡:
wndList.SetExtendedStyle( wndList.GetExtendedStyle() |LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT |LVS_EX_SUBITEMIMAGES);
wndList.InsertColumn(1, "第一列", LVCFMT_CENTER,110, -1);
wndList.InsertColumn(2, "第二列", LVCFMT_CENTER,180, -1);
wndList.InsertColumn(3, "圖示", LVCFMT_CENTER, 190, -1);
// 插入列
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
m_pImageList = new CImageList();
m_pImageList-> Create(16,16,TRUE,2,2);
m_pImageList-> Add(&bitmap, RGB(0, 0, 0));
wndList.SetImageList(m_pImageList,LVSIL_SMALL);
三.void CListctrlDlg::OnButton1()
{
if(nCount%2==0)
{
wndList.InsertItem( nCount, _T("第n行第一列"),-1);
//添加第nCount,行,第一列的文本為“第n行”,-1表示不添加圖示
wndList.SetItem( nCount,1,LVIF_TEXT|LVIF_IMAGE,_T("第二列"),-1,NULL,NULL, 0);
//設定第n行第2列的文本為“第二列”,-1表示不添加圖示
wndList.SetItem( nCount,2,LVIF_TEXT|LVIF_IMAGE,_T("第三列"),1,NULL,NULL, 0);
//設定第n行第3列的文本為“第三列”,0表示添加第一個圖示,1表示第二個圖示
}
if(nCount%2!=0)
{
wndList.InsertItem( nCount, _T("第1行第一列"),-1);
wndList.SetItem( nCount,1,LVIF_TEXT|LVIF_IMAGE,_T("第二列"),-1,NULL,NULL, 0);
wndList.SetItem( nCount,2,LVIF_TEXT|LVIF_IMAGE,_T(""),0,NULL,NULL, 0);
}
}
我的一段代碼,報表風格:(部分)
對話框初始化中:
m_List.InsertColumn(0,"使用者",LVCFMT_LEFT,60);
m_List.InsertColumn(1,"IP",LVCFMT_LEFT,60);
m_List.InsertColumn(2,"開始時間",LVCFMT_LEFT,60);
m_List.InsertColumn(3,"請求站點",LVCFMT_LEFT,60);
///
DWORD dwStyle = GetWindowLong(m_List.GetSafeHwnd(),GWL_STYLE);
dwStyle &= ~LVS_TYPEMASK;
dwStyle |= LVS_REPORT;
SetWindowLong(m_List.GetSafeHwnd(),GWL_STYLE,dwStyle);
SetRedraw(TRUE);
Invalidate();
重新整理函數中:
m_List.DeleteAllItems();
POSITION pos = m_ptrlist.GetHeadPosition();
while(pos)
{
CInfo* pInfo = (CInfo*)m_ptrlist.GetNext(pos);
m_List.InsertItem(0,pInfo->GetCustomerName());
m_List.SetItemText(0,1,pInfo->GetCustomerAdd());
CTime time(pInfo->GetBeginTime());
CString strTime = time.Format("%H:%M:%S");
m_List.SetItemText(0,2,strTime);
CString str;
str.Format("%s",pInfo->GetStation());
m_List.SetItemText(0,3,str);
}
為什麼ListCtrl中顯示不出來列
浏覽次數:882次懸賞分:0 | 提問時間:2009-4-16 19:08 | 提問者:清風海天 | 檢舉
m_list.SetExtendedStyle(LVS_EX_FLATSB
|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP
|LVS_EX_ONECLICKACTIVATE
|LVS_EX_GRIDLINES);
m_list.InsertColumn(0,_T("ID"),LVCFMT_LEFT,6,0);
m_list.InsertColumn(1,_T("Privilege"),LVCFMT_LEFT,6,1);
m_list.InsertColumn(2,_T("Burst"),LVCFMT_LEFT,6,2);
m_list.InsertColumn(3,_T("State"),LVCFMT_LEFT,6,3);
m_list.InsertItem(0,L"item1");
m_list.SetItemText(0,1,L"item2");
m_list.SetItemText(0,2,L"item3");
m_list.SetItemText(0,3,L"挂起");
不要用L
InsertItem功能是添加一個行
添加之後還要用SetItemText來設定改行各列的文本甚至圖示,樓上的兄弟說的基本正确,建議樓主采納
在ListCtrl控件的子列中插入圖示
在ListCttrl控件(Report風格)的使用上,有時需要向子列中插入圖示,例如要制作一個下載下傳軟體,我們計劃在控件的第一列用圖示的形式顯示下載下傳狀态:排隊、下載下傳中、出錯等等,第二列計劃用圖示顯示下載下傳檔案類型,要做出這樣的效果,就必須使用CListCtrl的SetItem(八個參數)方法,由于我這台電腦上沒有MSDN是以這八個參數具體都是什麼意思我暫時不清楚,在這隻介紹下跟我們的操作關系密切的幾個參數。
SetItem()從左向右數第一個參數(從1起計數)表示操作行的行号,這個行号從0計數,最好這個參數設定為InsertItem()的傳回值,也就是說應該先用InsertItem()插入一個空行,之後用SetItemText()具體設定插入行每一列的值。SetItem()的第二個參數表示即将操作的列号,也就是我們打算将圖示插入到第幾列中,該行号從0計數。SetItem()的第五個參數表示圖示在CImageList對象(該對象已經通過SetImageList(&ImageList, LVSIL_SMALL)附屬至CListCtrl控件)中的序數,該序數從0計數,順便說一句,準備附屬到CListCtrl控件的CImageList對象必須是全局性的,比如可以是類的成員,否則就算其他操作都都正确也看不到圖示。
舉個例子我們使用的CListCtrl控件的控制對象為m_List,m_List中已經添加了三個列,IDX是InsertItem()的傳回值,表示剛剛插入的新行,附屬到m_List的CImageList對象中有5個圖示,我們通過m_List.SetItem(IDX, 0, LVIF_IMAGE, NULL, 1, 0, 0, 0);之後,就把CImageList對象中的第1個圖示插在了第一列的前部(原先第一列的文字還在),之後接着通過m_List.SetItem(IDX, 2, LVIF_IMAGE, NULL, 0, 0, 0, 0);就把CImageList對象中的第0個圖示插在了第二列的前部(原先的文字還在)。可以看到如下執行個體圖:
有一點值得說明,如果隻在子列中插入了圖示而沒有給主列(第一列)插入任何圖示,則預設第一列将插入與同一行最後一次給子列插入圖示。還有重要的一點,如果想在子列插入圖示,首先必須使ListCtrl控件具備LVS_EX_SUBITEMIMAGES風格,例如我們可以通過m_List.SetExtendedStyle(m_List.GetExtendedStyle()|LVS_EX_SUBITEMIMAGES);給控件附加該風格。
以這樣:從CFileDialog派生一個類。
建立對話框資源,定義ID為stc32=0x45f,添加一個組框,組框就對應着标準的檔案對話框,它的位置就是檔案對話框在預覽對話框的位置。然後你自己加上預覽所需的控件。CFileDialog中有一個m_ofn資料成員,利用m_ofn的挂鈎函數實作預覽