vc最新修正版.docx

上传人:b****6 文档编号:7063316 上传时间:2023-01-16 格式:DOCX 页数:17 大小:208.40KB
下载 相关 举报
vc最新修正版.docx_第1页
第1页 / 共17页
vc最新修正版.docx_第2页
第2页 / 共17页
vc最新修正版.docx_第3页
第3页 / 共17页
vc最新修正版.docx_第4页
第4页 / 共17页
vc最新修正版.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

vc最新修正版.docx

《vc最新修正版.docx》由会员分享,可在线阅读,更多相关《vc最新修正版.docx(17页珍藏版)》请在冰豆网上搜索。

vc最新修正版.docx

vc最新修正版

问题15

函数名

功能

参数含义

Rectangle(intx1,inty1,intx2,inty2

画一个矩形

(x1,y1)为该矩形的左上角坐标,(x2,y2)为该矩形的右下角坐标

RoundRect(intx1,inty1,intx2,inty2,intx3,inty3)

画一个圆角矩形

(x1,y1)为矩形的左上角坐标,(x2,y2)为矩形的右下角坐标,x3指定该圆角的椭圆的宽度,x4指定该圆角的椭圆的高度

Polygon(LPPOINTlpPoints,intnCount)

画一个多边形

lpPoints是指向保存多边形顶点的数组指针,nCount是指定多边形顶点数组中的顶点数

PolyPolygon(LPPOINTlpPoints,LPINTlpPolyCounts,intnCount)

创建一个或多个多边形

lpPoints是指向保存多边形顶点的数组指针,多边形的顶点数保存在lpPolyPoints所指向的数组中,nCount则指定多边形的边数

Ellipse(intx1,inty1,intx2,inty2)

画一个椭圆

(x1,y1)为椭圆外接矩形的左上角坐标,(x2,y2)为椭圆外接矩形的右下角坐标

Pie(intx1,inty1,intx2,inty2,intx3,inty3,intx4,inty4)

画一个扇形

(x1,y1)为该圆弧外接矩形的左上角坐标,(x2,y2)为该圆弧外接矩形的右下角坐标,圆弧中心与点(x3,y3)所构成的射线与为该圆弧的交点成为圆弧的起始点,但该点并不位于圆弧上,圆弧中心与点(x4,y4)所构成的射线与为该圆弧的交点成为圆弧的终点,但该点也不位于圆弧上

Draw3dRect(intx,inty,intcx,intcy,COLORREFclrTopLeft,COLORREFclrBottomRight)

画一个三维矩形

(x,y)为三维矩形的左上角坐标,cx指定该三维矩形的宽度,cy指定该三维矩形的高度,clrTopLeft指定该三维矩形的上边与左边的颜色,clrBottomRight指定该三维矩形的底边与右边的颜色

Chord(intx1,inty1,intx2,inty2,intx3,inty3,intx4,inty4)

画弦

(x1,y1)为该弦所对应的椭圆弧的外接矩形的左上角坐标,(x2,y2)为该弦所对应的椭圆弧的外接矩形的右下角坐标,圆弧中心与点(x3,y3)所构成的射线与为该圆弧的交点成为圆弧的起始点,但该点并不位于圆弧上,圆弧中心与点(x4,y4)所构成的射线与为该圆弧的交点成为圆弧的终点,但该点也不位于圆弧上

都是"该圆弧"吗(已修改)

问题16

图7-2TestFont程序的运行结果

有关程序的几点说明

(1)OnDraw函数:

对于绘制图形或者文本里,一般只需要在CView类的派生类的OnDraw成员函数中加入绘图代码就可以了。

OnDraw函数会在窗口需要重绘时自动被调用,传入的参数CDC*pDC对应的就是DC环境。

使用OnDraw的优点在于当你使用打印功能的时候,OnDraw的DC环境将会是打印机的绘图环境,使用打印预览时传入的是一个称为CPreviewDC的绘图环境,所以你只需要一份代码就可以完成窗口/打印预览/打印机绘图三重功能。

利用Windows的设备无关性和微软为打印预览所编写的上千行代码你可以很容易的完成一个具有所见即所得的软件。

(2)输出文字一般使用CDC:

:

BOOLTextOut(intx,inty,constCString&str)和CDC:

:

intDrawText(constCString&str,LPRECTlpRect,UINTnFormat)两个函数,对TextOut来讲只能输出单行的文字,而DrawText可以指定在一个矩形中输出单行或多行文字,并且可以规定对齐方式和使用何种风格。

nFormat可以是多种以下标记的组合(利用

位或操作)以达到选择输出风格的目的。

是“异或”吗,不是“异或”!

是“位或”

问题17

MFC执行打印工作的步骤

●显示Print对话框

●创建一个与当前打印机设置相匹配的设备上下文(CDC)对象。

●设置要打印的页数

●调用CDC:

:

StartDoc开始打印

●用CDC:

:

StartPage开始打印一页

●调用视图的OnDraw()方法打印输出一页内容

●用CDC:

:

EndPage结束一页的打印

●循环输出全部内容是调用视图的某个函数做打印的清理

●用CDC:

:

EndDoc结束打印工作吗?

请注明具体的函数!

由多个函数共同完成,分别是“OnEndPrinting()”,“DestroyWindow()”,“Detach()”,不方便写。

●视图作打印的清理工作

例7.5:

修改Graph程序中的预览及打印功能,其步骤如下

问题18

(5)有关程序的几点说明

◆OnPrint完成真正的打印一页文档的工作。

它把一个打印机设备上下文传给OnDraw,由OnDraw负责打印输出。

可以把那些适合于打印但是不适合于屏幕输出的工作,如打印页眉和页脚,放在OnPrint()的重载中完成,然后再调用OnDraw完成打印和显示都需要的工作。

上面的程序在OnPrint中加入了打印页眉和页脚的代码。

OnPrint不是由AppWizard自动生成的,首先要用ClassWizard为CGraphView增加OnPrint()函数。

然后添加绘图程序的特殊打印代码。

OnPrint()首先根据CPrintInfo类型的pInfo中m_nCurPage(保存当前打印页号信息)判断当前打印的是不是第一页。

如果是第一页,就打印输出封面。

否则,首先调用PrintPageHeader打印页眉。

然后用SetWindowOrg调整打印输出原点位置。

m_rectDraw又是CPrintInfo结构的一个重要数据成员,它保存的是打印输出的矩形边界。

最后将与打印机匹配的设备上下文传给OnDraw,由OnDraw在打印机上输出。

注意这里使用的映射模式为MM_LOENGLISH,它的y轴方向是向上递增的。

◆PrintTitlePage打印输出文档的封面。

它首先定义一种逻辑字体,设置逻辑字体属性,然后由调用CreateFontIndirect由逻辑字体创建字体。

SetTextAlign(TA_CENTER)将文本设置为居中输出。

然后调用TextOut在打印矩形m_rectDraw上输出封面。

◆PrintPageHeader在页眉位置输出文件名,然后从m_rectDraw扣除页眉的大小。

◆框架的打印文档功能是从OnPreparePrinting(CPrintInfo*pInfo)开始的,在缺省的情况下,它只是简单的调用视图的DoPreparePrinting()函数。

DoPreparePrinting()显示Print对话框,并创建与打印机相匹配的设备上下文。

如果要想改变打印机初始设置,可以在这里改。

缺省设置下,使用1作为第一页编号(注意:

打印的页号是从1开始编号而不是0),用0xFFFF作为文档的最后一页编号。

因为OnDraw要求分页打印输出,因此要在这里设置打印页数。

要设置打印页数,可以调用CPrintInfo:

:

SetMaxPage(nMaxPage)。

同时还将预览页数也设置为若干页。

是OnDraw函数吗 ,是 

◆DoPreparePrinting()函数显示Print对话框。

返回时,CPrintInfo结构包含了用户所指定的值,包括起止页号、最大页号、最小页号等。

  ◆OnBeginPrinting()函数在OnPreparePrinting()函数被调用之后,实际打印之前调用。

OnBeginPrinting()函数用于分配GDI资源,这里使用缺省行为。

  ◆OnPrepareDC用作屏幕显示时,在绘图前调整DC。

在用于打印时,OnPrepareDC也完成类似功能。

  ◆为了有个更好的预览效果,可在OnDraw()函数中加入语句pDC->SetMapMode(MM_LOENGLISH);

pDC->SetViewportOrg(200,300);

(6)重新编辑后的运行结果如图7-4所示

图7-4Graph程序的预览界面

问题19

表8-1

控件

功能

对应控件类

静态正文(StaticText)

显示正文,一般不能接受输入信息。

CStatic

图片(Picture)

显式位图、图标、方框和图元文件,一般不能接受输入信息。

CStatic

编辑框(EditBox)

输入并编辑正文,支持单行和多行编辑。

CEdit

命令按钮(CommandButton)

响应用户的输入,触发相应的事件。

CButton

检查框(CheckBox)

用作选择标记,可以有选中、不选中和不确定三种状态。

CButton

单选按钮(RadioButton)

用来从两个或多个选项中选中一项。

CButton

组框(GroupBox)

显示正文和方框,主要用来将相关的一些控件聚成一组。

CButton

列表框(ListBox)

显示一个列表,用户可以从该列表中选择一项或多项。

CListBox

组合框(ComboBox)

是一个编辑框和一个列表框的组合。

分为简易式、下拉式和下拉列表式。

CComboBox

滚动条(ScrollBar)

主要用来从一个预定义范围值中迅速而有效地选取一个整数值。

CScrollBar

 

是“分组框”吗?

是“分组框”,也叫“组框”是CommandButton吗?

是CommandButton

问题20

(3)利用ResourceView编辑对话框

在ResourceView上选中Dialog,在其上单击鼠标右键,选中插入Dialog,将生成一个对话框。

在该对话框中单击鼠标右键,并选择属性,将出现如图8-3所示的窗口:

中文版?

图8-3对话框属性

将该对话框的ID更改为:

IDD_TEXT_PROP,标题更改为:

模式对话框,根据表8-3的信息,编辑如图8-4所示的对话框。

表8-3模式对话框控件属性表

控件类型

ID

标题

其它属性

静态文本(文本)

缺省

文本

缺省

编辑框(文本)

IDC_EDIT_TEXT

缺省

组合框(位置)

缺省

位置

缺省

静态文本(X坐标)

缺省

 

缺省

编辑框(X坐标)

IDC_EDIT_X

缺省

微调按钮(X坐标)

IDC_SPIN_X

缺省

静态文本(Y坐标)

缺省

 

缺省

编辑框(Y坐标)

IDC_EDIT_Y

缺省

微调按钮(Y坐标)

IDC_SPIN_Y

缺省

按钮(确定)

ID_OK

确定

缺省

按钮(取消)

ID_CANCEL

取消

缺省

图8-4模式对话框

◆检查对话框的Tab顺序中文版?

从对话框编辑器的布局菜单中选择Tab顺序,然后按下图设置Tab键顺序。

按图8-5所示的顺序单击每一个控件,然后再按下Enter键。

图8-5Tab键的顺序

问题21中文版?

有后面这个命令吗?

(11)创建和运行TestDialog.exe应用程序,其结果如图8-10所示。

选择组建菜单中的执行(TestDialog.exe),或者直接按下“Ctrl+F5”快捷键,再或者直接单击工具栏上的ExecuteProgram按钮,即可创建和运行TestDialog.exe应用程序。

然后在弹出的窗口中,选择测试菜单的文本测试对话框,就会弹出标题为“模式对话框”的模式对话框的窗口,在其中输入具体的内容后,点击确定后就会看见在你设置的位置输出了相应的文本。

而且,你会发现,当该对话框处于活动状态时,你不能在该项目的其他窗口进行工作。

图8-10TestDialog程序的运行结果

问题22

8.4.4CFindReplaceDialog类

图8-21替换对话框(图也已更换)

由于查找/替换对话框是非模式对话框,它们的创建方式与其它四类公用对话框不同。

CFindReplaceDialog对象是用new操作符在堆中创建的,而不是象普通对话框那样以变量的形式创建。

要启动查找/替换对话框,应该调用CFindReplaceDialog:

:

Create函数,而不是DoModal函数。

Create函数的声明是

BOOLCreate(BOOLbFindDialogOnly,LPCTSTRlpszFindWhat,LPCTSTRlpszReplaceWith=NULL,DWORDdwFlags=FR_DOWN,CWnd*pParentWnd=NULL);

当参数bFindDialogOnly的值为TRUE时,创建的是Find对话框,为FALSE时创建的是Replace对话框。

参数lpszFindWhat指定了要搜索的字符串,lpszReplaceWith指定了用于替换的字符串。

dwFlags用来设置对话框,其缺省值是FR_DOWN(向下搜索),该参数可以是几个FR_XXX常量的组合,用户可以通过该参数来决定诸如是否要显示区分大小写、仅全词匹配检查框等设置。

参数pParentWnd指明了对话框的父窗口或拥有者窗口。

中文还是英文?

问题23

CEditView类自动实现了查找/替换对话框的功能,但MFCAppWizard并未提供相应的菜单命令。

读者可以在编辑菜单中加入查找...和替换...两项,并令其ID分别为ID_EDIT_FIND和ID_EDIT_REPLACE,则Find/Replace对话框的功能就可以实现。

8.4.5CPrintDialog类前面讲了吗?

菜单是英文的还是中文的?

问题24

表8-8CPrintDialog的辅助成员函数

函数名

用途

GetCopies

返回要求的拷贝数。

GetDefaults

在不打开对话框的情况下返回缺省打印机的缺省设置,返回的设置放在m_pd数据成员中。

GetDeviceName

返回一个包含有打印机设备名的CString对象。

GetDevMode

返回一个指向DEVMODE结构的指针,用来查询打印机的设备初始化信息和设备环境信息。

GetDriverName

返回一个包含有打印机驱动程序名的CString对象。

GetFromPage

返回打印范围的起始页码。

GetToPage

返回打印范围的结束页码。

GetPortName

返回一个包含有打印机端口名的CString对象。

GetPrinterDC

返回所选打印设备的一个HDC句柄。

PrintAll

若要打印文档的所有页则返回TRUE。

PrintCollate

若用户选择了校对拷贝检查框(需要校对打印拷贝)则返回TRUE。

PrintRange

如果用户要打印文档的一部分页,则返回TRUE。

PrintSelection

若用户想打印当前选择的部分文档,则返回TRUE。

中文版?

 

问题25

(12)编写CTestDialogDoc:

:

OnFileSaveAs()函数

voidCTestDialogDoc:

:

OnFileSaveAs()

{是不是FileSave?

//TODO:

Addyourcommandhandlercodehere步骤(11)和步骤(12)都存在这种问题

(11)编写CTestDialogDoc:

:

OnFileOpen()函数

voidCTestDialogDoc:

:

OnFileOpen()

CFileDialogdlg(FALSE);

intret=dlg.DoModal();

if(ret==IDOK)

{

CStringpathName=dlg.GetPathName();

CString文件Name=dlg.Get文件Name();

chartbuf[120];

sprintf(tbuf,"The%s文件in%sis保存d!

",

文件Name,pathName);

AfxMessageBox(tbuf);

}

}

(13)创建和运行程序。

选择“测试”菜单中的“字体对话框”,将弹出如图8-25所示的对话框,利用该对话框,可对字体进行设置。

图8-25字体对话框

问题26

图中为电子通讯类!

请换图(已换图)

(11)创建和运行SaleList.exe应用程序,选择购买计算机类的"WindowsXP使用指南(45元)和“VisualC++类库大全(62元)”,点击总数按钮,结果如图8-26所示。

图8-26书籍商店对话框

 

问题27

第八章小结

对话框的设计包括对话框模板的设计和对话框类的设计。

对话框模板的设计是通过模板编辑器来完成的。

对话框类的设计可借助建立类向导来完成,这包括创建CDialog类的派生类,为对话框类增加与控件对应的成员变量,增加控件通知消息的处理函数等。

对话框的数据成员的初始化工作一般在其构造函数中完成,而对话框和控件的初始化是在OnInitDialog函数中完成的。

模态对话框拥有自己的消息循环,它垄断了用户的输入。

模态对话框对象是以变量的形式构建的,CDialog:

:

DoModal用来启动一个模态对话框,在对话框关闭后该函数才返回。

如果用户按下了“确定”按钮确认设置,那么DoModal返回IDOK,若用户按下了“取消”按钮取消设置,则DoModal返回IDCANCEL。

是“取消”还是CANCEL

是“确定”还是OK

 

问题35

表11-2在MFC扩展DLL中的宏应该是半字线吧?

是半字线

定义

AFX_CLASS_IMPORT

_declspec(dllexport)

AFX_API_IMPORT

_declspec(dllexport)

AFX_DATA_IMPORT

_declspec(dllexport)

AFX_CLASS_EXPORT

_declspec(dllexport)

AFX_API_EXPORT

_declspec(dllexport)

AFX_DATA_EXPORT

_declspec(dllexport)

AFX_EXT_CLASS

#ifdef_AFXEXT

 AFX_CLASS_EXPORT

#else

 AFX_CLASS_IMPORT

AFX_EXT_API

#ifdef_AFXEXT

 AFX_API_EXPORT

#else

 AFX_API_IMPORT

AFX_EXT_DATA

#ifdef_AFXEXT

 AFX_DATA_EXPORT

#else

 AFX_DATA_IMPORT

问题

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学反思汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1