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;
}

原文地址:https://www.cnblogs.com/17bdw/p/10351369.html

时间: 2024-08-14 02:25:45

List Control控件的相关文章

转:Tab Control控件的详细使用

1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish. 2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST 在More Styles里勾上Bottom. 调速尺寸使其布满整个对话框, 我这边Tab Control的尺寸最后为164X203. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl.    3. 在对话框的初始化函数OnInitDia

MFC List Control控件添加单元格编辑和单元格下拉列表项以适用于数据库相关操作

作为现代的软件,往往是连着数据库的,而连着和用户方便地操作之间,还有着界面这道坎.MFC是Windows上比较好开发用户界面的框架,然而其自带的控件中没有对于数据库表格支持较好的控件,而使用网上提到的 DataGrid 等控件在本人的win8.1+VS2013平台上老出现找不到控件或者头文件的问题,搞的烦死人.最后想到 List Control 控件只要稍作修改,加上单元格编辑和单元格下拉列表,其实就能和数据库进行良好的对接,一百度,果然有人已经做了这件事,实在是太让人感动了!       

Picture Control 控件

Picture Control 控件属性  CStatic类  图片控件  图片控件使用 一.图片控件属性 Picture Control 属性: Type:Frame //框架 Type:Etched Horz水平蚀刻线条 Type:Etched Vert垂真蚀刻线条 Type:Rectangle实心矩形 Type:Bitmap位图 Type:Icon  图标 Type:Enhanced Metafile 增强图元 支持wmf格式图片 Type:Owner Draw   自绘图 Color:颜

WinForm Control 控件命名规范

1.标准控件 序号 控件类型简写 控件类型 1 btn Button 2 chk CheckBox 3 ckl CheckedListBox 4 cmb ComboBox 5 dtp DateTimePicker 6 lbl Label 7 llb LinkLabel 8 lst ListBox 9 lvw ListView 10 mtx MaskedTextBox 11 cdr MonthCalendar 12 icn NotifyIcon 13 nud NumeircUpDown 14 pi

MFC编程 | tab control控件的使用

因为课程需要,会用到MFC编程,所以讲一些经验总结下,以便日后使用查询. // tab control控件的使用 // 建立一个Cluster窗口,通过tab可以切换成C-Means和Fuzzy C-Means窗口 1.插入对话框((ID:IDD_DIG_CLUSTER),删去默认生成的控件“OK”和“Cancel”后,插入一个tab control控件(ID:IDC_TAB).通过类向导,给此对话框定义一个类CCluster,给tab控件定义变量m_tab. 2.插入另外两个对话框作为C-Me

一例加载Crystal Print Control控件故障的处理过程

局域网内一网站,需要加载Crystal Print Control控件,用于打印报表.某微机,系统是前几天刚安装好的,XP(SP3),IE8.IE安全选项中的安全设置为"自定义级别",并且已将ActiveX控件有关的设置改为"启用".点击网页上"打印机"的按钮,按说应该第一次时自动安装Crystal Print Control控件,然后出现选择打印机的窗口,可是McAfee却报"内存溢出"的错误. 1.关闭McAfee的&qu

对话框上动态控件的创建、在Picture Control控件上显示图片

1  MFC对话框之上的动态控件的创建 对话框上的控件是MFC类的一个具体对象. 当在对话框之上使用静态控件时,可以根据类向导来为每个控件添加消息.响应函数以及变量. 当需要在对话框中动态的创建某个控件时,就需要手动来代替类向导为动态控件添加消息.响应函数及变量. 动态创建控件时,可按照以下步骤进行: (1) 明确控件所属于的类 每一个控件都对应着一个类(例如按钮Button所属于的类为CButton). 如,在程序中我们需要用CButton类创建一个具体的按钮对象,并用函数指示它在对话框之上的

基于wince的MFC Tab Control控件的使用

1,先建立一个对话框MFC应用程序,然后在工具箱里面把Tab Control控件放到对话框中的合适位置上. 再在对话框类中,声明一个CTabCtrl变量: CTabCtrl m_tab; 变量m_tab用来与对话框中的Tab Control控件交互,为此要在DoDataExchange函数中加入DDX_Control语句: 1 //{{AFX_DATA_MAP(CTABDlg) 2 DDX_Control(pDX, IDC_TAB, m_tab); 3 //}}AFX_DATA_MAP IDC_

OpenCV 通过 MFC 的 Picture Control 控件操作图像

如果希望对显示在MFC Picture Control 控件里的图像进行操作,比如画线画点之类的,可以利用 OpenCV 结合 MFC 本身的鼠标响应函数来实现. 如何将图像显示到 Picture Control 控件不谈,本文是采用的这篇博客所介绍的方法实现的. 点击打开链接 给对话框添加 WM_LBUTTONDOWN 鼠标左键点击消息,在消息响应函数中添加如下代码: void CMFCOpenCVShowDlg::OnLButtonDown(UINT nFlags, CPoint point

通过编写串口助手工具学习MFC过程&mdash;&mdash;(七)添加Tab Control控件

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (七)添加Tab Control控件 要在对话框里添加标签页,点击标签页上