CListCtrl ---CImageList & CHeaderCtrl

在CListCtrl 中 包含着CHeaderCtrl 对应的控件

1.在CListCtrl 中使用图片:

 1 CMyDialog::OnInitDialog()
 2 {
 3    //CListCtrl m_list;     // 定义为成员变量;
 4    //CImageList m_imagelistNormal; // 定义为成员变量
 5   //CImageList  m_imagelistSmall;
 6   //CImageList  m_imagelistState;
 7 
 8     //在这里有多种方法可以插入image 
 9     // 1)可以使用 CImageList::Create() 函数
10    // 2) 可以使用 ListView_SetImageList 宏
11    // 3) 就是下面的方法
12    HIMAGELIST hlist1 = ImageList_Create(32,32,ILC_COLOR8| ILC_MASK , 8,1);    // 32×32 pixel for Normal image
13    
14    HIMAGELIST hlist2 = ImageList_Create(16,16,ILC_COLOR8| ILC_MASK , 8,1);    // 16*16 pixel for small and state image
15 
16    HIMAGELIST hlist3= ImageList_Create(16,16,ILC_COLOR8| ILC_MASK , 8,1);   
17   
18    m_imagelistNormal.Attach(hlist1);
19   // m_imagelistSmall.Attach(hlist2);
20   // m_imagelistState.Attach(hlist3);
21   
22    CBitmap cbmp;
23    cbmp.LoadBitmap(IDB_TREESTATE);   // "IDB_TREESTATE"  bitmap resource ID depend by yourself
24    m_imagelistNormal.Add(&cbmp,RGB(255,255,255));          //each pixed of this color in bitmap changed to black.
25                                                             // at the same time : when you assign ILC_MASK flag,  to make this color is transparent.
26     m_list.SetImageList(&m_imagelistNormal, LVSIL_NORMAL);
27     //m_list.SetImageList(&m_imagelistSmall, LVSIL_SMALL);
28     //m_list.SetImageList(&m_imagelistState, LVSIL_STATE);   //state image next to small image 
29     
30     m_list.InsertColumn(0,_T("Name"));
31     m_list.InsertColumn(1,_T("Price"));
32     
33     for (int i=0; i<2; ++2)
34     {
35     LVITEM lvi = {0};
36     lvi.mask = LVIF_TEXT | LVIF_IAMGE  ;//|LVIF_STATE;      // can assign : lvi.state = INDEXTOSTATEIMAGEMASK( index) ; //the one-based index of state image list 
37                                                         //              lvi.stateMask = LVIS_STATEIMAGEMASK ;
38     lvi.iItem = INT_MAX ;       //"INT_MAX"  表示紧随其后插入
39     lvi.iImage = I_IMAGENONE;   //"I_IMAGENONE" 表示不显示图片, 如果不设置的话,默认会显示在第一列
40     m_list.InsertItem(&lvi)
41     
42     lvi.iSubItem = 1;              // 如果需要在subitem 上显示 图片 need set style : m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_SUBITEMIMAGES);
43     CString strtext;
44     strtext.Format(_T("$ %d"), i*10);
45     lvi.pszText = (LPTSTR)(LPCTSTR)strtext;
46     m_list1.SetItem(&lvi);
47     
48     // Also can set state image list by : m_list.SetItemState(0,INDEXTOSTATEIMAGEMASK(3),LVIS_STATEIMAGEMASK);
49     }
50     
51 }

 

CImageList是和CListCtrl的第一列绑定的,这个第一列是逻辑上的。

可以使(视图上的)非第一列变成(逻辑上的)的第一列
使第一列和其他的某列交换位置。调用了CListCtrl 的GetHeaderCtrl()方法,通过表头控件CHeaderCtrl的SetOrderArray设置(视图上的)显示顺序。

/*******第一和最后一列交换位置***/
CHeaderCtrl *pmyHeaderCtrl = m_lstEnumDev.GetHeaderCtrl();
int nCount = pmyHeaderCtrl->GetItemCount();
LPINT pnOrder = (LPINT) malloc(nCount*sizeof(int));
ASSERT(pnOrder != NULL);

pmyHeaderCtrl->GetOrderArray(pnOrder, nCount);
int nTemp;
nTemp = pnOrder[0];
pnOrder[0] = pnOrder[nCount-1];
pnOrder[nCount-1] = nTemp;

pmyHeaderCtrl->SetOrderArray(nCount, pnOrder);
free(pnOrder);

-----------------------------------------------------------------------------------

注意,LVN_ITEMCHANGED消息的产生有以下几种可能:
1、由选中到没选中的变化;
2、由没选中到选中的变化;
3、由选中一行到选中另外一行的变化;
4、使用CListCtrl::SetItem函数更改了行。
如何检测LVN_ITEMCHANGED消息是由那一变化产生的呢?NM_LISTVIEW结构成员变量uChanged和uNewState包含着这类信息,看如下代码:
void CRunListView::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
//NMLISTVIEW : This structure is the same as the NM_LISTVIEW structure but has been renamed to fit standard naming conventions
NMLISTVIEW* pNMListView = (NMLISTVIEW*)pNMHDR;
if(pNMListView->uChanged == LVIF_STATE)
{
if(pNMListView->uNewState)
TRACE0("选择改变且有选中的行\r\n");
else
TRACE0("选择改变且没有选中的行\r\n");
}
else
TRACE0("行改变(CListCtrl::SetItem)\r\n");
*pResult = 0;
}


又如
void CRunListView::OnItemchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
if ((pNMLV->uChanged & LVIF_STATE) && (pNMLV->uNewState & LVIS_SELECTED))
{
// select changed
}

*pResult = 0;
}

posted on 2013-04-23 16:10  code.life  阅读(437)  评论(0)    收藏  举报

导航