• 沒有找到結果。

CMyFigureDoc* pDoc = GetDocument(); 

ASSERT_VALID(pDoc); 

// TODO: add draw code for native data here 

CRect rect;  //定义一个 CRect 类的对象 (本次键入) 

GetClientRect(&rect);  //得到一个视图窗口的矩形边界 

pDC­>SetMapMode(MM_LOMETRIC);  //设定映射模式  pDC­>SetViewportOrg(int(rect.right/2),int(rect.bottom/2));  //设定坐标原点  MyFillRect(pDC,RGB(255,0,0),(0,0),600,400);  //矩形(1)子函数  MyRectangle(pDC,­300,0,0,­500,RGB(100,110,120));  //矩形(2)子函数  MyEllipse(pDC,500,­300,200,RGB(0,255,0));  //圆子函数  MyPolygon(pDC,­350,300,RGB(0,0,255));  //五角星子函数  MyLine(pDC,­600,300,600,­300,4,RGB(255,0,0));  //实直线子函数  MyLine(pDC,­600,­300,600,300,4,RGB(0,255,0));  //实直线子函数)  MyArc(pDC,100,0,800,150,200,4,RGB(0,0,0));  //圆弧线段子函数  MyArc(pDC,­100,0,800,­40,40,4,RGB(0,0,0));  //圆弧线段子函数  } 

编译、连接后,运行该程序,结果如图 3.18 所示。

图 3.18  绘图程序运行结果

综合设计题 

1.设计一个如图 3.19 所示的“显示信息”对话框程序。当单击“确定”按钮后,在右边 的编辑框中显示有关信息。

图 3.19  “显示信息”对话框

(1)首先创建一个对话框程序框架,然后放置各控件,进行属性设计,各文本编辑框和 复选框按表 3.5 连接变量,其余控件不需要连接变量。

表 3.5  与控件连接的变量

控件 标题 变量名 变量类别 变量类型

左文本编辑框 无  m_e1  Value  CString 

右文本编辑框 无  m_e2  Value  CString 

旅游  m_c1  Value  BOOL 

运动  m_c2  Value  BOOL 

复选框

音乐  m_c3  Value  BOOL 

(2) “确定”按钮的消息处理函数: 

void CEx03Dlg::OnButton1()  { 

// TODO: Add your control notification handler code here  UpdateData(TRUE); 

CString s; 

s=m_e1; 

s+= "  爱好  :"; 

if (m_c1) s+= "  旅游  "; 

if (m_c2) s+= "  运动  "; 

if (m_c3) s+= "  音乐  "; 

m_e2=s; 

UpdateData(FALSE); 

2.编写一个进行算术运算的计算器程序,界面如图 3.20 所示。

图 3.20  计算器界面

建立工程文件 calc_mfc,主要的控件 ID 及其对应的变量如表 3.6 所示。

表 3.6  控件及与控件连接的变量

控件 ID  Caption  连接变量名称 变量类型 备注 

IDC_EDIT1  m_dNum  Double(Value) 编辑框 

IDC_BTN_0  0  按钮 

IDC_BTN_1  1  按钮 

IDC_BTN_2  2  按钮 

IDC_BTN_3  3  按钮 

IDC_BTN_4  4  按钮 

IDC_BTN_5  5  按钮 

IDC_BTN_6  6  按钮 

IDC_BTN_7  7  按钮 

IDC_BTN_8  8  按钮 

IDC_BTN_9  9  按钮 

IDC_BTN_DOT  .  按钮 

IDC_BTN_ADD  +  按钮 

IDC_BTN_SUB  ­  按钮 

IDC_BTN_MUL  *  按钮 

IDC_BTN_DIV  /  按钮 

IDC_BTN_SQRT  SQRT  按钮 

IDC_BTN_EQUAL  =  按钮 

IDC_BTN_AC  AC  按钮

(1)在 IDC_EDIT1 属性的样式(Style)选项卡中,将排列文本(Align  text)设置为靠

右(right)。

(2)向 CCalc_mfcDlg 类添加如表 3.7 所示的成员变量。

表 3.7  新增加的成员变量

变量名称 变量类型 变量属性 

m_nDotNo  int  public 

m_nDotSign  int  public 

m_dPre  double  public 

m_dCur  double  public 

m_dNext  double  public 

m_strPre  CString  public  m_strCur  CString  public  m_strNext  CString  public 

(3)在 calc_mfcDlg.cpp 的 OnInitDialog()函数中添加如下代码将变量初始化: 

m_dPre=0; 

m_dCur=0; 

m_dNext=0; 

m_strPre=_T(""); 

m_strCur=_T(""); 

m_strNext=_T(""); 

m_nDotSign=0; 

m_nDotNo=0; 

(4)通过 MFC 的“建立类向导”向 CCalc_mfcDlg 类添加各按钮的 BN_CLICKED 消息 处理函数,如表 3.8 所示。

表 3.8  各按钮对应的消息处理函数

按钮的 ID 值 消息函数名 按钮的 ID 值 消息函数名 

IDC_BTN_0  OnBtn0()  IDC_BTN_8  OnBtn8() 

IDC_BTN_1  OnBtn1()  IDC_BTN_9  OnBtn9() 

IDC_BTN_2  OnBtn2()  IDC_BTN_ADD  OnBtnAdd()  IDC_BTN_3  OnBtn3()  IDC_BTN_SUB  OnBtnSub()  IDC_BTN_4  OnBtn4()  IDC_BTN_MUL  OnBtnMul()  IDC_BTN_5  OnBtn5()  IDC_BTN_DIV  OnBtnDiv()  IDC_BTN_6  OnBtn6()  IDC_BTN_DOT  OnBtnDot()  IDC_BTN_7  OnBtn7()  IDC_BTN_EQUAL  OnBtnEqual() 

(5)因为程序中用到了一些数学函数,所以在  calc_mfcDlg.cpp  开始处添加包含语句 

#include "math.h"。

(6) 在 calc_mfcDlg.cpp 源程序文件的末尾添加公有成员函数 SetNum。 这是为了处理 0~9  这些数字按钮消息,每个消息用自己的值作为参数,调用这个成员函数,代码如下:

void CCalc_mfcDlg::SetNum(int i) 

UpdateData(false);      //更新与变量连接的文本编辑框的值  m_strCur=_T(""); 

在 calc_mfcDlg.h 文件的 CCalc_mfcDlg 类中添加成员函数的声明:void SetNum(int);。 

OnBtn0()~OnBtn9()消息处理函数简单地调用  SetNum  函数即可,如  OnBtn0()函数的代码 如下: 

(7)在 calc_mfcDlg.cpp 源程序文件的末尾添加公有成员函数 process()。

计算器程序的关键是计算的顺序,当按下运算符键(+、­、*、/等)时,它的右操作数还

在菜单编辑器窗口中建立两个菜单项 Clear 和 About,其 ID 分别为 menu_id1 和 menu_id2,如 图 3.21 所示。

图 3.21  “菜单项目属性”对话框 为菜单定义消息处理函数,Clear 的消息处理函数代码为: 

void CCalc_mfcDlg::Onid1()  { 

// TODO: Add your command handler code here  OnBtnAc(); 

About 的消息处理函数代码为: 

void CCalc_mfcDlg::Onid2()  { 

// TODO: Add your command handler code here  CAboutDlg dlg; 

dlg.DoModal(); 

②最后将菜单和对话框关联,方法是右击对话框,选择快捷菜单中的“属性” ,在“对话 属性”窗口中,选择“菜单”列表框中刚才建立的菜单 ID,如图 3.22 所示。

图 3.22  对话框属性窗口 

3.建立一个单文档窗口应用程序 draw_circle,在菜单中增加一个“图形参数设置”菜单 项(如图 3.23 所示),执行该菜单项可以弹出一个对话框设置需要绘制的圆的圆心及填充颜色

(见图 3.24) 。退出对话框后可在文档窗口区绘制出相应的圆。

图 3.23  单文档窗口界面

图 3.24  “参数设置”对话框

(1)创建单文档工程文件 draw_circle,为该窗口添加菜单、对话框资源。

(2)创建对话框类。新创建的对话框应有一个类与之对应并添加到工程中,在此创建  CSetDlg 类。打开新建的对话框,选择“查看”→“建立类向导”菜单,在弹出的对话框中选 择 Creat a new class,在接下来的对话框中输入类名 CSetDlg,单击 OK 按钮。对话框中各控件 及连接变量如表 3.9 所示。

表 3.9  对话框成员及各控件属性

控件  ID 值 属性 连接变量 

X,Y Edit  IDC_X1,IDC_Y1  IDC_Radius 

默认  m_intX1,m_intY1 

m_Radius 

Red Edit  IDC_RED  默认  m_intRed(UINT), 

m_editRed(Control) 

Green Edit  IDC_GREEN  默认  m_intGreen,m_editGreen 

Blue Edit  IDC_BLUE  默认  m_intBlue,m_editBlue 

Red Spin  IDC_SPIN1  选中“自动结伴”及“自动结伴整

数” ,其余默认 

m_spinRed 

Green Spin  IDC_SPIN2  同上  m_spinGreen 

Blue Spin  IDC_SPIN3  同上  m_spinBlue 

(3) 为 CDraw_circleView 视图类 (在 CDraw_circleView.h 文件中) 添加成员变量 (public) :  int m_startx;  //圆心 x 坐标 

int m_starty  //圆心 y 坐标  int m_radius;  //记录圆半径  COLORREF m_color;  //记录圆的填充颜色

(4)为“图形参数设置”菜单项添加消息处理函数 OnSet(注意在 CDraw_circleView.cpp  中添加“#include CSetDlg.h” ),其代码如下: 

void CDraw_circleView::OnSet() 

{  // TODO: Add your command handler code here  CSetDlg dlg;

if((dlg.DoModal())==IDOK){ 

m_color = RGB(dlg.m_intRed, dlg.m_intGreen, dlg.m_intBlue); 

m_start.x = dlg.m_intX1 ;  m_start.y = dlg.m_intY1; 

m_radius = dlg.m_Radius;  //圆半径  } 

Invalidate();  //使视图重画,调用 OnDraw()函数 

(5)修改视图类 OnDraw()函数 

void CDraw_circleView::OnDraw(CDC* pDC){ 

CDraw_circleDoc* pDoc = GetDocument(); 

ASSERT_VALID(pDoc); 

// TODO: add draw code for native data here 

CPen pen(PS_SOLID,0,m_color);  //构造当前颜色的画笔  CPen *oldPen; 

oldPen = pDC­>SelectObject(&pen);  //为 CDC 选中当前画笔  CRect rect(m_start.x ­ m_radius,m_start.y –m_radius, 

m_start.x + m_radius,m_start.y + m_radius); 

pDC­>Ellipse(&rect); 

pDC­>SelectObject(oldPen);} 

4.编写一个对话框程序,设计适当的界面,输入一元二次方程 ax+bx+ = 的系数  a、 c 0 b、c,计算并输出方程的根 x和 x2。 

5.编写一个对话框程序完成字符串转换,转换规则为:大写字母转换成小写;小写字母 转换成大写;换行符和回车符不变;其余字符转换为“*” 。要求在一个文本框中输入一个字符 串,单击“转换”按钮,在另一个文本框中输出转换后的字符串。 

6.设计一个如图 3.25 所示的“显示”对话框。当单击“确定”按钮后,用 AfxMessageBox  函数在窗口中显示相应教师的基本信息。

图 3.25  “显示”对话框界面 

7.编写一个单文档的应用程序,并添加“绘图”菜单及“正弦” 、 “余弦” 、 “正切” 、 “余 切”子菜单,单击绘图子菜单时在文档窗口区绘制出相应的曲线。

相關文件