ateData(FALSE);
}
注意添加
头文件
6、编写一个单文档应用程序,该程序在用户区能以在两个矩形的相交矩形为外接矩形画一个椭圆。(注意:只考虑两个矩形相交的情况,不考虑不相交的情况。)
答:(1)在视图类声明定义成员变量
private:
CRect m_rRect1;
CRect m_rRect2;
(2)在视图类的构造函数中对成员变量进行初始化
CRECTView::CRECTView()
{
m_rRect1.left=50;
m_rRect1.top=50;
m_rRect1.bottom=200;
m_rRect1.right=250;
m_rRect2.left=100;
m_rRect2.top=120;
m_rRect2.bottom=400;
m_rRect2.right=300;
}
(3)在视图类的OnDraw函数中添加相应代码:
void CRECTView::OnDraw(CDC* pDC)
{
CRECTDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int x1,y1,x2,y2;
if(m_rRect1.left
x1=m_rRect2.left;
else
x1=m_rRect1.left;
if(m_rRect1.top
y1=m_rRect2.top;
else
y1=m_rRect1.top;
if(m_rRect1.right
x2=m_rRect1.right;
else
x2=m_rRect2.right;
if(m_rRect1.bottom
y2=m_rRect1.bottom;
else
y2=m_rRect2.bottom;
pDC->Ellipse(x1,y1,x2,y2);
}
答:已做
7、编写一个单文档应用程序,在窗口用户区中绘制一个矩形,用键盘上的上、下、左、右光标键可以使该矩形分别向4个方向移动,(注意:每一次只移动15像素,矩形不能移出屏幕)。
答:(1)在文档类声明定义成员变量
public:
CRect m_rect;
(2)在文档类的构造函数中对成员变量进行初始化
CSample0803Doc::CSample0803Doc()
{
m_rect.left=50;
m_rect.right=150;
m_rect.top=50;
m_rect.bottom=150;
}
(3)在视图类的OnDraw函数中添加相应代码:
void CSample0803View::OnDraw(CDC* pDC)
{
CSample0803Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->Rectangle(pDoc->m_rect);
}
(4)在视图类的OnKeyDown函数中添加相应代码:
void CSample0803View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CSample0803Doc *pDoc=GetDocument();
CRect rt;
GetClientRect(&rt); //获取当前的绘图区域
switch(nChar)
{
case VK_LEFT: //如果按下的是向左的箭头"←"
if(pDoc->m_rect.left>15)
{
pDoc->m_rect.left-=15;
pDoc->m_rect.right-=15;
}
break;
case VK_RIGHT: //如果按下的是向右的箭头"→"
if(pDoc->m_rect.right<=(rt.right-rt.left)-15)
{
pDoc->m_rect.left+=15;
pDoc->m_rect.right+=15;
}
break;
case VK_UP: //如果按下的是向上的箭头"↑"
if(pDoc->m_rect.top>15)
{
pDoc->m_rect.top-=15;
pDoc->m_rect.bottom-=15;
}
break;
case VK_DOWN: //如果按下的是向下的箭头"↓"
if(pDoc->m_rect.bottom<=(rt.bottom-rt.top)-15)
{
pDoc->m_rect.top+=15;
pDoc->m_rect.bottom+=15;
}
break;
}
InvalidateRect(NULL,TRUE); //刷新窗口
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
答:已做
8、简单计算程序界面如下图所示,x对应编辑框控件的ID为 IDC_EDIT1,对应值类型的成员变量m_x(double);y对应编辑框控件的ID为IDC_EDIT2,对应值类型的成员变量m_y(double);z对应的编辑框控件的ID 为IDC_EDIT3,对应值类型的成员变量m_z(double)。乘法按钮的功能是将x,y相乘,除法按钮的功能是将x,y相除,并将结果在z对应的编辑框IDC_EDIT3显示出来。写出乘法按钮和除法按钮对应的代码。
答:void CExDlg::OnButtonMul()
{ UpdateDate(TRUE);
m_z = m_x * m_y;
UpdateDate(FALSE);
}
void CExDlg::OnButtonDiv()
{ UpdateDate(TRUE);
if ( m_y == 0 )
{ MessageBox( “除数不能为0!”);
return;
}
m_z = m_x / m_y;
UpdateDate(FALSE);
}
答:已做
9、设计一个基于对话框的应用程序,如下图所示。要求:单击Color按钮,能弹出通用颜色对话框选取颜色,并用该颜色在屏幕坐标(100,100)位置显示:This is a color example。
写出Color按钮的BN_CLICKED消息处理函数。
答:void CDialog1Dlg::OnColor()
{
COLORREF m_clr;
CColorDialog dlg;
if(dlg.DoModal()==IDOK)
{
m_clr=dlg.GetColor();
CClientDC dc(this);
dc.SetTextColor(m_clr);
dc.TextOut(100,100,"This is a color example。");
}
}
答:已做
10、为学员信息设计一个类CStudent,包含:学号、姓名、出生日期、家庭住址、班级,并使该类可以实现串行化。请写出可以实现要求的CStudent.h和CStudent.cpp文件的内容
//CStudent.h
class CStudent :public CObject {
public:
CString Num;
CString Name;
CTime Birth;
CString Address;
CString Grade;
DECLARE_SERIAL(CStudent) // 使对象可串行化
virtual void Serialize( CArchive & ar ); //重载串行化函数
};
// CStudent.cpp
IMPLEMENT_SERIAL(CStudent,CObject, 0)
void