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

    第讲-列表控件优质资料.doc

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

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

    第讲-列表控件优质资料.doc

    第讲 列表控件优质资料(可以直接使用,可编辑 优质资料,欢迎下载)第五讲 列表控件本讲主要介绍组合框(Combo Box)控件和列表框(List Box)控件的的使 用方法。一创建一个基于对话框的应用程序模板 1选择应用程序类型: 选择“FileNew”菜单 在弹出的“New”对话框的选择“Projects” 选项卡 应用程序类型选择“MFC AppWizard(exe)”“Project name”编辑框中输入“ListBox” “Location”编辑框中输入适当的 路径 单击“OK” 2选择项目类型 在“MFC AppWizar Step 1”对话框中“Dialog based”单选钮 单击“Finish”按钮。二修改对话框模板 把主对话框模板修改成如下图所示: 图6-1 1增加“编号”、“姓名”、“出生年月”、“性别”、“职称”和“职工情况列表” 等六个静态文本 2在“编号”右侧增加一个下沉风格的静态文本,资源符号为:IDC_NUMBER 在“Styles”选项卡的“Center-vertically”复选钮: 选中3在“姓名”和“出生年月”右侧,增加二个编辑框,资源符号分别为:IDC_NAME, IDC_BIRTHDAY 4在“性别”和“职称”右侧,增加二个组合框,资源符号分别命名为: IDC_SEX在Combo Box Properties对话框的styles选项卡的type下拉列表框中选择Drop List注: Drop List选项不允许组合框编辑输入 IDC_TITLE在Combo Box Properties对话框的styles选项卡的type下拉列表框中选择Drop List注: Dropdown选项允许组合框编辑输入 5增加“添加”、“删除当前选定行”和“在选定行前插入”三个按钮,ID值命 名为: IDC_ADD, IDC_DELETE, IDC_INSERT6在“职工情况列表”的下方,增加一个列表控件”List Control”: 在”List Control Properties”对话框中如下设置: A在General选项卡的ID组合框中输入: IDC_LIST B在Styles选项卡中选择:“View:”下拉列表框: Report “Align:”下拉列表框: Top “Sort:”下拉列表框: Ascending“Single selection”复选框: 选中三为控件连接变量 为各控件连接的变量名及其值类型和变量类型如下(连接方法前已述): 控件ID 变量名 变量类别 变量类型IDC_NUMBER m_nNumber value CString IDC_NAME m_sName value CString IDC_BIRTHDAY m_sBirthday value CString IDC_SEX m_nSex valve int m_cSex Control CComboBox IDC_TITLE m_sTitle value CString m_cTitle Control CComboBox IDC_LIST m_cList Control CListBox注:IDC_TITLE组合框控件上各连连接了两个变量,它们值类型分别为value 和Control,连接方法是对同一个控件ID,两次使用“Add Variables” 即可。四组合框控件的初始化 1在CListBoxDlg类中添加二个成员变量:变量类型变量名作用域 CString strTitle public CString m_sSex public 2在CListBoxDlg类的构造函数中对变量strTitle初始化: strTitle="助教/讲师/副教授/教授/"3在CListBoxDlg类中添加一个函数: 函数类型:void 函数名:InitCombo() 作用域:Protected4编写函数InitCombo()成:void CListBoxDlg:InitCombo()int i,n;CString s12 = "男","女"for(i=0;i<2;i+) m_cSex.AddString(s1i);CString s,s2=strTitle;while(s2 != "")n=s2.Find('/',0);s=s2.Left(n);m_cTitle.AddString(s);s2.Delete(0,n+1); 3在CListBoxDlg类的OnInitDialog()函数中添加一条语句: / TODO: Add extra initialization here InitCombo(); 4编译并运行程序,观察程序的运行情况五组合框内容的获取 经过下拉列表的选择或编辑输入后,组合框中具有了内容,要获取这些 内容可如下操作: 1为组合框控件IDC_SEX增加一个CBN_SELCHANGE消息响应函数 OnSelchangeSex()如下: 1)选择“ViewClassWizard”菜单项2)在弹出的MFC Classwizard对话框中如下操作: A选择Message Maps选项卡 B在Class name下拉列表框中选择CListBoxDlg类 C在Object IDs列表框中选择:IDC_SEX D在Messages列表框中选择CBN_SELCHANGE E单击Add Function按钮,在弹出的Add member function对话框中 单击OK按钮 F再单击MFC Classwizard对话框的“Edit code”按钮,进入函数编 辑 3)编写OnSelchangeSex()如下: void CListBoxDlg:OnSelchangeSex() / TODO: Add your control notification handler code here UpdateData(); int n=m_cSex.GetCurSel(); if(n!=CB_ERR) m_cSex.GetLBText(n,m_sSex); 2为组合框控件IDC_TITLE增加一个CBN_SELCHANGE消息响应函数 OnSelchangeTitle(),方法同上,函数程序如下: void CListBoxDlg:OnSelchangeTitle() / TODO: Add your control notification handler code hereUpdateData(); int n=m_cTitle.GetCurSel(); if(n!=CB_ERR) m_cTitle.GetLBText(n,m_sTitle); 3为按钮控件IDC_ADD添加一个BN_CLICKED消息响应函数OnAdd()如下: void CListBoxDlg:OnAdd() / TODO: Add your control notification handler code here CString str="性别:"+m_sSex+"nn职称:"+m_sTitle; MessageBox(str); 4编译并运动程序,观察程序的运行情况。由程序的运行情况可见:通过下拉列表选择的内容能正确地获取,但在IDC_TITLE控件中通过编辑输入的数据无法正确地获取。为解决这一问 题并使编辑输入的内容能增添到下拉列表中,可如下操作: A仿上,为控件IDC_TITLE增添一条CBN_KILLFOCUS消息响应函数:OnKillfocusTitle() B编写函数体如下: void CListBoxDlg:OnKillfocusTitle() / TODO: Add your control notification handler code here /获取编辑输入的内容 UpdateData(); int n=m_cTitle.GetCurSel(); if(n!=CB_ERR) m_cTitle.GetLBText(n,m_sTitle); /把编辑输入的内容增添到下拉列表中 if(m_sTitle!="" && strTitle.Find(m_sTitle,0)<0) m_cTitle.AddString(m_sTitle); strTitle=strTitle+m_sTitle+'/' C再编译并运行程序,观察运行情况。六列表框List Box的初始化 1在CListBoxDlg类中添加一个函数: 函数类型:void 函数名:InitList() 作用域:Protected 2编定函数体如下: void CListBoxDlg:InitList() m_cList.InsertColumn(0,"编号",LVCFMT_LEFT,70); m_cList.InsertColumn(1,"姓名",LVCFMT_LEFT,70); m_cList.InsertColumn(2,"出生年月",LVCFMT_LEFT,70); m_cList.InsertColumn(3,"性别",LVCFMT_LEFT,70); m_cList.InsertColumn(4,"职称",LVCFMT_LEFT,70); m_cList.SetExtendedStyle(LVS_EX_FULLROWSELECT); 注:行设置列表控件的行被选中时整行反白显示3在CListBoxDlg类的OnInitDialog()函数中添加几条语句(红色): / TODO: Add extra initialization here InitCombo();InitList();4编译并运行程序,观察程序的运行界面七在列表控件中增添、删除和插入内容 1把输入内容增添到列表控件中 A在CListBoxDlg类中增加一个protected类int型变量:m_nNumber,并在CListBoxDlg类的构造函数中添加以下赋值语句: m_nNumber=1; B在CListBoxDlg类的OnInitDialog()函数中添加四条语句(红色): InitList(); m_sNumber.Format("%d",m_nNumber); GetDlgItem(IDC_DELETE)->EnableWindow(false); GetDlgItem(IDC_INSERT)->EnableWindow(false); UpdateData(false); 注:句:给编号赋初值:由于刚开始时列表控件中尚无任何内容,故不能“删除”或“插入”句:回显数据。 C修改OnAdd()函数成: void CListBoxDlg:OnAdd() / TODO: Add your control notification handler code hereint m,n; UpdateData(); m=m_cTitle.GetCurSel(); /获取IDC_TITLE控件内容 if(m!=CB_ERR) m_cTitle.GetLBText(m,m_sTitle); m=m_cSex.GetCurSel();/获取IDC_SEX控件内容 if(m!=CB_ERR) m_cSex.GetLBText(m,m_sSex); if(m_sName=""|m_sBirthday=""|m_sSex=""|m_sTitle="") return; /把输入内容增添到列表控件中 n=m_cList.InsertItem(0,m_sNumber); m_cList.SetItemText(n,1,m_sName); m_cList.SetItemText(n,2,m_sBirthday); m_cList.SetItemText(n,3,m_sSex); m_cList.SetItemText(n,4,m_sTitle); m_nNumber+; / 把职工资料初始化为空 m_sNumber.Format("%d",m_nNumber); m_sName="" m_sBirthday="" m_sSex="" m_nSex=-1; / 把性别组合框设置成空 m_sTitle="" GetDlgItem(IDC_NAME)->SetFocus(); /把输入焦点置于IDC_NAME /控件上 UpdateData(false); D编译并运行程序,观察运行结果。此时,编辑框和组合框中的输入内容能依次添加到列表控件中,并且, 若输入内容不全,会拒绝添加。 2删除列表控件中选定行的内容 A用“MFC CLasswizard”对话框,为控件IDC_LIST添加一个消息响应函 数OnClickList(),并编写该函数如下: void CListBoxDlg:OnClickList(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code here*pResult = 0;int n=m_cList.GetNextItem(-1,LVNI_SELECTED);if(n!=-1) / 若所选行有效,则向对话框回显其内容m_sNumber=m_cList.GetItemText(n,0);m_sName=m_cList.GetItemText(n,1);m_sBirthday=m_cList.GetItemText(n,2);m_sSex=m_cList.GetItemText(n,3);m_nSex=(m_sSex="男")?0:1;/把性别回显至性别组合框m_sTitle=m_cList.GetItemText(n,4);GetDlgItem(IDC_DELETE)->EnableWindow(true);GetDlgItem(IDC_INSERT)->EnableWindow(true);GetDlgItem(IDC_ADD)->SetWindowText("修 改");UpdateData(false); B用“MFC CLasswizard”对话框,为控件IDC_DELETE添加一个消息响应 函数OnDelete(),并编写该函数如下:void CListBoxDlg:OnDelete() / TODO: Add your control notification handler code here int n; CString s1,s2,s3,s4,str; n=m_cList.GetNextItem(-1,LVNI_SELECTED); if(n!=-1) m_cList.DeleteItem(n);m_nNumber-;m_sNumber.Format("%d",m_nNumber);m_sName=""m_sBirthday=""m_nSex=-1;m_sTitle=""UpdateData(false); C.编译并运行程序,可见: 能在列表框中删除选行的内容,但删除内容的编号不再连续,并且按 钮IDC_APPEND的行为不正常,为解决上述问题,应: D在OnAdd()函数中增添几条语句(红色): if(m_sName=""|m_sBirthday=""|m_sSex=""|m_sTitle="") return; bool bState=GetDlgItem(IDC_DELETE)->IsWindowEnabled(); if(bState)/ "删除"按钮可用时,先删除所选行 n=m_cList.GetNextItem(-1,LVNI_SELECTED); m_cList.DeleteItem(n); GetDlgItem(IDC_DELETE)->EnableWindow(false); GetDlgItem(IDC_INSERT)->EnableWindow(false); GetDlgItem(IDC_ADD)->SetWindowText("添 加"); m_nNumber-; E函数OnDelete()应如下编写: void CListBoxDlg:OnDelete() / TODO: Add your control notification handler code here int i,n,ItemNo; CString s5; CString str="" n=m_cList.GetNextItem(-1,LVNI_SELECTED); m_cList.DeleteItem(n); ItemNo=m_cList.GetItemCount(); for(n=0;n<ItemNo;n+) for(i=1;i<5;i+) si=m_cList.GetItemText(n,i); str=str+si+"/" m_cList.DeleteAllItems(); for(n=0;n<ItemNo;n+) m_sNumber.Format("%d",n+1); m_sName=str.Left(i=str.Find("/",0); str.Delete(0,i+1); m_sBirthday=str.Left(i=str.Find("/",0); str.Delete(0,i+1); m_sSex=str.Left(i=str.Find("/",0); str.Delete(0,i+1); m_sTitle=str.Left(i=str.Find("/",0); str.Delete(0,i+1); n=m_cList.InsertItem(0,m_sNumber); m_cList.SetItemText(n,1,m_sName); m_cList.SetItemText(n,2,m_sBirthday); m_cList.SetItemText(n,3,m_sSex); m_cList.SetItemText(n,4,m_sTitle); m_nNumber=ItemNo+1; / 把职工资料初始化为空 m_sNumber.Format("%d",m_nNumber); m_sName="" m_sBirthday="" m_sSex="" m_cSex.SetCurSel(-1); m_sTitle="" GetDlgItem(IDC_DELETE)->EnableWindow(false); GetDlgItem(IDC_INSERT)->EnableWindow(false); GetDlgItem(IDC_APPEND)->SetWindowText("添 加"); GetDlgItem(IDC_NAME)->SetFocus(); /把输入焦点置于IDC_NAME /控件上 UpdateData(false); F上述函数OnDelete()编写得较复杂,当列表框中数据较多时更新速度较 慢,并且可能产生意想不到的问题。为此,函数OnDelete()可在功能不 变的前提下简化如下: void CListBoxDlg:OnDelete() / TODO: Add your control notification handler code here int i,n,ItemNo,m,nc; CString s5; CString str="" n=m_cList.GetNextItem(-1,LVNI_SELECTED); m_cList.DeleteItem(n); ItemNo=m_cList.GetItemCount(); for(m=n;m<ItemNo;m+) for(i=1;i<5;i+) si=m_cList.GetItemText(m,i); m_cList.DeleteItem(m); s0.Format("%d",m+1); nc=m_cList.InsertItem(0,m_sNumber); for(i=1;i<5;i+) m_cList.SetItemText(nc,i,si); m_nNumber=ItemNo+1; / 把职工资料初始化为空 m_sNumber.Format("%d",m_nNumber); m_sName="" m_sBirthday="" m_sSex="" m_nSex=-1; m_sTitle="" GetDlgItem(IDC_DELETE)->EnableWindow(false); GetDlgItem(IDC_INSERT)->EnableWindow(false); GetDlgItem(IDC_ADD)->SetWindowText("添 加"); GetDlgItem(IDC_NAME)->SetFocus(); /把输入焦点置于IDC_NAME /控件上 UpdateData(false); 3在列表控件的选定行前插入内容 A为“插入”按钮控件添加一条消息响应函数OnInsert(); B编写OnInsert()函数如下: void CListBoxDlg:OnInsert() / TODO: Add your control notification handler code here int i,n,ItemNo,m,nc; CString s5; n=m_cList.GetNextItem(-1,LVNI_SELECTED); ItemNo=m_cList.GetItemCount(); for(m=ItemNo-1;m>=n;m-) for(i=1;i<5;i+) si=m_cList.GetItemText(m,i); m_cList.DeleteItem(m); s0.Format("%d",m+2); nc=m_cList.InsertItem(0,s0); for(i=1;i<5;i+) m_cList.SetItemText(nc,i,si); UpdateData(); n=m_cList.InsertItem(0,m_sNumber); m_cList.SetItemText(n,1,m_sName); m_cList.SetItemText(n,2,m_sBirthday); m_cList.SetItemText(n,3,m_sSex); m_cList.SetItemText(n,4,m_sTitle); m_nNumber=ItemNo+1; / 把职工资料初始化为空 m_sNumber.Format("%d",m_nNumber); m_sName="" m_sBirthday="" m_sSex="" m_nSex=-1; m_sTitle="" GetDlgItem(IDC_DELETE)->EnableWindow(false); GetDlgItem(IDC_INSERT)->EnableWindow(false); GetDlgItem(IDC_ADD)->SetWindowText("添 加"); GetDlgItem(IDC_NAME)->SetFocus(); /把输入焦点置于IDC_NAME /控件上 UpdateData(false); 八把列表框中的数据存盘 1在对话框模板上再增加一个资源符号为IDC_SAVE的按钮控件,把按钮标题设置成“把列表框内容存盘” 2为上述按钮连接一个消息响应函数OnSave(); 3编写OnSave()函数如下:void CListBoxDlg:OnSave() / TODO: Add your control notification handler code hereint i,m,ItemNo,n=0;FILE *fp;UINT button=IDYES;CString FileName,s5;while(button=IDYES)CFileDialog SaveCurveDlg(false,"dat","StaffData",OFN_OVERWRITEPROMPT,"数据文件(*.dat)|*.dat|所有文件(*.*)|*.*|",NULL);if(button=SaveCurveDlg.DoModal()=IDOK)FileName=SaveCurveDlg.GetPathName();if(fp=fopen(FileName,"w")!=NULL)ItemNo=m_cList.GetItemCount();for(m=0;m<ItemNo;m+)for(i=0;i<5;i+) si=m_cList.GetItemText(m,i);fprintf(fp,"%-6s%-15s%-15s%-15s%-15sn",s0,s1,s2,s3,s4);fclose(fp);button=IDNO;else button=AfxMessageBox("驱动器或磁盘没有准备好!nn" "要重试吗?",MB_YESNO);九从数据文件把数据读入列表框 1在对话框模板上再增加一个资源符号为IDC_READ的按钮控件,把按钮标题设置成“从数据文件读入数据” 2为上述按钮连接一个消息响应函数OnRead(); 3编写OnRead()函数如下:void CAnaSyn:InputRead() int m,n=1;FILE *fp;CString FileName,str;UINT button=IDYES;while(button=IDYES)CFileDialog ReadCurveDlg(true,NULL,NULL,OFN_HIDEREADON

    注意事项

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

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




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

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

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

    收起
    展开