天天看點

vc listctrl裡相同的列不同行顯示不同圖示

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的挂鈎函數實作預覽