设为首页 加入收藏

TOP

MFC、VC++综合作业题(二)
2016-04-27 17:25:25 】 浏览:2682
Tags:MFC 综合 作业
GE宏指令将消息映射到消息处理函数中。

22、简述模态对话框与非模态对话框的区别?
答:
(1). 模式对话框就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话框也可以处理父窗口.

(2). 模式对话框一般是使用DoModal,而非模式对话框的创建则是使用Create。
(3). 模式对话框的销毁是使用EndDialog,而非模式对话框的销毁是使用DestroyWindow。

二、编写程序(编程题已经打包上传, 点击下载)

1、编写一个应用程序,使用CDC类的TextOut函数在屏幕坐标(100,100)的位置输出“Hello World”字符串?

答:在于OnDraw函数中写入如下代码:

void CMyView::OnDraw(CDC* pDC)

{

CMyDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDC->TextOut(100,100,"Hello World");

}

答:已做

2、编写一个单文档应用程序,程序启动后在用户区显示一个矩形,当用鼠标左键单击用户区后,该矩形变成椭圆形,如果再单击则变成矩形,以此循环。

答:(1)在视图类声明定义成员变量

private:

CRect m_rectRec;

BOOL m_bKey;

(2)在视图类的构造函数中对成员变量进行初始化

CMyView::CMyView()

{

m_bKey=FALSE;

m_rectRec.left=100;

m_rectRec.top=100;

m_rectRec.bottom=400;

m_rectRec.right=400;

}

(3)在视图类鼠标左键按下消息中添加相应代码:

void CMyView::OnLButtonDown(UINT nFlags, CPoint point)

{

if(m_bKey)

m_bKey=FALSE;

else

m_bKey=TRUE;

InvalidateRect(m_rectRec);

CView::OnLButtonDown(nFlags, point);

}

(4)在视图类的OnDraw函数中添加相应代码:

void CMyView::OnDraw(CDC* pDC)

{

CMyDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

if(m_bKey)

pDC->Ellipse(m_rectRec);

else

pDC->Rectangle(m_rectRec);

}

答:已做

3、编写一个单文档应用程序,程序启动后在用户区显示一个椭圆形,每单击鼠标左键一次则圆的颜色会变化一次。

答:(1)在视图类声明定义成员变量

private:

int m_clr1;

int m_clr2;

int m_clr3;

(2)在视图类的构造函数中对成员变量进行初始化

CCIRCLEView::CCIRCLEView()

{

m_clr1=255;

m_clr2=255;

m_clr3=255;

}

(3)在视图类鼠标左键按下消息中添加相应代码:

void CCIRCLEView::OnLButtonDown(UINT nFlags, CPoint point)

{

if(m_clr1>10)

{

m_clr1-=10;

m_clr2-=10;

m_clr3-=10;

}

else

{

m_clr1=255;

m_clr1=255;

m_clr1=255;

}

InvalidateRect(NULL);

CView::OnLButtonDown(nFlags, point);

}

(4)在视图类的OnDraw函数中添加相应代码:

void CCIRCLEView::OnDraw(CDC* pDC)

{

CCIRCLEDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

COLORREF clr=RGB(m_clr1,m_clr2,m_clr3);

CBrush newBrush(clr);

CBrush *oldBrush=pDC->SelectObject(&newBrush);

pDC->Ellipse(20,20,200,200);

pDC->SelectObject(oldBrush);

}

答:已做

4、简单的计算程序界面如下图所示,操作数1对应编辑框控件的ID为 IDC_EDIT1,对应值类型的成员变量m_op1(int);操作数2对应编辑框控件的ID为IDC_EDIT2,对应值类型的成员变量m_op2(int);计算结果对应的编辑框控件的ID 为IDC_EDIT3,对应值类型的成员变量m_result(int)。 假设输入的数为整数,加法按钮的功能是将两操作数相加,并将结果在对应的编辑框IDC_EDIT3显示出来。写出加法按钮对应的代码。

\

void CExDlg::OnButton1()

{

UpdateDate(TRUE); //此处是UpdateData(TRUE);

m_result = m_op1 + m_op2;

UpdateDate(FALSE);

}

void CExDlg::OnButton2()

{

UpdateDate(TRUE);

m_result = m_op1 - m_op2;

UpdateDate(FALSE);

}

答:已做

5、下面是一个基于对话框的应用程序,用来求解一元二次方程的根。当用户在A、B、C 三个编辑框中输入3个参数后,单击计算按钮,将显示出该方程的根。

各控件对应的成员变量见下表:

\

控件ID号

变量类型

变量名

IDC_A_EDIT

int

m_a

IDC_B_EDIT

int

m_b

IDC_C_EDIT

int

m_c

IDC_X1_EDIT

CString

m_x1

IDC_X2_EDIT

Cstring

m_x2

试写出计算按钮的单击消息处理函数。

答:void CEx6_1Dlg::OnButton1()

{

UpdateData();

double disc;

disc=(double)(m_b*m_b-4*m_a*m_c);

if ( fabs(disc)<=1e-6 ) //如果disc等于0

{ m_x1.Format("x1=%6.2f ",-m_b/(2*m_a));

m_x2.Format("x2=%6.2f ",-m_b/(2*m_a));

}

else if ( disc>1e-6 ) //如果disc大于0

{ double x1,x2;

x1=(-m_b-sqrt(disc))/(2*m_a);

x2=(-m_b+sqrt(disc))/(2*m_a);

m_x1.Format("x1=%6.2f",x1);

m_x2.Format("x2=%6.2f",x2);

}

else //如果disc小于0

{

double realpart,imagpart;

realpart=-m_b/(2*m_a);

imagpart=sqrt(-disc)/(2*m_a);

m_x1.Format("x1=%6.2f+%6.2fi",realpart,imagpart);

m_x2.Format("x2=%6.2f-%6.2fi",realpart,imagpart);

}

Upd

首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++学习笔记之四 复合类型1 下一篇LeetCode最常见的面试笔试题总结

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目