Visual_C++课程设计-期末试题及答案

  • 格式:doc
  • 大小:53.50 KB
  • 文档页数:5

Visual C++程序设计-期末试题及答案 一、选择题(每题1分,共5分) 1 MFC主要由( )组成。 A. 基础类库、全局函数 B. 基础类库、全局变量、宏 C.基础类库、全局函数、宏D.基础类库全局函数全局变量和宏 2 应用程序对象CProgramApp是程序执行的最重要部分,( )均由其完成。 A.程序的初始化、运行和结束工作 B。消息的发送和执行 C.程序的框架、窗口 D。事件的发生与处理 3 当消息产生时,系统调用CWinApp的( )函数对消息进行解析,并发送到相应的窗口进行处理。 A.Run B Create C TranslateMessage D DispatchMessage 4 对于在屏幕上的绘制,通常使用( )对象,而对于打印机设备上下文,则使用( )对象来完成。 A.CDC,CWindowsDC B。CWindowsDC, CDC C.CWindowsDC,CPaintDC D。CDC,CPaintDC 5 ( )对象表示一个点的位置,( )对象表示相对的距离的尺寸,()对象表示一个矩形区域。 A.CPoint类,CRect类,CSize类 B。CSize类 ,CPoint类,CRect类 C.CRect类,CSize类,CPoint类 D。CPoint类,CSize类,CRect类 二、填空题(每空1分,共20分) 1 消息是应用程序初始化时,Windows发送给视图的第一条消息。 2 用于定时向应用程序发送消息,使程序动作在指定的时间间隔周期性执行。 3 对话框是由一个特殊的、可以接收消息的 ,它具有 的基本特性。 4 对话框主要由两部分组成: 和 。 5 Visual C++ 6.0集成开发环境中提供的资源有 、 、 、 、 、 和 等。 6 CGdiObject及其派生类封装了Windows提供的绘图工具有 , , 和 等。 7 文档是数据的载体,管理及维护数据,支持并实现数据的 操作。视图是数据的表现,视图实现了数据的 ,并对数据的 提供了支持。

三、简答题(30分) 1 Microsoft Windows MFC库应用程序的具体启动步骤?(10分) 2什么是序列化?(5分) 3 CRect,CPoint和CSize类的数据成员分别是什么?(5分) 4当在CEx06aDialog调用DoModal函数时,请写出”幕后”引起的一系列动作? (10分)

四、编程题(共45分) 如何判断一个点(CPoint point)是否在椭圆内,椭圆的外接矩形为CRect m_rectEllipse,请写出相应的代码?(10分) 如果Cat类中包含三个数据成员,如下所示: (10分) public: CString m_strName; int m_nHeight; int m_nWeight 如何编写Cat类的Serialize函数? void Cat::Serialize(CArchive& ar) { …… } 3编程实现在对话框的静态控件(其ID为IDC_STATIC1)中画一个灰色的圆?(10分) void CMyDialog::OnPaint() { …… } 如何在视图类的成员函数中对状态栏的第一个窗格里面写入:”I love VC++!”?(5分) 编程实现在视图(CMyView)中点击鼠标左键弹出一个无模式对话框(CMyDialog),点击无模式对话框中的OK按钮,希望通过对话框向视图发送一个用户自定义消息WM_GOODBYE, 然后视图响应这一个消息,关闭无模式对话框并在视图窗口中画出一个矩形。分别在对话框和视图的文件中写相应的代码。(10分) 答案

一、选择题(每题1分,共5分) 1D 2A 3A 4B 5D 二、填空题(每空1分,共20分) 1. WM_CREATE 2. 定时器消息WM_TIMER 3. 窗口,窗口 4。 对话框资源,对话框类 5 对话框,菜单,加速键,字符串表,位图,图标,光标 6 位图,笔,画刷,字体 7 序列化,显示,编辑 三、简答题(30分) 1 (10分) 1) Windows将程序装入内存. 2) 构造全局对象theApp. (当程序被载入时,所有全局对象都会立刻被创建.) 3) Windows调用全局函数WinMain, 它是类库的一部分. (WinMain 相当于非Windows应用程序的main函数,二者都是主程序的入口点.) 4) WinMain 自动搜索CWinApp派生类的唯一实例. 5) WinMain 调用theApp 的InitInstance 函数,该函数在应用程序派生类中被重载. 6) 被重载的InitInstance 函数启动文档的载入以及主框架和视图窗口的显示处理过程. 7) WinMain 调用theApp 的Run 成员函数,启动窗口消息和命令消息的分发处理过程. 2 (5分)序列化是指对象可以被持续,即当程序退出时它们可被存盘,而当程序重启时它们又可恢复.对象的这种存盘和恢复过程就称为”序列化”. 3 (5分) CRect left, top, right, bottom CPoint x, y CSize cx, cy 4 (10分) CDialog::DoModal CEx06aDialog::OnInitDialog …其他的初始化… CDialog::OnInitDialog CWnd::UpdateData(FALSE) CEx06aDialog::DoDataExchange 用户输入数据… 用户单击OK按钮 CEx06aDialog::OnOK …其他的确认处理… CDialog::OnOk CWnd::UpdateData(TRUE) CEx06aDialog::DoDataExchange CDialog::EndDialog(IDOK) 四、编程题(共45分) 1(10分) CRgn rgn; rgn.CreateEllipticRgnIndirect(m_rectEllipse); if(rgn.PtInRegion(point)) {…} 2 (10分) if (ar.IsStoring()) { ar << m_strName << m_nHeight<< m_nWeight; } else { ar >> m_strName >> m_nHeight>> m_nWeight } 3 (10分) CWnd* pWnd=GetDlgItem(IDC_STATIC1); CDC* pControlDC=pWnd->GetDC(); pWnd->Invalidate(); pWnd->UpdateWindow(); pControlDC->SelectStockObject(GRAY_BRUSH); pControlDC->Ellipse(CRect(0,0,10,10)); 4 (5分) CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd; CStatusBar* pStatus=&pFrame->m_wndStatusBar ; pStatus->SetPaneText(0,” I love VC++!”);

5 (10分) 1)在CMyDialog.h中,加入用户自定义消息 #define WM_GOODBYE WM_USER + 5 和以下成员: private: CView* m_pView; public: CMyDialog (CView* pView); BOOL Create(); 2)在CMyDialog.cpp中,加入 CMyDialog:: CMyDialog (CView* pView) // modeless constructor { m_pView = pView; }

BOOL CMyDialog::Create() { return CDialog::Create(CMyDialog::IDD); } void void CMyDialog::OnOK() // not really a message handler { if (m_pView != NULL) { // modeless case -- do not call base class OnOK UpdateData(TRUE); m_pView->PostMessage(WM_GOODBYE, IDOK); } else { CDialog::OnOK(); // modal case } } 3)在CMyView.h中,加入 class CMyDialog; private: CMyDialog* m_pDlg;

afx_msg LRESULT OnGoodbye(WPARAM wParam, LPARAM lParam); 4)在CMyView.cpp中,加入 CMyView:: CMyView () { m_pDlg = new CMyDialog(this); }

CMyView::~ CMyView () { delete m_pDlg; // destroys window if not already destroyed } void CMyView::OnDraw(CDC* pDC) { pDC->TextOut(0, 0, "Press the left mouse button here."); } void CMyView::OnLButtonDown(UINT nFlags, CPoint point) { // creates the dialog if not created already if (m_pDlg->GetSafeHwnd() == 0) { m_pDlg->Create(); // displays the dialog window } }

#include "MyDialog.h" ON_MESSAGE(WM_GOODBYE, OnGoodbye) LRESULT CMyView::OnGoodbye(WPARAM wParam, LPARAM lParam) { m_pDlg->DestroyWindow(); CClientDC dc(this); dc.Rectangle(0,0,100,100); return 0L;