版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中国地质大学江城学院vc+课程设计姓 名愛至班级学号2611090214指导教师业2011年6月30日设计一主要控件21设计内容22设计准备和说明23设计步骤24运彳亍结果8设计二 框架窗口界面设计91设计内容92设计准备和说明103设计步骤104运行结果12设计三 文档序列化121设计内容122设计准备和说明133设计步骤134运行结果17设计四综合181设计内容182设计准备和说明183设计步骤184运行结果21设计一主要控件1设计内容1)创建一个基于对话框的mfc程序,在主界面上制作一个“用户登录”对话框,当用户输入的 “用户名”和“密码”分别是“liming ”和“886688”时,显
2、示“学生成绩操作”对话框,否则显示“用户名密码错误,请重新输入!”2)在1)基础上添加一 “学生成绩操作”对话框,当单击“添加”按钮,弹出“学生成绩录入” 对话框,输入数据后,学号添加到组合框屮,选择组合框屮的学号后,学生数据在列表框屮显 示出来。3)在1)基础上按本书的“用对话框输入学生成绩”示例创建并设计一个对话框及其clnputdlg 类。4)按本书的“个人通讯簿”实例过程生成一个完整的基于对话框的应用程序,并在对话框中添 加三个滚动条来调整对话框的背景颜色。2设计准备和说明1. 学习完控件之后开始实验。2. 创建本次实验的工作文件夹。3设计步骤1)至3)学生成绩操作1. 启动 visu
3、al c+ 6.02. 创建一个工程名为login的基于对话框应用程序3. 按照设计要求在登陆对话框上添加控件并设置好各自的属性4. 为 idd_login_dialog 创建对话框类 clogindig5. 为 clogindlg 类中的 idc edit1 和 idc ed1t2 添加成员变量 m name 和 m number6. 为clogindlg类中的id0k和idcancel添加bn_clicked的消息映射,并添加下列代码:void clogindlg:0n0k()cscoredlg dlg;dig. domodal ();updatedata(true);if(m namez
4、/liming/z&&m passwordz/8866else messagebox(,z没有此用户名或密码错88)误! “,提示);cdialog:0n0k();m_password二"";void clogindig:oncancel()updatedata(false); m name二;7. 添加一学生成绩输入的对话框,按照设计耍求添加控件并设置好各自的屈性&为idd_dtalog1创建对话框类ctnputdlg9. 为 ctnputdlg 类中的 idc editk tdc edit2、idc edit3. tdc edit4> id
5、c edit5> idc spink idc_spin2、idc_spin3 依次添加成员变量 m_namex m_number> m_scorel> m_score2> m_score3> m spinl、 m spin2、 m spin310. 为clnputdlg添加w_initdial0g的消息映射,并添加下列代码:bool ctnputdlg: :0ntnitdialogocdialog: :0ninitdialogo ;m_spinl. setrange( 0, 100 );ra_spin2. setrange( 0, 100 );m_spin3. s
6、etrange( 0, 100 );return true;11. 为clnputdlg添加idc spin1控件的udn deltapos的消息映射,并添加下列代码:void clnputdlg:0ndeltaposspinl(nmhdr* pnmhdr, lresult* presult)nmjjpdown* pnmupdown = (nm updown*) pnmhdr;updatedata(true);m score1 +二(float)pnmupdown->ide1ta * 0. 5f;if (m_scorel<0. 0) m_scorel = 0. of;if (m_s
7、corel>100. 0) m scorel = 100. of;updatedata(false);*presult = 0;12. 修改ctnputdlg类中tdok的bn_cltcked消息映射的代码:void ctnputdlg:0n0k()updatedata(true);m name. trimlef t ();m_number. trimleft();i f (m_name. tsempty ()messagebox(z,学生姓名不能为空! “);else i f (m number. isemptyo)messagebox ("学生学号不能为空! ”);else
8、 cdialog:0n0k();i13. 添加一学生成绩输入的对话框,按照设计要求添加控件并设置好各自的属性14. 为 1dd_d1alog2 创建对话框类 cscoredlg15. 为 cscoredlg 类中的 idc丄ist1 和 idc_combo1 添加控件变量 m_list 和 m_combo16. 为cscoredlg类中的tdc button1添加bn clicked的消息映射,并添加下列代码:void cscoredlg:0nbuttonl()clnputdlg dig;if(idok=dlg. domodal()if(m combo. findstring(-l, dig.
9、 m number)<0)!intntndex=m_combo.addstring(dlg. m number)studata data;data. name=dlg m_name;data number二dig m number; data. scorel=dlg m scorel;data.score2=dlg. m score2;data. score3=dlg. m_score3;m combo. setttemdataptr(nlndex, new studata(data);m_combo. setcursel(0);onchangecombo();17. cscoredlg
10、类中的tdc_combo1添加cbn_selchange的消息映射,将其映射函数改为onchangecombo,并添加下列代码:void cscoredlg:0nchangecombo() int nlndex=m combo. getcursel(); if(nlndex!二cb_err)m 1 i st. resetcontent ();studata *data;data二(studata*)m_combo. getltemdataptr(nlndex);cstring str;str二姓名:z,+data->name;18. 编译并运行整个工程4)个人通讯簿1. 启动 visua
11、l c+ 6.0m list. addstring&r);str二"学号:z,+data->number;m list. addstring(str);str. format 成绩 1:%4. if,成绩 2:%4. if,成绩 3:%4. if",data>scorel, data->score2, data>score3);m list. addstring(str);i2. 创建一个工程名为ex_address的基于对话框应用程序3. 添加并构造基本情况对话框,创建对话框类cbasetnfodlg,添加成员变量m_strname>
12、 m strnick、in timebirth> in chsex,添加成员函数变量 updatesexfield4. 添加并构造私人资料对话框,创建对话框类cprivatedlg,添加成员变量m_strh0me m_strtel> m_gsm、 m_emai15. 添加并构造单位信息对话框,创建对话框类cworkdlg,添加成员变量m_strworkname> m stradd m strtel> m strfax6. 设计主对话框,创建对话框类cex_addressdlg,添加成员变量m_list、m_tab,添加成员函 数setdlgstate和dotab,并添加
13、下列代码:voidcex addressdlg:setdlgstate(cwnd *pwnd, pwnd->showwindow(sw show);bool bshow)pwnd>cent erw i ndow();pwnd->enab1cwindow(bshow);if (bshow)else pwnd->showwindow(sw_h1de);void cexaddressdlg:dotab(int nsel)if (nsel>2) nsel = 2;if (nsel<0) nsel = 0;bool btab3;btab0 = btabl = btab
14、2 = false; btabnsel = true;setdlgstate(m_pbaseinfodlg, btab0);setdlgstate(m pprivatedlg,btabl);setdlgstate(mpworkdlg, btab2);7. 为 cex_addressdlg 类中的 tdc_tab1 添加 tcn_selchange的消息映射,并添加下列代 码:void cex addressdlg:0nselchangetabl(nmiidr* pnmlidr, lresult* presult)int nselect = m tab.getcursel();if (nsele
15、ct >= 0) dotab(nselect);*presult = 0;*presult = 0;8. 在 cex_addressdlg: :0ninitdialog 中添加下列代码:m_tab. sotlmagolist(&m_lmagclist);ra_tab. insert item (0,"基本情况",0); m_tab. insertttem(l,"私人资料",1); m tab. insert item (2,"单位信息,2);m tab. setcursel (0);m pbaselnfodlg二new cbase
16、infodlg; m_pbaseinfodlg-create(tdd_dtalog_basetnfo, getdlgttem(tdc_stattc dlg);m_pprivated1g二new cprivated1g;m pprivatedlg->create(idd_dialog_private, getdlgitem(idc_sta ttc_dlg);m_pworkd1g=new cworkdlg;m_pworkdlg->create(idd dialog wor k, getdlgltomddc_static_dlg);dot ab(0);address data, data
17、l,data2;data. strname=,liming"data. strnick二"peter"data. chsex二'g'data. tbirth=ctime (1984, 5, 6, 0, 0, 0);data. strhomeadd=,/江苏南京";data. strworkname=/,南京师范大学" datal=data;datal. strname=/,wangfang"datal. strnick二"mary"datal. chsex二'nf ;datal. tbirt
18、h=ctime (1984, 12, 5, 0, 0, 0);intnlndex=m list. addstring(data. strnanie);m_list. sotltomdataptr(nlndox, newaddress(data);ntndex=m_list. addstring(datai. strnm_li st. setttemdataptr(ntndex, newame);address (datal);9. 为cex addressdlg类中的i dc list1添加lbn selchange的消息映射,并添加下列代码:voiddata->strhometol;c
19、ex_addressdlg:onselchangelistl ()int nlndex = m listgetcursel();if (nlndex != lb_err)!address*data=(address*) m_list<getttemdataptr (ntndex);m pbaselnfodlg->m strname data->strname;m_pbaselnfodlg->m_strnick=data->strick;mpbasetnfodlg->m_chsex = data->chsex;m pbasetnfodlg-m timeb
20、irthdata->tbirth;m pprivatedlg->m strhome=dat a->strllome add;mppri vatedlg->m_strtelm_ppr i vat ed1g->m_s t rgsm = data->strgsm; mpprivatedlg->m_stremai1data-stremail;m_pworkdlg->m_strworkname=data->strworkname;m_pworkdlg->m_stradd二data->strworkadd;m pworkdlg->m
21、strtel =data->strworktel;m_pworkdlg->m_strfax二data->strworkfax;m_pbaseinfodlg->updatedata ( false );m pbasetnfodlg->updatesexfield();m pprivatedlg->updatedata( false );m pworkdlg->updatedata( false );10为 cex addressdlg 添加成员变量 m nredvalue 和 m brush11. 在 cex_addressdlg: :0nini tdi
22、alog 中添加下列代码:m scrollred. setscrollrange(0, 255);m_sliderblue. setrange (0, 255);m_sli dergreen. setrange(0, 255);m nblue = m ngreen = m nredvalue = 192;mmupdatedata( false );m_scrollrod. setscrollpos(m_nredvalue);12. 为cex_addressdlg添加wm_vscroll的消息映射,并添加下列代码:void cex addressdlg:onvscroll(uint nsbcod
23、e, uint npos, cscrollbar* pscrollbar)iint nid = pscrollbar->getdlgctrltd();if (ntd = tdc scrollbar red)!switch(nsbcode)!case sbltneup:mnredvalue;break;case sb linedown:m nredvalue+;break;case sb_pageup:m_nredvalue -= 10;break;case sb_pagedown:m_nredvalue+ 二10;break;case sb thumbtrack:m nredvalue
24、= npos;break;if (m_nredvalue<0) mnredvalue = 0;if (m nredvalue>255) m nredvalue = 255; m_scrolired. setscro lipos(m_nredva luc); invalidate();cdialog:onvscrol1(nsbcode,npos,pscrollbar);13. 为cex_addressdlg添加wm_ctlc0l0r的消息映射,并添加下列代码:hbrusii cexaddressdlg:0nctlcolor(cdc* pdc, cwnd* pwnd, uint nct
25、lcolor)updatedata(true);colorref color = rgb(m_nredvalue, m_ngreen, m_nblue);m brush. detach ();m brush. createsolidbrush(color);pdc->setbkcolor( color ); return (hbrl'sh)m brush;14.编译并运行整个工程4运行结果姓名z鬲学号 z) 2611090214成绩1595耳成绩2:>3成绩3码i确定取消学号| 2611090214 j学生成缆记录匕牲名:雷字ijd学号:2611090214h跖芮如成绑:9
26、55,成绩2:95,成缆3:95退出生个人通讯薄基本情况 私人资料丨单位信息|wangf ang姓名:iwangfang昵称:|mary性别:男e女生日:11984-12- 5rj退出设计二框架窗口界面设计1设计内容1)创建一个单文档应用程序ex_sdi,开始运行时主窗口框架的大小为屏幕的1/4大小,并移 动到屏幕的右上角。当单击工具栏上的圆圈按钮时,该按钮呈按下状态,此时在窗口的客户区 的光标为圆圈。当双击鼠标吋,则状态栏上显示“你在(x, y )处双击鼠标”(x,y)为鼠标 在客户区的位置)。若再单击工具栏上的圆圈按钮,则该按钮呈正常状态,光标变成原来的箭形, 双击鼠标,状态栏上不再显示任
27、何文本。2)在上述程序的基础上,改变窗口菜单为一个单一弹出式菜单“测试”,其下包含一菜单项“改 变光标”(和工具按钮td test联动),月.该菜单项拥有键盘快捷键“ctm+g”,要求右击鼠标时弹出“测试”菜单的子菜单。3) 在上述程序的基础上,为ex_sdi添加并设计具有动画效果的应用程序图标。2设计准备和说明1. 学习完框架窗口界面z后开始实验。2. 创建本次实验的工作文件夹。3设计步骤1. 启动 visual c+ 6.02. 创建一个工程名为ex_sdi的单文档应用程序3. 在cex sdiapp: : initlnstance函数的最后添加下列代码:crect redesktop;:
28、getwi ndowrect(getdesktopwindowo, redesktop);m pmainwnd>movewindow(redesktop. width()/2, 0, redesktop. width()/2, redesktop. height ()/2)4.为cmainframe类添加一个成员变量m_hcursor列代码:bool cmainframe:onsetcursor(cwnd* pwnd, utnt nhittest, uint message)boolbres=cframewnd:onsetcursor (pwnd, nllittest, message)
29、;if(nhittest=htclient)&&(m bistest)!m hcursor=afxgetapp()->loadcursor(1dc添加wm_setcursor的消息映射,并添加下cursor1);setcursor(m hcursor);bres二true;return bres;5. 在cex_sdiview类中添加wm丄buttondblclk的消息映射,并添加下列代码:void cex sdiview:onlbuttondblclk(uint nflags, cpoint point)pp()->m pmainwnd;cstatusbar*ps
30、latus=&pframe->n) wndstatusbar;if(pframe">m_bt stest)str. format ("你 在(%d, %d)处双 击鼠标"、point, x, point, y);elseif(pstatus)pstatus->setpanetext(1, str);cview:onlbuttondblclk(nflags, point);str. empty ();6. 删去菜单栏所有的菜单项,添加一个“测试”菜单,在accelerator的idr_mainframe创建该菜单项的快捷键7. 为cmain
31、frame添加wm_contextmenu的消息映射,并添加下列代码:void cmainframe:oncontextmenu (cwnd* pwnd, cpoint point)cmenu* psysmenu = getmenu();psysmenu->getsubmenu(0)->trackpopupmen u(tpm_leftalign |tpm_rigiitbutton, point, x,point, y, this);8. 添加四个图标资源,并绘制图标9. 为cmainframe添加一个成员函数changeicon,并添加下列代码:voidcmainframe:cha
32、ngetcon(utntnlconld)hiconhlconnew二afxgetapp ()->loadtcon(ntcontd);hiconhlconold=(hicon)getc1asslong(m_hwnd,gcl_hic0n);if (hlconnew != hlconold)destroytcon (hlconold);setclasslong(m hwnd,gcl hicon,(long)hlconnew);redrawwindow ();10. 在 cmainframo: :0ncreate 函数的最后添加代码:settinier (1, 500, null)11. 为cm
33、ainerame添加wm timer的消息映射,并添加下列代码:void cmainframe:0ntimer(uint nidevent)static int icons = idi ic0n1, idi icon2, idi icon3, idi ic0n4;static int index = 0;changeicon(iconsindex);index+;if (index>3)index = 0;cframewnd:0ntimer(nidevent);12. 编译并运行整个工程4运行结果设计三文档序列化1设计内容1)用mfc appwizard创建一个单文档应用程序ex_stu
34、dent,它首先通过对话框来输入一个学 生成绩记录,记录包括学生的姓名、学号和三门成绩。然后将记录内容保存到一个对象数组集 合类对象中,最后通过文档序列化将记录保存到一个文件中。当添加记录或打开一个记录文件 吋,还会将数据显示在文档窗口(即视图)中。2)在ex_studcnt中,还有一个不足的地方,即需要在文件内容的前面加上一个自定义的文件 头结构来区分学生成绩记录文件和其他数据文件。这里所用到的文件头结构包含文件类型和注 释。为文件头创建一个类cstuiieader,并使该类对序列化,添加操作代码,完善实例ex_studento2设计准备和说明1. 学习完文档序列化之后开始实验。2. 创建本
35、次实验的工作文件夹。3设计步骤1. 启动 visual c+ 6.02. 创建一个工程名为ex_student的单文档应用程序3. 复制设计一屮的idd dtalog1对话框,包括对话框类ctnputdlg的代码4. 打开 cex_studentdoc. h 文件,在 class cex_studentdoc 前添加下列代码:class cstudent:public cobjectri.cstring strname;cstring strno;float fscorel, fscore2, fscore3;float faverage;declare_serial(cstudent)5.打
36、开 cex studentdoc. cpp 文件,public:cstudent();cstudent(cstring name, cstring id, float fl, float f2, float f3);void serialize(carchive &ar);void di splay(int y,cdc *pdc);在文件最后添加cstudent实现代码:cstudent:cstudent (cstringname, cstring id, float fl, float f2, float f3)strame=name;strn0=id;fscorel=f1;fsco
37、re2=f2;fscore3=f3;faverage=(float)(fl+f2+f3)/3. 0);void cstudent:display(int y,cdc *pdc)cstring str;str. format("%s %s %f %f %f %f: strname, strno, fscorel, fscore2,fscore3, faverage);pdc>textout (0, y, str);iimplement serial(cstudent, cobject, 1) void cstudent:serialize(carchive &ar) if
38、 (ar. isstoring()ar«strname<<strno«f score l«fscore2« fscore3«f average;;elsefscore3>>faverage;6. 为cex studentdoc类中的id sturec添加command的消息映射,并添加下列代码:void cex studentdoc:onsturecadd()el, dig. m fscore2, dig. m fscore3);m_stuobarray> add(pstudent);ctnputdlg dig;s
39、etmodif i edflago ;if(idok二二dig. domodalo)updateallviews(null);cstudent *pstudent=new cstudent (dig. m_strname, dig. m_strn0, dig. m_fscor7. 为 cex studentdoc 添加成员函数 cstudent * getstudentat (int nindex),并添加下列代码:cstudent * cex studentd()c:getstudentat(int nlndex)if (nlndex<0)|nlndex>m_stuobarray
40、. getupperbound()return 0;return(cstudent *)m_stuobarraygetat(ntndex);8. 为cex studentdoc添加成员函数int getallrecnum(void),并添加如下代码:int cex studentdoc:getallrecnumoreturn m_stu0barray. getsizeo ;9. 在cex studentdoc中添加下列代码:cex studentdoc:cex studentdoc()!int nlndex二getallrecnumo ;vhile(nindex-)del ete m_stuo
41、barray. getat (ntndex);m stuobarray. removeall ();10. 将 cex_studentview: :ondraw 代码修改如下:voi d cex studentvi ew:ondraw(cdc* pdc)cex studentdoc* pdoc = getdocument();assert valid(pdoc);int y=0;for (int nindex=0;nindex<pdoc->getallrecnum();nlndex+)pdoc-getstudentat (ntndex)-display®, pdc);y+
42、=16;11打开文档的字符串资源tdr_matnframe,将其内容修改为:ex studentnstudentrecnex stuni己录文件(* rcc)n recnexsludcnt. documentnex_stu documcnt12打开 cex_studentdoc. h 文件,在 class cstudent: public cobject 前添加下列代码:class cstuileader:public cobjectstrcomment=comment;icstring strtypename;jvoid serialize(carchive &ar);cstring
43、 strcomment;bool isthisfile(cstring str)declare serial(cstuheader)public:cstuiieader() ;if (strstrtypename) return true;cstuheader(cstringname, cstringelse return false;comment);strtypename二name;13. 打开cex_studentdoc. cpp文件,在文件最后添加实现代码:implement_serial(cstuheader, cobject, 2)void cstuheader:serialize
44、(carchive &ar)if (ar.isstoring () ar«strtypename<<strcomment;else ar>>strtypename>>strcomment;14. 将 cex studentdoc: :serialize 代码修改如下:voidcex_studentdoc:serialize (carchive&ar)!cstuheader header ("stu","这是学生 成绩记录文件! );if (ar. isstoringo)header. serialize
45、 (ar);if(header. isthisfile("stu") m_stuobarray serialize(ar);else afxmessagebox(,z打开的文档不是学生成绩记录文件! );header. serialize(ar);m_stuobarray. serialize(ar);else15. 编译并运行整个工程4运行结果设计四综合1设计内容1)参照windows系统自带的计算器,用vc+完成一个简单计算器的设计,要求能实现基本的 加减乘除运算。2)编写一个windows应用程序,要求窗口上有菜单资源和相应的工具栏,通过选中不同的菜单 项或工具栏可以
46、画线段,画矩形和画椭圆,并有对话框对该程序进行介绍。2设计准备和说明1. 学习完vc+后开始实验。2. 创建木次实验的工作文件夹。3设计步骤1)计算器1. 启动 visual c+ 6. 02. 创建一个工程名为computer基于对话框的应用程序3. 参照windows系统自带的计算器,画出计算器外观4. 为 idd_computer_dialog 创建类对彖 “computerdlg”1、 m 2> m hlcon 和 m str5. 为computerdlg添加成员变量fuhao>6. 为computerdlg建立oncommand的消息映射,bool ccomputerdi
47、g:oncommand(wparamwparam, lparam 1param)if(loword(wparam)=tdc_button_o)m_str+=,z0,z;updatedata(false);if(loword(wparam)=idc_button_1)m str+二"1"updatedata(false);然后编辑下列代码:if(loword(wparam)=idc button 2)m_str+="2"updatedata(false);iif(loword(wparam)dc_button_3)ni_str+=,3,z;updateda
48、ta(false);!if(loword(wparam)=idc button 4)彳m str+= 4 ;updatedata(false);i f(loword(wparam)=idc button 5)!m_str+二5;updatedata(false);if(loword(wparam)=idc_button_6)im_str+=/6,z;updatedata(false);if(loword(wparam)=idc_button_7)m_str+=7;updatedata(false);if(loword(wparam)=idc button 8)m_str+=8;updatedata(false);if(loword(wparam)=idc_butt0n_9)im_sti'+=9 ;updatedata(false);if(loword(wparam)=idc button jia)m l+=atof(m str);m_str=_t (');fuhao=l;iif(loword(wparam)=1dc_button_jian)m_l=atof(mstr);m str= t ;fuhao=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年电视屏幕保养合同
- 2026年汽车行业用户需求合同
- 验资报告服务合同2026年保密义务
- 2026年食品质量保证合同协议
- 细胞与基因治疗革命
- 家用厨房用火用电安全培训课件
- 《信息技术基础(上册)》课件 模块二课题四
- 家政法律培训法课件
- 建筑施工企业安全员年终总结
- 培训讲师演讲课件
- 航天禁(限)用工艺目录(2021版)-发文稿(公开)
- TCALC 003-2023 手术室患者人文关怀管理规范
- 关键对话-如何高效能沟通
- 村级组织工作制度
- 汽车吊、随车吊起重吊装施工方案
- 中外政治思想史练习题及答案
- 人教版九年级化学导学案全册
- 降低阴式分娩产后出血发生率-PDCA
- 国开电大商业银行经营管理形考作业3参考答案
- GB/T 5211.6-2020颜料和体质颜料通用试验方法第6部分:水悬浮液pH值的测定
- GB/T 36024-2018金属材料薄板和薄带十字形试样双向拉伸试验方法
评论
0/150
提交评论