• List Control控件


    List Control控件

    显示方式

    属性【View】选择成【Report】。

    添加成员变量

    绑定变量:m_listCtrl

    设置值

    // 表头添加
    m_listCtrl.SetExtendedStyle( LVS_EX_FULLROWSELECT);
    m_listCtrl.InsertColumn( 0, _T("网站来源"),LVCFMT_LEFT,85);
    m_listCtrl.InsertColumn( 1, _T("产品"),LVCFMT_LEFT,110);
    m_listCtrl.InsertColumn( 2, _T("价格"),LVCFMT_LEFT,80);
    
    // 插入值
    int iLine = m_listCtrl.GetItemCount();             // 列表的里面的条目数量, 横着的行
    m_listCtrl.InsertItem( iLine,_T("SOHU"));          // 第一行第一列
    m_listCtrl.SetItemText( iLine, 1,_T("IPHONE") );   // 第一行第二列
    m_listCtrl.SetItemText( iLine, 2,_T("5000") );     // 第一行第三列
    
    // 最末行添加数据
    iLine = m_listCtrl.GetItemCount();
    m_listCtrl.InsertItem( iLine,_T("TAOBAO"));        // 第二行第一列
    m_listCtrl.SetItemText( iLine, 1,_T("奔驰") );     // 第二行第二列    
    m_listCtrl.SetItemText( iLine, 2,_T("500000") );   // 第二行第三列 
    
    iLine = m_listCtrl.GetItemCount();
    m_listCtrl.InsertItem( iLine,_T("GOOGLE"));        // 第三行第一列
    m_listCtrl.SetItemText( iLine, 1,_T("宝马") );     // 第三行第二列
    m_listCtrl.SetItemText( iLine, 2,_T("600000") );   // 第三行第三列
    

    清空所有值

    //清空列表记录
    while(m_listCtrl.DeleteItem(0));
    

    刷新功能

    • 删除所有值
    • 初始化所有值

    菜单消息处理

    NM_CLICK 左键处理

    void CmyfirstmfcDlg::OnNMClickListInfo(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	int istat=m_listCtrl.GetSelectionMark();          //用istat存放当前选定的是第几项
    	CString szSite = m_listCtrl.GetItemText(istat,0); //获取当前项中的数据,0代表是第0列
    	CString szProduct = m_listCtrl.GetItemText(istat,1);   // 第一列
    	CString szValue = m_listCtrl.GetItemText(istat,2);     // 第二列
    	UINT iValue = _ttol(m_listCtrl.GetItemText(istat,2));
    
    	MessageBox(szSite,szProduct+szValue,MB_OK);
    
    	*pResult = 0;
    }
    
    

    NM_RCLICK 右键处理

    IDR_MENU_TOPICR 是插入的菜单选项,菜单项是【购买】、【删除】

    void CmyfirstmfcDlg::OnNMRClickListInfo(NMHDR *pNMHDR, LRESULT *pResult)
    {
        // m_istat、m_szSite、m_szSite、m_szProduct、m_szValue、m_iValue是类中的数据成员,传递数据用
    	m_istat=m_listCtrl.GetSelectionMark();       //用istat存放当前选定的是第几项
    	m_szSite = m_listCtrl.GetItemText(m_istat,0);//获取当前项中的数据,0代表是第0列
    	m_szProduct = m_listCtrl.GetItemText(m_istat,1);
    	m_szValue = m_listCtrl.GetItemText(m_istat,2);
    	m_iValue = _ttol(m_listCtrl.GetItemText(m_istat,2));
    
    	POINT point;
    	HMENU hMenu, hSubMenu;
    	GetCursorPos(&point);                   //鼠标位置
    	hMenu = LoadMenu(NULL, 
    		MAKEINTRESOURCE(IDR_MENU_TOPICR));  // 加载菜单
    	hSubMenu = GetSubMenu(hMenu, 0);        //得到子菜单(因为弹出式菜单是子菜单)
    
    	SetMenuDefaultItem(hSubMenu, -1, FALSE);//设置缺省菜单项,-1为无缺省项
    	SetForegroundWindow();                  // 激活窗口并置前
    
    	TrackPopupMenu(hSubMenu, 0, 
    		point.x, point.y, 0, m_hWnd, NULL);
    	*pResult = 0;
    }
    

    排序

    类.h文件中定义两个静态变量

    static DWORD m_SortColum;
    static BOOL m_bAs;
    

    myfirstmfcDlg.cpp初始化

    DWORD CmyfirstmfcDlg::m_SortColum = 0;
    BOOL CmyfirstmfcDlg::m_bAs = TRUE;
    

    类.h文件中声明回调函数

    static int CALLBACK MyListCompar(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
    

    代码实现部分

    int   CALLBACK CmyfirstmfcDlg::MyListCompar(LPARAM   lParam1,   LPARAM   lParam2,   LPARAM   lParamSort) 
    { 
    	//通过传递的参数来得到CSortList对象指针,从而得到排序方式 
    	CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
    
    	//通过ItemData来确定数据 
    
    	int   iCompRes; 
    	CString    szComp1 = pListCtrl->GetItemText(lParam1,m_SortColum);
    	CString    szComp2 = pListCtrl->GetItemText(lParam2,m_SortColum);
    
    	switch (m_SortColum)
    	{
    		// 这里是要修改的部分,要根据有整数的列进行排序。2是代表第三列为整数
    	    case(2): {
    	    		 //以第一列为根据排序   编号
    	    		 //_ttol 
    	    		 iCompRes = _ttol(szComp1) <= _ttol(szComp2) ? -1 : 1;
    	    		 break;
    	    }
    	    default: 
    	    	iCompRes=szComp1.Compare(szComp2); 
    	    	break; 
    	} 
    	//根据当前的排序方式进行调整
    
    	if(m_bAs) 
    		return   iCompRes; 
    	else 
    		return   -iCompRes; 	
    } 
    

    添加消息LVN_COLUMNCLICK(单击某一列触发),实现代码如下:

    
    void CMFC03CListCtrlDlg::OnLvnColumnclickList1(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    	m_SortColum = pNMListView->iSubItem;
    	m_bAs = !m_bAs;//升序还是降序
    
    
    	int count = m_listCtrl.GetItemCount();   //行数
    	for (int i = 0; i < count; i++)
    	{
    		m_listCtrl.SetItemData(i, i);
    	}
    	m_listCtrl.SortItems(MyListCompar, (LPARAM)&m_listCtrl);
    	*pResult = 0;
    }
    
    
  • 相关阅读:
    OPENGL_三角形带GL_TRIANGLE_STRIP详解
    OPENGL_单位长度对应屏幕像素
    OPENGL2_基本框架
    WINDOWS编程基础-最简单的windows程序
    着色语言(Shader Language)
    Ogre 学习记录
    Ogre RT Shader System
    Perception Neuron系统,让动作捕捉技术不再高冷
    Ogre 中基于蒙皮骨骼的OBB碰撞检测
    Ogre 绘制基本图形
  • 原文地址:https://www.cnblogs.com/17bdw/p/10351369.html
Copyright © 2020-2023  润新知