《C++实践指导教程.docx》由会员分享,可在线阅读,更多相关《C++实践指导教程.docx(71页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Visual C+实践指导教程习题答案目录第1章31 32 3第2章52 53 65 77 9第3章111113125132 163 174 185 19第5章211 212 224 255 266 27第6章301303 334 355 37第章391 392 413 434 455 47第8章512514 535 556 58第9章601603671.(1)实践结果(2)控件属性表无(3)程序源代码void CMdHelloView:OnDraw(CDC* pDC)(CMdHelloDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: a
2、dd draw code for native data herepDC-TextOut(50,50,Hello World!);2.(i)实践结果(2)控件属性表控件类型控件名ID类型成员LabelLabel 1IDC_STATIC(3)程序源代码BOOLCDlgHelloDlg:OnInitDialog()/TODO: Add extra initialization herethisSetDlgItemText(IDC_STATIC 这是个对话框程序”);return TRUE; / return TRUE unless you set the focus to a control )(
3、4)说明在此程序中使用 了一个常用函数 BOOLSetDlgItemText( int nID. LPCTSTR IpszString ), 该函数实现了通过控件的ID号(nID)设置控件的显示文本(IpszString).与此对应的还有 UINT GetDlgItemText( int nID, LPTSTR IpStr, int nMaxCounl) constBOOL GetDlgItemText( int nID, BSTR& bstrText) const详见MSDN1.(1)实践结果(2)控件属性表 略(3)程序源代码 略(4)说明参见实践1 (创建菜单)中创建菜单的方法,为程序菜
4、单添加“格式”菜单项,并在其 下添加子菜单项,分别为“自动换行”和“字体”,ID号分别为“IDC一AUTOLINE”和“IDC一FONT”。控件类型控件名ID类型成员LabelLabel 1IDC_STATIC2.(1)实践结果(2)控件属性表 略的方法添加在“文件”菜单项下添加“显示”子菜单项。(3)程序源代码 1)参照练习2)为“显示”子菜单项添加事件处理函数OnShowO。3)添加源代码void CMainFrame:OnShow()/ TODO: Add your command handler code hereCDC *pDC = this-GetDC();pDC-TextOut(
5、50,50,学习菜单处理程序);)(4)说明绘图时,必须先获得设备环境,即CDC,在此程序中使用函数GetDCO获得设备环境 指针。3.(1)实践结果文件任)辑広)查看豊)帮助鱼)r1秋建(B)Ctrl+N打开).Ctrl+0保存 0)Ctrl+S另存为。).打印 位).Ctrl+P打印预览W)打EP设置(B). _最近文件退出賞)显示(J) Ctrl+D(2)控件属性表略(3)程序源代码参照教材实践3(增加快捷键和加速键)1)将子菜单项“显示”的标题按钮修改为“显示(&D)”;2)打开加速键编辑器,将对应菜单项的KEY修改为Do (4)说明略(1)实践结果(2)控件属性表略(3)程序源代码v
6、oid CMenuCreateView:OnAddItem()CWnd* pParent = GetParent();CMenu* pMenu = jParent-GetMenu();CMenu* subMenu = pMenu-GetSubMenu( 1);subMenu-AppendMenu(MF_STRING I MF_ENABLED, 3000,”新菜单项)1(4)说明添加新菜单项与为该菜单项添加事件响应函数的方法见上例。动态添加菜单项的步骤:首先定位待添加的菜单项,GetParent()函数用于获得当前窗体, pParent-GetMenu()与pMenu-GetSubMenu用于获
7、得当前窗体的菜单及待添加菜单项, AppendMenu (,)用于执行自动添加菜单项的动作。5.(1)实践结果(2)控件属性表略(3)程序源代码1)添加消息映射,在视类中的消息映射宏中添加消息映射,添加代码显示如:BEGIN一MESSAGE一MAP(CMenuCreateView,CView)ON_COMMAND(3000, OnMyMenuItem)END_MESSAGE_MAP()2)添加响应函数/ Class Wizard generated virtual function overrides/AFX_VIRTUAL(CMenuCreateView)public:protected:a
8、fx_msg void OnMyMenuItem。;/AFX_VIRTUAL3)定义个字符串,并在构造函数中初始化定义:class CMenuCreateView : public CView (private:CString str;初始化:CMenuCrealeView:CMenuCreateView()(/ TODO: add construction code herestr 二”;)4)实现响应函数void ClnsertltemView:OnMyMenuItem()(str =你选中了新添加的菜单项; InvalidateO ;5)绘图void CMenuCreateView:On
9、Draw(CDC* pDC) (CMenuCreateDoc* pDoc = GetDocument();ASSERT. VALID(pDoc);/ TODO: add draw code for native data here pDC-TextOut(20,20, str);)(4)说明动态添加菜单项处理时,须定义菜单项消息与响应函数之间的映射关系。此处通过 ON_COMMAND(3000, OnMyMenuItem)来实现6.(1)实践结果(2)控件属性表 略(3)程序源代码在MainFrm. cpp的新函数OnCreateO中加入如下代码:if (!mwndToolBar. Creat
10、eEx(this, TBSTYLE_FLAT, WS_CHILD | WS VISIBLE | CBRS_TOPI CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) | !m_wndToolBar. LoadToolBar(1DR_MAINFRAME) (TRACE。(Failed to create toolbarn);return -1;/ fail to create)m wndToolBar. Enab1eDocking(CBRS ALIGN ANY);Enab1eDock i ng(CBRS_ALIGN_AN
11、Y);DockControlBar(&m wndToolBar);(4)说明关于此源代码中各函数的功能详见教材实践五程序分析与注意事项”。7.(1)实践结果(2)控件属性表略(3)程序源代码1 )新建工程CustomToolbar按教材实践7步骤初始化,修改字串表中的AFXDSDLEMESSAGE的标题为“XXX公司:版权所有”。2)在MailFrame中定义状态栏class CMainFrame : public CFrameWndprivate:CStatusBar m_wndStatusBar;3)定义状态栏数组static UINT indicators=ID_SEPARATOR,/
12、latus Ine hdicator1DJNDICATOR.CAPS,IDNDICATOR_NUM,IDJND1CATOR_SCRL,;4)添加自动创建状态栏代码int CMainFrame:OnCreate(LPCREATESTRUCT IpCreateStruct)if (!m_wndStatusBar.Create(this) II!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT) (TRACEO(Failed to create status barnH);return -1;/ fiil
13、t) createreturn 0;)(4)说明1) static UINT indicators定义个由标准命令ID组成的数组。 1D_SEPARATOR:指示在状态栏中生成一个空格。 ID_INDICATOR_CAPS:大写键锁定指示。 ID_INDICATOR_NUM:数字键锁定指示。 IDNDICATOR-SCRL:滚动键锁定指示。2)状态栏类的Create函数创建一个状态栏对象,函数Setindicators设置状态栏的显示 内容。1.(1)实践结果(2)控件属性表略(3)程序源代码打开资源编辑器,选中对话框IDD.ABOUTBOX,右击对话框上的两个静态文本框 (IDC_STATI
14、C),分别修改其标题属性为“简单的记事本程序”和“华北科技学院 nE_mail:wangyangting 王养廷(4)说明修改控件标题的方式既可如上所示,直接可视化修改,也可编写代码实现,即函数 SetDlgItemText(nID,pzstring) (1)实践结果(2)控件属性表略(3)程序源代码打开资源编辑器,选中菜单IDR.MAINFRAME,在“编辑”下首先添加分隔条子菜单 项,然后再添加“查找”子菜单项。(4)说明回顾第2章,在添加“查找”子菜单项时,其标题应为“查找(&F)”,即定义快捷键。3.(1)实践结果(2)控件属性表控件类型ID标题说明LabelIDC_STATIC查找目
15、标TextIDC_EDIT_CONTEXTCheckboxIDC_CHECK_UORL区分大小写RadioboxIDC_RADIO_UP向上(&U)RadioboxIDC_RADIO_DOWN向下(&D)ButtonIDOK查找下个ButtonIDCANCEL取消CDialogIDD_DLG_FIND查找对话框整体(3)程序源代码打开资源编辑器,选中文件夹Dialog,单击右键,弹出右键菜単后选中“插入Dialog”, 并修改新插入的对话框属性,令其D为IDD一DLG-FIND,标题为“査找”。再在对话框其 上添加控件并布局。(4)说明略(1)实践结果:略(2)控件属性表略(3)程序源代码在对
16、话框资源上单击右键,选中“建立类向导”项,弹出“Adding a class”对话框,选 择“Create a new class”单选框,确定后将弹出“New Class”对话框。在其中输入新类信息, Name中输入“ CFingDlg”,确定退出。(4)说明也可按快捷键Ctrl+W,要求弹出“类向导对话框”,在“类向导对话框”之前会出现* Adding a class对话框,其后的设置与上例完全一样。(2)控件属性表略(3)程序源代码1)为“査找”菜单项定义事件函数,void CDialogTestView:OnEditFind()Create(IDD_DLG_HND);dlg-ShowW
17、indow(SW_SHOW);)(4)说明关于非模式对话框,可参考教材第3章实践501.(1 )实践结果(2)控件属性表控件类型ID标题说明LabelIDC_STATIC您选择的体形:LabelIDC_STATIC_RESULT选择结果RadioboxIDC_RADIO_NORMAL正常RadioboxIDC_RADIO_THIN偏瘦RadioboxIDC_RADIO_FAT偏胖(3)程序源代码在3个Radiobox控件上添加单击事件,分别为如下3个函数,并添加代码: void CRadioTestDlg: :OnRadioFat()UpdateData();m_strResult您的体形是:
18、较胖”;UpdateData( false);void CRadioTestDlg:OnRadioNormal()(UpdateData();m_strResult=您的体形是:正常”;UpdateData(false);)void CRadioTestDlg:OnRadioThin()UpdateData();m_strResult=您的体形是:较瘦”;UpdateData(false);(4)说明关于UpdateData函数这里解释。UpdateData函数主要起到控制控件标题显示的作用。 当调用UpdaiaData(TRUE)的时候,程序会対控件対应的变量值进行刷新,也就是说会把控 件中
19、的输入值赋给对应的变量。而调用UpdataData(FALSE)的时候,程序则会把相应变量的 值显示在对应的控件上面。2.(1)实践结果(2)控件属性表控件类型ID标题类型成员LabelIDC_STATIC请选择特长:LabelIDC_STATIC_RESULT显示结果:CStringm_strResultCheckboxIDC_CHECK_ENGLISH英语boolm_bEnglishCheckboxIDC_CHECK_SPORTS体育boolm_bSportsCheckboxIDC_CHECK_ART文艺boolm_bArtCheckboxIDC_CHECK_COMPUTER计算机bool
20、m_bComputerbuttonIDOK确定(3)程序源代码在“确定“按钮上添加单击事件,添加代码如下: void CCheckTestDlg:OnOK()UpdateData();CString str;str =您的特长为:; if (m_bEnglish=true) (str = str+英语;if (m_bArt=true)(str = str+文艺;)if (m_bComputer=true)str = str+计算机”;if (m_bSports=true)(str = str+H 体育”;)m_strResult=str;UpdateData(false);)(4)说明在此处关
21、键为Checkbox定义控件类型与成员,与上例RadioBox的用法不尽相同,注 意区别。3.(2)控件属性表控件类型ID标题类型成员RadioboxIDC_RADIO1请选择特长:intm_nTermRadioboxIDC_RADI02显示结果:CheckboxIDC_CHECK1心理学boolm_bck 1CheckboxIDC_CHECK2外国文学boolm_bck2CheckboxIDC.CHECK3管理学boolm_bck3CheckboxIDC_CHECK4经济史boolm_bck4CheckboxIDC_CHECK5近代史boolm_bck5CheckboxIDC_CHECK6社
22、会学boolm_bck6buttonIDOK确定(3)程序源代码在“确定“按钮上添加单击事件: void CGroupTestDlg:OnOK()可在其中添加代码执行相应功能)(4)说明注意区别Checkbox与Radiobox在使用时的不同之外,前者可多选,而后者要求在同一组内的控件只可单选。因此,在使用后者时必须对Radiobox指定分组。4.(1)实践结果(2)控件属性表控件类型ID标题类型成员ListIDC_LISTcontrolmisttextIDC_EDITcontrolm_editbuttonID_BUTTON_EDIT修改buttonID_B UTTON_DELETE删除but
23、tonID_BUTTON_EXIT退出(3)程序源代码初始化列表框代码:BOOL CListTestDlg:OnInitDialog()mist. AddString(语文); mist.AddString(数学); mist. AddString(英语);)为3个按钮添加事件为:void CListTestDlg:OnButtonEdit() CString str;m_edit.GetWindowText(str);m_list.AddString(str);m_edit.SetWindowText();m_edit.SetFocus();void CListTestDlg: :OnBut
24、tonDelete()int st;st=m_list.GetCurSel();m_list.DeleteString(st);)void CListTestDlg:OnButtonExit()(OnCancel();)(4)说明若想直接在列表框上单击便能选中某项,可在列表框上定义单击事件,读者可自行尝试 完成。5.(1 )实践结果(2)控件属性表控件类型ID标题类型成员comboIDC.COMBOcontrolm_comboCstringm_strComboradiobox1DC_RADIO_NOT_VILLIAGE非农户口controlm_radioradioboxIDC.RADIO _V
25、ILLIAGE农业户checkboxIDC_CHECK_JIXIE机械工程boolm_bckjjixiecheckboxIDC_CHECK_JINGJI经济管理boolm_bckjigjicheckboxIDC_CHECK_JSJ计算机技术boolm_bckjsjcheckboxIDC_CHECK_DIANZI电子技术boolm_bckdianziButtonID_BUTTON_SUBMIT提交buttonID_BUTTON_EXIT退出(3)程序源代码为提交按钮添加事件处理函数:void CComboTestDlg:OnButtonSubmit() (C String m_strPro vi
26、nce;CString m_strResidence;UpdateData(true);m_strProvince = m_strCombo;if(m_radio.GetCheck() = 1)m_strResidence =非农业户 ”; elsem_strResidence = 农业户 ”;CString m_strCource = M;if(this-m_bckdianzi = TRUE)m_strCource +二”电子技术”;if(this-m_bckjsj = TRUE)m_strCource + 二”计算机技术”;if(this-m_bckjixie = TRUE)m_strCo
27、urce 十二”机械工程二if(this-m_bckjingji TRUE) m_strCource + 二”经济管理”;AfxMessageBox(”省份是:“+m_strProvince+“n”+“户 是:“+ m_strResidence+”所选课程有:+m_strCource);)(4)说明此例为combo,checkbox,radiobox多控件的综合应用,该类3种控件在程序设计时非常 常用,在使用时应注意区别各自的使用方法。1.(1 )实践结果(2)控件属性表控件类型ID标题类型成员TextIDC.EDITbuttonIDC-BUTTON显示非数字字符(3)程序源代码为按钮添加事件
28、处理函数:void CFileTestDlg:OnButton()CFile mFile;CString m_Str =mFile.Open(c:InetFile.txt,CFile:modeRead);DWORD fileLength = mFile.GetLength();int dwCount=0;while(dwCount 9)m_Str +=sRead;dwCount+=dw;mFile.Close();SetDlgItemText(IDC_EDIT,m_Str);)(4)说明在该程序示例中,待打开的文本文件的地址是为硬编码方式,因此,在程序运行之前应 先检查该文本文件是否存在,且地
29、址是否正确。在读写文件时,普遍遵循文件读写的一般步骤,即打开文件、设置读写模式、循环读写、 关闭文件。当然,读写文件有很多方法,此处只示例种方式,读者可自行尝试其他方法。2.(1 )实践结果(2)控件属性表控件类型ID标题类型成员buttonIDC_BUTTON写入10个随机数(3)程序源代码为按钮添加事件处理函数:void CFileWriteTestDlg:OnButton()CFile mFile;mFile.Open(,c:test.txt,CFile:modeWritelCFile:modeCreate);int count = 0;srand( (unsigned)time( NU
30、LL);while(count 1) (int m_nRandom = rand();CString m_strRandom(m_nRandom);mFile.SeekToEnd();mFile.Write(m_strRandom,strlen(m_strRandom);count+;mFile.Close();)(4)说明此例中的唯一难点是产生!0个随机数,函数srand( (unsigned)time( NULL);用于将随机数产生器设置为系统时间,如此的话,每次产生的随机数都将不相同,具有最好 的随机效果。3.(1)实践结果(2)控件属性表控件类型ID标题类型成员buttonIDC_B
31、UTTON_EXCHANGE交换文件内容TextIDC_EDIT_FILE1textIDC_EDIT_FILE2(3)程序源代码 定义变量:class CExchangeFileTestDlg : public CDialog ( private:CString m_strFilel,m_strFile2:用于存储两个文件内容的字符串CFile m_filel,m_file2:两个文件变量Void ReadFileO; 私有函数,用于读取文件内容至字符串中并显示 )ReadFile函数的实现代码:void CExchangeFileTestDlg:ReadFile() (CString m_S
32、tr;m_file 1 .Open(uc:testl .txtn,CFile:modeRead);DWORD fileLength = m_file 1 .GetLength();int dwCount=0;while(dwCount fileLength) char sRead5;memset(sRead,0,6);int dw = m_filel.Read(sRead,5);m_Str += sRead;dwCount+=dw;m_filel.Close();m_strFilel = m_Str;SetDlgItemText(IDC_EDIT_FILE 1 ,m_strFile 1);m_
33、Str=,M,;m_file2.Open(,c:test2.txt,CFile:modeRead);fileLength = m_file2.GetLength();dwCount=0;while(dwCount fileLength) (char sRead5;memset(sRead,0,6);int dw = m_file2.Read(sRead,5);m_Str += sRead;dwCount+=dw;)m_file2.Close();m_strFile2 = m_Str;SetDlgItemText(IDC_EDIT_FILE2,m_strFile2);)交换字符串内容代码:voi
34、d CExchangeFileTestDlg:OnButtonExchange()(CString m_strExchange;m-strExchange = m_strFilel;m_strFilel = m_strFile2;m_strFile2 = m_strExchange;m_filel.Open(uc:testl.txt,CFile:modeWrite);m_file 1. Write(m_strFile l,strlen(m_strFile 1);m_filel.Close();m_file2.Open(,c:test2.txt,CFile:modeWrite);m_file2.
35、Write(m_strFile2,strlen(m_strFile2);m_file2.Close();ReadFile();)(4)说明ReadFile。函数用于完成读取文本中的内容至字符串中,并将其显示到文本框中。程序核心功能是在函数OnButtonExchange。中完成的,将代表两个文件内容的字符串内 容交换,然后再对应写回至原文件中,就完成了文件的交换功能。(1)实践结果(2)控件属性表控件类型ID标题类型成员TextIDC_EDITbuttonIDC_BUTTON打开文件对话框(3)程序源代码为按钮添加事件处理函数:void CFileTestDlg: :OnButton()CFi
36、le mFile;CString m_Str = n;CString lpFileName=_T(,H);CString lpszFilter=_T(Mtxt Files(*.txt)l*.txtlAll Files(*.*) ICFileDialogfdlg(TRUE, NULL, NULL, OFN_HIDEREADONLYIOFN_OVERWRITEPROMPT, lpszFilter,NULL);if(fdlg.DoModal()=IDOK)CString lpszFileName=fdlg.GetPathName();CString lpszExt=fdlg.GetFileExt()
37、;if(lpszExt.IsEmpty() IpFileName.Format(%s.tx pszFileName);) elselpFileName=lpszFileName; mFile.Open(lpszFileName, CFile: mode Read);DWORD fileLength = mFile.GetLength();int dwCount=0;while(dwCount fileLength)char sRead5;memset(sRead,0,6);int dw = mFile.Read(sRead,5);m_Str= m_Str + sRead;dwCount+=dw
38、;)SetDlgItemText(IDC_EDIT,m_Str);mFile.Close();)(4)说明关于CfileDialog类及其使用方法请参考教材实践四的“程序分析与注意事项”或者参 考 MSDN。5.(1 )实践结果(2)控件属性表控件类型ID标题类型成员buttonIDC_BUTTON设置文件属性(3)程序源代码为按钮添加事件处理函数:void CSetupFileDlg:OnButton()(CFile mFile;CString m_Str;DWORD stat=O;CString lpFileName=_T(,H,);CString lpszFilter=_T(Mtxt F
39、iles (*.txt)l *.txtlAll Files (*.*) I *.*11);CFileDialogfdlg(TRUE, NULL, NULL, OFN.HIDEREADONLYIOFNOVERWRITEPROMPT, )szFiIter,NULL);if(fdlg.DoModal()=IDOK) CString lpszFileName=fdlg.GetPathName();CString lpszExt=fdlg.GetFileExt();if(lpszExt.IsEmpty()IpFileName.Format (%s.txtn,lpszFileName); elselpFi
40、leName=lpszFileName;stat=GetFileAttributes(lpFileName);statl=FILE-ATTRIBUTE一HIDDEN;statl=FILE_ATTRIBUTE_READONLY;if(!SetFileAttributes(lpFileName,stat)AfxMessageBox(设置文件属性出错);|)(4)说明1)使用CFileDialog类是一个打开文件对话框,选择要修改属性的文件。2)使用函数GetFileAttributes(lpFileName)来获取指定文件的属性,参数IpFileName用 来指示文件的全路径名。这个函数返回文件的
41、属性。3)文件属性是一个双字,常用的属性有: FILE_ATTRIBUTE_HIDDEN:文件隐藏属性; FILE_ATTRIBUTE_READONLY:文件只读属性; FILE_ATTRIBUTE_ARCHIVE:文件归档属性: FILE_ATTRIBUTE_SYSTEM:文件系统属性。6.(1)实践结果(2)控件属性表控件类型ID标题类型成员buttonIDC.BUTTON .SAVE保存对象buttonIDC_B UTTON_R EA D读取对象(3)程序源代码此题较为复杂,关键是构造个可序列化的新类Cstudent。代码如下;CStudent.hclass CStudent: public CObjectpublic:CStudent();CStudent(int,CString);virtual -CStudent();pub