Windows可视化编程visual c++实验二报告.doc_第1页
Windows可视化编程visual c++实验二报告.doc_第2页
Windows可视化编程visual c++实验二报告.doc_第3页
Windows可视化编程visual c++实验二报告.doc_第4页
Windows可视化编程visual c++实验二报告.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验二 标准控件一、 题目9-171. 题目具体内容:如图 9-8 创建应用程序,在 “形状” 列表框中选择要绘制的图形, 在 “笔颜色” 下拉列表框中选择画笔的颜色,在 “刷子颜色” 下拉列表框中选择画刷的颜色。在 “线型” 组合框中选择画笔的线型,在 “填充类型” 中选择画刷填充类型。单击 “绘图”按钮按照前面的选项绘制图形,单击 “退出” 按钮退出程序。2. 分析和核心代码(1)创建 MFC应用程序: 在对话框中选择 Dialogbased 创建基于对话框的应用程序。(2)在工作区窗口中选择资源视图,打开 Dialog 文 件夹, 双击在右侧窗口出现了待编辑的对话框。利用控件工具,按照图 9-8 建立对话框,添加各个按钮,对话框中各控件的属性如下:控件名称 ID Caption静态文本 IDC - STATIC 形状列表框 IDC - LIST - SHAPE静态文本 IDC - STATIC 笔颜色下拉列表框 IDC - COMBO - PENCOLOR静态文本 IDC - STATIC 刷子颜色下拉列表框 IDC - COMBO - BRUSHCOLOR组合框 IDC - STATIC 线型单选按钮 IDC - RADIO - SOLID Solid单选按钮 IDC - RADIO - DASH Dash单选按钮 IDC - RADIO - DOT Dot单选按钮 IDC - RADIO - DASHDOT DashDot组合框 IDC - STATIC 填充类型单选按钮 IDC - RADIO - SOLIDBRUSH SolidBrush单选按钮 IDC - RADIO - CROSS Cross单选按钮 IDC - RADIO - PDIAGONAL PDiagonal单选按钮 IDC - RADIO - BDIAGONAL BDiagonal下压式按钮 IDC - BTN - DRAW 绘制下压式按钮 IDOK 退出(3)建立好各控件后, 在 “笔颜色” 下拉列表框,选择属性菜单项,在弹出的对话框中单击数据选项卡。输入完一行后,按下 Ctrl 键的同时单击 Enter键。同理在 “画刷颜色” 下拉列表框的数据选项卡中输入同样的内容。这样一行文本就代表下拉列表框中的一个颜色选项。分别在 Solid 和 SolidBrush 单选按钮上单击鼠标右键,选择属性菜单项, 选中 Radio Button Properties 对话框中的 Group 选项。创建单选按钮时要按照图中从上到下的顺序, 保证单选按钮的 ID 值是连的,才能保证两组单选按钮的互斥性。(4)在 Workspace 窗口中, 选择 类视图选项卡, 在类 CshiyanDlg 上单击鼠标右键,选择 添加成员变量菜单项, 加入 public 型变量如表。 表9-19在对话框类中加入的成员变量变量类型变量名称说明int m- nPenStyle 标志由“线型”组合框中所选择的画笔的类型 int m- nBrushStyle标志由“填充类型”组合框中所选择的画刷类型COLORREF m- crPenColor 标志“笔颜色”列表框中所选择的画笔颜色COLORREF m- crBrushColor 标志“刷子颜色”列表框中所选择的画刷颜色在CMyshiyanDlg .cpp的OnInitDialog函数中加入代码如下: m_pencolor=RGB(255,0,0); m_brushcolor=RGB(255,0,0);m_penstyle=PS_SOLID;m_brushstyle=PS_SOLID; m_list.SetCurSel(0);m_combo1.SetCurSel(0);m_combo2.SetCurSel(0);CheckRadioButton(IDC - RADIO - SOLID, IDC - RADIO - DASHDOT , IDC - RADIO - SOLID);CheckRadioButton( IDC - RADIO - SOLIDBRUSH , IDC - RADIO - BDIAGONAL , IDC - RADIO -SOLIDBRUSH);在这里设置了各变量的初始值。默认笔和刷的颜色为红色,笔的线型为实线, 画刷填充类型为实填充。(5)打开类向导对话框, 选择 消息选 项卡, 在Object IDs 列表框中选择各个单选按钮的 ID 值, 在 Messages 列 表框中选 择消息 类型。单击 Add Function 按钮映像各单选按钮的消息处理函数(如表 )。ID消息消息处理函数IDC-RADIO-SOLIDBN-CLICKEDOnRadioSolidIDC-RADIO-DASHBN-CLICKEDOnRadioDashIDC-RADIO-DOTBN-CLICKEDOnRadioDotIDC-RADIODASHDOTBN-CLICKEDonRadioDashdotIDC-RADIO-SOLIDBRUSHBN-CLICKEDOnRadioSolidBrushIDC-RADIO-CROSSBN-CLICKEDOnRadioCrossIDC-RADIO-PDIAGONALBN-CLICKEDOnRadioPdiagonalIDC-RADIO-BDIAGONALBN-CLICKEDOnRadioBdiagonal在单选按钮上单击鼠标,系统发送 BN - CLICKED 消息, 调用消息处理函数, 在这些函数中加入代码设置标志笔和画刷类型的变量 m - nPenStyle 和 m - nBrushStyle。 void CshiyanDlg:OnBnClickedSolid()/ TODO: 在此添加控件通知处理程序代码m_penstyle=PS_SOLID;void CshiyanDlg:OnBnClickedDash()/ TODO: 在此添加控件通知处理程序代码 m_penstyle=PS_DASH;void CshiyanDlg:OnBnClickedDot()/ TODO: 在此添加控件通知处理程序代码m_penstyle=PS_DOT;void CshiyanDlg:OnBnClickedDashdot()/ TODO: 在此添加控件通知处理程序代码m_penstyle=PS_DASHDOT;void CshiyanDlg:OnBnClickedSolidbrush()/ TODO: 在此添加控件通知处理程序代码m_brushstyle=PS_SOLID;void CshiyanDlg:OnBnClickedCross()/ TODO: 在此添加控件通知处理程序代码m_brushstyle=HS_CROSS;void CshiyanDlg:OnBnClickedFdiagonal()/ TODO: 在此添加控件通知处理程序代码 m_brushstyle=HS_FDIAGONAL;void CshiyanDlg:OnBnClickedBdiagonal()/ TODO: 在此添加控件通知处理程序代码m_brushstyle=HS_BDIAGONAL;(6) 打开类视图对话框, 为下拉列表框映像消息处理函数(如表所示)。Object IDs 消 息 消息处理函数IDC - COMBO - PENCOLOR CBN - SELENDOK OnSelendokComboPencolorIDC - COMBO - BRUSHCOLOR CBN - SELENDOK OnSelendokComboBrushcolor当在下拉列表框中选择一个颜色选项时, 系统发送此消息,调用消息处理函数, 在这些消息处理函数中设置颜色变量:void CshiyanDlg:OnCbnSelendokCombo1()/ TODO: 在此添加控件通知处理程序代码int i;i=m_combo1.GetCurSel();if(i=0)m_pencolor=RGB(255,0,0);else if(i=1)m_pencolor=RGB(0,255,0);else if(i=2)m_pencolor=RGB(0,0,255);void CshiyanDlg:OnCbnSelendokCombo2()/ TODO: 在此添加控件通知处理程序代码int i;i=m_combo2.GetCurSel();if(i=0)m_brushcolor=RGB(255,0,0);else if(i=1)m_brushcolor=RGB(0,255,0);else if(i=2)m_brushcolor=RGB(0,0,255);首先调用函数 GetCurSel 得到当前选项在下拉列表框中的位置, 然后根据此位置设置颜色变量。(7)在消息处理函数 OnBnClickedButton1,加入如下代码:void CshiyanDlg:OnBnClickedButton1()/ TODO: 在此添加控件通知处理程序代码CClientDC hDC(this);CPen *penold,pennew;CBrush *brushold,brushnew,brushback;CRect rectclient;GetClientRect(&rectclient);CRect rectdraw(rectclient.right-170,20,rectclient.right-20,170);brushback.CreateSolidBrush(RGB(255,255,255);brushold=hDC.SelectObject(&brushback);hDC.Rectangle(rectdraw); if(m_brushstyle!=0)brushnew.CreateHatchBrush(m_brushstyle,m_brushcolor);elsebrushnew.CreateSolidBrush(m_brushcolor);pennew.CreatePen(m_penstyle,1,m_pencolor);penold=hDC.SelectObject(&pennew);hDC.SelectObject(&brushnew);if(m_list.GetSel(0)hDC.MoveTo(rectdraw.left,rectdraw.top);hDC.LineTo(rectdraw.right,rectdraw.bottom);else if(m_list.GetSel(1)hDC.Ellipse(rectdraw);else if(m_list.GetSel(2)hDC.Rectangle(rectdraw);else if(m_list.GetSel(3)hDC.RoundRect(rectdraw,CPoint(50,50);hDC.SelectObject(penold);hDC.SelectObject(brushold);首先得到设备环境指针 HDC,然后调GetClientRect(&rectclient); 得到用户区的大小, 并定义绘图 rectclient。根据 m - nBrushStyle 和 m - crBrushColor 创建画刷对象, 根据 m nPen-Style 和 m - crPenColor 创建画笔。最后调用列表框类成员函数 GetSel 得到选中的列表框项的位置,依此绘制图形。3. 测试数据、预期结果、测试结果测试结果选择条件参数,5.调试过程及心得体会做的时候有很多不明白的地方,用到了很多以前讲解的知识,关于MFC和标准控件的应用虽然上课听了理论知识,但是 理解的不够透彻,调试的时候出现了很多错误。以后应该多看看书本,做练习才能提高编程能力。实验题目9-201. 题目建立一个程序进行数据的管理, 设有 10 组数据, 每一组数据有 5 个元素, 要求该程序能实现如下功能(本例的程文件名为 9 - 20)(1) 从键盘依次输入 10 组数据;(2) 调出任意的一组数据并显示出来;(3) 修改任意一组数据或一组数据中的任意一个元素;(4) 求出任意一组数据中的最大值和最小值。2.分析和核心代码 (1) 利用 MFC 向导建立程序框架: (2)在对话框中添加相应的控件,并根据表设置其属性。图 9 -21要求开发的界面对象 ID Caption或说明 变量 类型编辑框 IDC- EDIT1 组号 m- Group- Edit CEdit编辑框 IDC- EDIT2 数据1 m- No1- Edit CEdit编辑框 IDC- EDIT3 数据2 m- No2- Edit CEdit编辑框 IDC- EDIT4 数据3 m- No3- Edit CEdit编辑框 IDC- EDIT5 数据4 m- No4- Edit CEdit编辑框 IDC- EDIT6 数据5 m- No5- Edit CEdit编辑框 IDC- STATIC 数据 编辑框 IDC- EDIT7 最大值m- Max- Edit CEdit编辑框 IDC EDIT8 最小值m-Min -Edit CEdit编辑框 IDC- STATIC 结果 (4) 根据图中的布局,利用图9-10中的“按钮”按钮单击鼠标左键,在对话框窗口中的 “输入数据” 按钮的位置上,按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键, 在弹出的菜单中选择 Properties 选项, 在弹出的对话框(如图 9- 24 所示)中设置按钮控件的 ID 值和 Caption 属性。按照此方法建立图 9-23 所示的 4个按钮,并将各对象属性设置如表 9- 27 所示。 表9-27【9-20】中各按钮属性的设置对象ID Caption命令按钮IDC- BUTTON1 输入数据命令按钮IDC- BUTTON2 输出数据命令按钮IDC- BUTTON3 检索数据命令按钮IDC- BUTTON4 退出(5) 加入代码为了记录输入的10组数据,需要在文件9- 20Dlg .h中定义结构,如下: structstruData doubledfData5; ; “组号”编辑框中输入组号,然后在“数据”编辑框中输入数据,单击“输入数据”将存储数据。,选择 MessageMaps选项卡,在Object IDs列表框中选择IDC- BUTTON1,在 Messages列表框中选BN-CLICKED(如图所示)。单击Add Function按钮,在弹出的 Add Member Function对话框中将函数名改为OnInputBtn,然后单击 Edit Code按钮,加入下列代码: void Cshi9_20Dlg:OnBnClickedinput()/ TODO: 在此添加控件通知处理程序代码UpdateData(true);datam_groupnum0=m_data1;datam_groupnum1=m_data2;datam_groupnum2=m_data3;datam_groupnum3=m_data4;datam_groupnum4=m_data5;UpdateData(false); CString cstrGroup,cstrInputData5; /输入数据为字符串型数据 图9-27在Messages列表框中选择BN-CLICKED intiGroup; /组号为整数 m- Group- Edit.GetWindowText(cstrGroup); /得到组号字符串 m- No1- Edit.GetWindowText(cstrInputData0); /得到输入数据字符串 m- No2- Edit.GetWindowText(cstrInputData1); m- No3- Edit.GetWindowText(cstrInputData2); m- No4- Edit.GetWindowText(cstrInputData3); m- No5- Edit.GetWindowText(cstrInputData4); iGroup=atoi(LPCTSTR)cstrGroup); /将组号转化为整数形式 for(inti=0;i5;i+) /将输入数据转化为浮点形式 InputDataiGroup-1 .dfDatai=atof(LPCTSTR)cstrInputDatai); “输出结果”按钮用来显示当前组号编辑框中的组号所对应的一组数据的最大和最小值。利用类向导给按钮映像BN- CLICKED消息处理函数。OnBnClickedoutput加入下列代码:void Cshi9_20Dlg:OnBnClickedoutput()/ TODO: 在此添加控件通知处理程序代码UpdateData(true);float mindata=datam_groupnum0, maxdata=datam_groupnum0;for(int i=0;idatam_groupnumi) mindata=datam_groupnumi; if(maxdatadatam_groupnumi) maxdata=datam_groupnumi;CString text;text.Format(L%g,mindata);m_mindata.SetSel(0,-1);m_mindata.ReplaceSel(text);text.Format(L%g,maxdata);m_maxdata.SetSel(0,-1);m_maxdata.ReplaceSel(text);首先需要从组号编辑框中读取组号值,然后将第一个数据值赋给 dfMax、dfMin,当有数据比 dfMax 大时,将它赋值给 fdMax;当有数据比 dfMin小时,将它赋值给 dfMin。经过此循环后,可以求得最大和最小值。“检索数据”按钮用来完成搜索功能,在“组号”编辑框中输入需要搜索的数据的组号,单击该按钮后,在 5 个“数据”编辑框中显示数据。在消息处理函数OnBnClickedsearch然后加入下列代码:void Cshi9_20Dlg:OnBnClickedsearch()/ TODO: 在此添加控件通知处理程序代码UpdateData(true);m_data1=datam_groupnum0;m_data2=datam_groupnum1;m_data3=datam_groupnum2;m_data4=datam_groupnum3;m_data5=datam_groupnum4;UpdateData(false);同样首先要调用函数GetWindowText得到组号,然后调出相应数据输出即可。 给“退出”按钮连接代码:在消息处理函数OnBnClickedexit。然后加入下列代码。void Cshi9_20Dlg:OnBnClickedexit()/ TODO: 在此添加控件通知处理程序代码OnOK();4. 测试数据、预期结果、测试结果(1)输入第“0”组数据,显示最大值和最小值:(2)输入第“3”组数据,显示最大值和最小值:(3)检索第“0”组数据:二、 题目9-211. 题目创建一程序, 包含两个编辑框, 一个是单行编辑框, 一个是多行编辑框, 另外有“Cut” 、 “Copy” 、 “Paste” 、 “Clear All” 、 “Undo” 和 “Exit” 按钮。分别完成从一个编辑框到另一个编辑框的 “剪切” 、 “拷贝” 、 “粘贴” 、 “清除” 、 “撤销” 和 “退出” 操作。在多行编辑框的下方创建 4 个文本框,能动态显示多行编辑框中当前文本的行数、 字符数、 多行编辑框中当前可见最上面一行的行号、 光标所在行的行号。界面如图 9-28 所示(本例的工程文件为 9 - 21)。2. 分析和核心代码 (1) 利用 MFC向导建立程序框架(2)双击IDD- MY9- 21- DIALOG,打开待编辑的对话框。 建立单行和多行编辑框:在 VC 2012的控件选项框中选择 “编辑框” 按钮, 在“Single Line Edit Box” 编辑框的位置上, 按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在该编辑框上单击鼠标右键, 在弹出的快捷菜单上选择 属性选项, 在弹出的对话框中输入编辑框的属性。同样可以在窗口中创建 “MultiLine Edit Box” 编辑框, 在编辑框上单击鼠标右键,选择 属性选项, 在弹出的对话框中的 General 选项卡中输入 ID, 然后单击Styles(样式)选项卡, 选中 Multiline。表-编辑框对象的变量及其类型对象 ID 变量 类型编辑框 IDC - SINGLEEDIT m - MEdit CEdit编辑框 IDC - MULTILINEEDIT m - SEdit CEdit 创建 “Cut” 按钮:在对话框窗口创建 “Cut” 按钮,选择属性 菜单项后, 在弹出的 Push Button Properties 对话框中设置按钮属性。同理创建其他按钮,各按钮属性如下表所示。对象 ID Caption下压式按钮 IDC - COPY Copy下压式按钮 IDC - CUT Cut下压式按钮 IDC PASTE Paste下压式按钮 IDC - CLEARALL Clear All下压式按钮 IDC - UNDO Undo下压式按钮 IDC - EXIT Exit 建立显示 “MultiLine Edit Box” 状态的编辑框:创建“MultiLine Edit Box” 下方的 4 个编辑框, 在这些编辑框上单击鼠标右键,选择 Properties菜单项,在对话框的 Style 选项卡中选中 Read-Only。各对象 ID 属性如下表所示编辑框对象的变量及其类型对象 ID 变 量 类型编辑框 IDC - LINENUM m - LineNum CEdit编辑框 IDC - CHARNUM m - CharNum CEdit编辑框 IDC - CURLINE m - CurLine CEdit编辑框 IDC - VISLINE m - VisLine CEdit(3) 加入代码。 给 “Clear All” 按钮连接代码: 在函数Cshi9_21Dlg加入如下代码:void Cshi9_21Dlg:OnBnClickedClear()/ TODO: 在此添加控件通知处理程序代码m_edit1.SetSel(0,-1);m_edit1.ReplaceSel(L);m_edit2.SetSel(0,-1);m_edit2.ReplaceSel(L);调用编辑框类 CEdit 的成员函数 SetSel(0, - 1)将编辑框中的内容全选, 然后调用函数 ReplaceSel( ) , 将全选的文本用空文本 代替,完成清空编辑框的任务。 “Undo” 按钮连接代码: 在消息处理函数OnBnClickedBtnUndo, 加入如下代码:void Cshi9_21Dlg:OnBnClickedBtnUndo()/ TODO: 在此添加控件通知处理程序代码if(m_flag1)m_edit1.Undo();if(m_flag2)m_edit2.Undo(); 给 “Copy” 按钮连接代码:先定义 bFocusSEdit 和 bFocusMEdit 两个变量,在这里规定只有获得输入焦点的编辑框才能执行按钮操作, 这两个变量用来标志编辑框是否获得了输入焦点。这两个变量需要初始化,在初始化函数 OnInitDialog 中加入代码:BOOL Cshi9_21Dlg:OnInitDialog()CDialog:OnInitDialog();/ 将“关于.”菜单项添加到系统菜单中。/ IDM_ABOUTBOX 必须在系统命令范围内。ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动/ 执行此操作SetIcon(m_hIcon, TRUE);/ 设置大图标SetIcon(m_hIcon, FALSE);/ 设置小图标/ TODO: 在此添加额外的初始化代码return TRUE; / 除非将焦点设置到控件,否则返回 TRUE采用给 “Clear All” 按钮映像消息处理函数相同的方法, 在 类向导中的 ObjectIDs 框中选择 IDC - SINGLEEDIT, 在Messages 框中选择 WM - SETFOCUS 消息, 单击Add Function 按钮, 接受默认函数名,然后单击 Edit Code 按钮,加入如下代码:void Cshi9_21Dlg:OnEnKillfocusEdit1()/ TODO: 在此添加控件通知处理程序代码m_flag1=true;m_flag2=false;当单行编辑框获得了输入焦点后,系统自动发送消息 WM - SETFOCUS 给相应的对象,然后调用此消息映像函数将m_flag2设置为 TRUE。同理我们可以处理多行编辑框的 WM - SETFOCUS 消息, 在消息处理函数OnEnKillfocusEdit2中加入代码:void Cshi9_21Dlg:OnEnKillfocusEdit2()/ TODO: 在此添加控件通知处理程序代码m_flag1=false;m_flag2=true;给 “Copy” 按钮加代码,在消息处理函数OnBnClickedBtnCopy, 加入如下代码:void Cshi9_21Dlg:OnBnClickedBtnCopy()/ TODO: 在此添加控件通知处理程序代码if(m_flag1)m_edit1.Copy();if(m_flag2)m_edit2.Copy(); 给 “Cut” 按钮增加代码: 在消息映像函数OnBnClickedBtnCut,加入下列代码:void Cshi9_21Dlg:OnBnClickedBtnCut()/ TODO: 在此添加控件通知处理程序代码if(m_flag1)m_edit1.Cut(); if(m_flag2)m_edit2.Cut(); 给 “Paste” 按钮增加代码: 利用 在消息映像处理函数OnBnClickedBtnPaste,加入下列代码:void Cshi9_21Dlg:OnBnClickedBtnPaste()/ TODO: 在此添加控件通知处理程序代码if(m_flag1)m_edit1.Paste();if(m_flag2)m_edit2.Paste(); 此题要求动态地显示多行编辑框的状态, 为此需要给 “ MultiLine Edit Box” 编辑框的 EN - CHANGE 消息映像函数, 每当 “MultiLine Edit Box” 编辑框的内容发生变化时,系统均发出此消息。加入下列代码:void Cshi9_21Dlg:OnEnChangeEdit2()/ TODO: 如果该控件是 RICHEDIT 控件,它将不/ 发送此通知,除非重写 CDialog:OnInitDialog()/ 函数并调用 CRichEditCtrl().SetEventMask(),/ 同时将 ENM_CHANGE 标志“或”运算到掩码中。/ TODO: 在此添加控件通知处理程序代码CString strText; / TEXTMETRIC tm;strText.Format(L%d,m_edit2.GetLineCount();m_linenum.SetSel(0,-1);m_linenum.ReplaceSel(strText);strText.Format(L%d,m_edit2.GetWindowTextLengthW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论