欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    MFC ListControl控件用法.doc

    • 资源ID:33497346       资源大小:541KB        全文页数:20页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    MFC ListControl控件用法.doc

    -作者xxxx-日期xxxxMFC ListControl控件用法【精品文档】MFC ListControl控件用法开发环境:visual studio 20081、新建一个基于对话框的MFC应用程序。在对话框上拖放一个listcontrol控件和一个button控件,给listcontrol控件添加一个名为m_StoreItems的变量。添加button的点击响应函数。void CDepartmentStoreDlg:OnBnClickedNewitem()/ TODO: 在此添加控件通知处理程序代码srand(unsigned)time(NULL);TCHAR strNumber20;/这里不要定义为char或者CString类型,不然后面 lvItem.pszText会报错。int number1 = rand() % 100;int number2 = rand() % 100;wsprintf(strNumber,_T("%d-%d"), number1, number2);LVITEM lvItem;lvItem.mask = LVIF_TEXT;lvItem.iItem = 0;lvItem.iSubItem = 0;lvItem.pszText = strNumber;m_StoreItems.InsertItem(&lvItem);运行效果如下,效果相当于listbox控件,就是一个列表,一行一行的:现在设置为报表视图,显示成表格形式。在初始化函数里添加:BOOL CDepartmentStoreDlg:OnInitDialog()CDialog:OnInitDialog();/ TODO: 在此添加额外的初始化代码m_StoreItems.SetView(LVS_REPORT);/如果在属性里面设置了listview的view是report,这里就没必要了,默认的是iconLVCOLUMN lvColumn;lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; /掩码设置了fmt值、显示列标题和指定宽度lvColumn.fmt = LVCFMT_LEFT; /设置作对其模式lvColumn.cx = 120; /设置标题的宽度为120个像素lvColumn.pszText = _T("Full Name"); /设置标题(列名)m_StoreItems.InsertColumn(0, &lvColumn); /添加列,索引为0lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 100;lvColumn.pszText = _T("Profession");m_StoreItems.InsertColumn(1, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 80;lvColumn.pszText = _T("Fav Sport");m_StoreItems.InsertColumn(2, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 75;lvColumn.pszText = _T("Hobby");m_StoreItems.InsertColumn(3, &lvColumn);下面给报表添加点实际的内容。继续在初始化函数里添加:LVITEM lvItem;int nItem;lvItem.mask = LVIF_TEXT;/这里的掩码设置一定要注意,因为item和column的掩码值很像,例如LVIF_TEXT和LVCF_TEXT,I对应的item,C对应的column,不然的话会显示不出来的,这个地方害死我了,因为有插件自动补全代码,补全后没注意看,结果没有对应,郁闷了好一会lvItem.iItem = 0;/行号(索引,从0开始),报表相当于二维数组的模式,添加行内容时要指定行号和列号lvItem.iSubItem = 0;/列号(索引,从0开始)lvItem.pszText = _T("Sandra C. Anschwitz");/内容nItem = m_StoreItems.InsertItem(&lvItem);/插入这一行,返回行号(索引)m_StoreItems.SetItemText(nItem, 1, _T("Singer");/设置行索引(行号)和列索引(列号)的值m_StoreItems.SetItemText(nItem, 2, _T("HandBall");m_StoreItems.SetItemText(nItem, 3, _T("Beach");lvItem.mask = LVIF_TEXT;lvItem.iItem = 1;lvItem.iSubItem = 0;lvItem.pszText = _T("Roger A. Miller");nItem = m_StoreItems.InsertItem(&lvItem);m_StoreItems.SetItemText(nItem, 1, _T("Footballer");m_StoreItems.SetItemText(nItem, 2, _T("Tennis");m_StoreItems.SetItemText(nItem, 3, _T("Teaching");lvItem.mask = LVIF_TEXT;lvItem.iItem = 2;lvItem.iSubItem = 0;lvItem.pszText = _T("Marie-Julie W. Gross");nItem = m_StoreItems.InsertItem(&lvItem);m_StoreItems.SetItemText(nItem, 1, _T("Student");m_StoreItems.SetItemText(nItem, 2, _T("Boxing");m_StoreItems.SetItemText(nItem, 3, _T("Programming");lvItem.mask = LVIF_TEXT;lvItem.iItem = 3;lvItem.iSubItem = 0;lvItem.pszText = _T("Ella Pius Roger");nItem = m_StoreItems.InsertItem(&lvItem);m_StoreItems.SetItemText(nItem, 1, _T("Architect");m_StoreItems.SetItemText(nItem, 2, _T("Ping-Pong");m_StoreItems.SetItemText(nItem, 3, _T("Songo");中途小结:在报表视图中,要做的主要有下面几步:1)确保当前视图为报表视图,在属性窗口设置view或者在代码中设置为view模式2)添加列:用到的数据结构是LVCOLUMN (就是list view column,对应的掩码也是LVCF_,list view column format)3)添加行:用到的数据结构是LVITEM (list view item,对应的掩码是LVIF_,list view item format)添加行的时候先添加第一个元素,即行索引为nItem,列索引为0,然后InsertItem,返回当前行的索引,之后就是设置该行的其他元素了,指定行、列索引和设置值即可。4)删除行:BOOL DeleteItem(int nItem);删除指定的索引为nItem的行内容。有时候我们会先选中某行,然后删除,这个时候需要用到函数int GetNextItem(int nItem, int nFlags);从指定的索引nItem(不包括该索引,如果要包括该行的话,设置nItem -1即可)开始寻找满足nFlags条件的Item,成功则返回找到的Item的索引(如果有多个,则返回第一个),失败返回-1.这样的话如果要删除选中的某行,则可以这样实现 m_StoreItems.DeleteItem(m_StoreItems.GetNextItem(-1,LVNI_SELECTED);(建议设置扩展风格时,把整行选中设置进来this->m_StoreItems.SetExtendedStyle( LVS_EX_FULLROWSELECT);这样选中的时候就是一行了,否则会是一格)。如果要删除多行选中的,则可以用下面的代码:int nIndex;do nIndex = m_StoreItems.GetNextItem(-1,LVNI_SELECTED);m_StoreItems.DeleteItem(nIndex); while (nIndex != -1);这里添加一点调整列宽的,以下代码可供参考(摘自CSDN):voidCMyListView:AutoAdjustColumnWidth() CHeaderCtrl*pHeaderCtrl=m_pListCtrl->GetHeaderCtrl(); m_pListCtrl->SetRedraw(FALSE);/防止闪烁 pHeaderCtrl->SetRedraw(FALSE);/防止闪烁intnColumnCount=pHeaderCtrl->GetItemCount(); /获取列数for(inti=0; i<nColumnCount; i+) m_pListCtrl->SetColumnWidth(i, LVSCW_AUTOSIZE);intnColumnWidth=m_pListCtrl->GetColumnWidth(i); m_pListCtrl->SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER); intnHeaderWidth=m_pListCtrl->GetColumnWidth(i); m_pListCtrl->SetColumnWidth(i, max(nColumnWidth, nHeaderWidth)+10);pHeaderCtrl->SetRedraw(TRUE);/此处开启刷新,避免闪烁 m_pListCtrl->SetRedraw(TRUE);pHeaderCtrl->Invalidate();/Update Window to redraw. pHeaderCtrl->UpdateWindow();下面就开始设置图片了。新建两个bitmap资源,大小为16*16,ID分别为IDB_UP和IDB_LOSANGE,初始化函数CDepartmentStoreDlg:OnInitDialog()改为如下:m_StoreItems.SetView(LVS_REPORT);LVCOLUMN lvColumn;CBitmap bmpUP, bmpLosange;bmpUP.LoadBitmap(IDB_UP);bmpLosange.LoadBitmap(IDB_LOSANGE);CImageList *ImgHeaders = new CImageList();ImgHeaders->Create(16, 16, ILC_MASK, 1, 1);ImgHeaders->Add(&bmpUP, RGB(0, 0, 0);ImgHeaders->Add(&bmpLosange, RGB(0, 0, 0);m_StoreItems.SetImageList(ImgHeaders, LVSIL_SMALL);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_IMAGE;lvColumn.fmt = LVCFMT_LEFT | LVCFMT_IMAGE;lvColumn.cx = 120;lvColumn.pszText = _T("Full Name");lvColumn.iImage = 0;m_StoreItems.InsertColumn(0, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 100;lvColumn.pszText = _T("Profession");m_StoreItems.InsertColumn(1, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_IMAGE;lvColumn.fmt = LVCFMT_LEFT | LVCFMT_IMAGE;lvColumn.iImage = 1;lvColumn.cx = 80;lvColumn.pszText = _T("Fav Sport");m_StoreItems.InsertColumn(2, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 75;lvColumn.pszText = _T("Hobby");m_StoreItems.InsertColumn(3, &lvColumn);继续完善。给CDepartmentStoreDlg类添加变量:CImageList m_SmallImg;CImageList m_LargeImg; 函数:DWORD GetViewType(void);void SetViewType(DWORD dwViewType);cpp中的实现:DWORD CDepartmentStoreDlg:GetViewType(void)return (GetStyle() & LVS_TYPEMASK);void CDepartmentStoreDlg:SetViewType(DWORD dwViewType)DWORD dwCurType;HWND hWnd;hWnd = this->m_StoreItems;GetSafeHwnd();dwCurType = :GetWindowLong(hWnd, GWL_STYLE);dwCurType &= LVS_TYPEMASK;dwViewType |= dwCurType;:SetWindowLong(hWnd, GWL_STYLE, dwViewType);窗体上添加Large、Small、List、Details四个button,添加鼠标点击事件的响应函数,如下:void CDepartmentStoreDlg:OnBnClickedLarge()/ TODO: 在此添加控件通知处理程序代码SetViewType(LVS_ICON);void CDepartmentStoreDlg:OnBnClickedSmall()/ TODO: 在此添加控件通知处理程序代码if( GetViewType() != LVS_SMALLICON)SetViewType(LVS_SMALLICON);void CDepartmentStoreDlg:OnBnClickedDetail()/ TODO: 在此添加控件通知处理程序代码if( GetViewType() != LVS_REPORT)SetViewType(LVS_REPORT);void CDepartmentStoreDlg:OnBnClickedList()/ TODO: 在此添加控件通知处理程序代码if( GetViewType() != LVS_LIST)SetViewType(LVS_LIST);窗体上的New Item按钮调用的窗体如下,用来添加数据, 给窗体创建类,并给控件添加相应变量。添加2个位图资源,属性为ID:IDB_Larging Weight:162 Height:32,ID:IDB_Smalling Weight:80 Height:16 初始化函数代码:m_StoreItems.SetView(LVS_REPORT);LVCOLUMN lvColumn;lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_CENTER;lvColumn.cx = 60;lvColumn.pszText = _T("Item #");this->m_StoreItems.InsertColumn(0, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 100;lvColumn.pszText = _T("Category");this->m_StoreItems.InsertColumn(1, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 160;lvColumn.pszText = _T("Item Name");this->m_StoreItems.InsertColumn(2, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 80;lvColumn.pszText = _T("Size");this->m_StoreItems.InsertColumn(3, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_RIGHT;lvColumn.cx = 60;lvColumn.pszText = _T("Unit Price");this->m_StoreItems.InsertColumn(4, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;lvColumn.fmt = LVCFMT_RIGHT;lvColumn.cx = 30;lvColumn.pszText = _T("Qty");this->m_StoreItems.InsertColumn(5, &lvColumn);this->m_StoreItems.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);/设置扩展风格m_SmallImg.Create(IDB_Smalling, 16, 1, RGB(255, 255, 255); m_LargeImg.Create(IDB_Larging, 32, 1, RGB(255, 255, 245); m_StoreItems.SetImageList(&m_SmallImg, LVSIL_SMALL); m_StoreItems.SetImageList(&m_LargeImg, LVSIL_NORMAL);New Item按钮的响应函数为(将添加item的类include进来):void CDepartmentStoreDlg:OnBnClickedNewitem()/ TODO: 在此添加控件通知处理程序代码CNewItemDlg dlg;/这个是添加新数据的窗体类srand(unsigned)time(NULL);TCHAR strNumber20;int number1 = rand() % 100;int number2 = rand() % 100;wsprintf(strNumber,_T("%d-%d"), number1, number2);dlg.m_ItemNumber = strNumber;if (dlg.DoModal()LVITEM lvItem;int nItem;int imgNbr;if( dlg.m_Category = "Babies" )imgNbr = 0;else if( dlg.m_Category = "Teens" )imgNbr = 1;else if( dlg.m_Category = "Women" )imgNbr = 2;else if( dlg.m_Category = "Men" )imgNbr = 3;elseimgNbr = 4;lvItem.mask = LVIF_IMAGE | LVIF_TEXT;lvItem.iItem = 0;lvItem.iSubItem = 0;lvItem.pszText = strNumber;lvItem.iImage = imgNbr;nItem = this->m_StoreItems.InsertItem(&lvItem);this->m_StoreItems.SetItemText(nItem, 1, dlg.m_Category);this->m_StoreItems.SetItemText(nItem, 2, dlg.m_ItemName);this->m_StoreItems.SetItemText(nItem, 3, dlg.m_ItemSize);this->m_StoreItems.SetItemText(nItem, 4, dlg.m_UnitPrice);this->m_StoreItems.SetItemText(nItem, 5, dlg.m_Quantity);效果图:this->m_StoreItems.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);/新加checkbox风格【精品文档】

    注意事项

    本文(MFC ListControl控件用法.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开