windows程序设计实验指导书3GDI编程正确解析Word格式.docx

上传人:b****8 文档编号:22960049 上传时间:2023-02-06 格式:DOCX 页数:21 大小:35.90KB
下载 相关 举报
windows程序设计实验指导书3GDI编程正确解析Word格式.docx_第1页
第1页 / 共21页
windows程序设计实验指导书3GDI编程正确解析Word格式.docx_第2页
第2页 / 共21页
windows程序设计实验指导书3GDI编程正确解析Word格式.docx_第3页
第3页 / 共21页
windows程序设计实验指导书3GDI编程正确解析Word格式.docx_第4页
第4页 / 共21页
windows程序设计实验指导书3GDI编程正确解析Word格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

windows程序设计实验指导书3GDI编程正确解析Word格式.docx

《windows程序设计实验指导书3GDI编程正确解析Word格式.docx》由会员分享,可在线阅读,更多相关《windows程序设计实验指导书3GDI编程正确解析Word格式.docx(21页珍藏版)》请在冰豆网上搜索。

windows程序设计实验指导书3GDI编程正确解析Word格式.docx

HS_FDIAGONAL

HS_HORIZONTAL

HS_VERTICAL

为对话框类添加构造函数和变量:

C*Dlg(C*View*pView);

G*View*m_pView;

C*Dlg:

:

C*Dlg(C*View*pView)

{

m_pView=(C*View*)pView;

}

//重载消息

voidC*Dlg:

PostNcDestroy()

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

//用于在无模式对话框关闭时自动释放堆空间

deletethis;

CDialog:

PostNcDestroy();

//通过“颜色”通用对话框设置画笔颜色

OnButtonPencolor()

Addyourcontrolnotificationhandlercodehere

CColorDialogdlgColor;

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

m_pView->

m_lPen.lopnColor=dlgColor.GetColor();

Invalidate();

}

//通过“颜色”通用对话框设置画刷颜色

OnButtonBrucol()

m_lBrush.lbColor=dlgColor.GetColor();

//通过“字体”通用对话框设置字体属性

OnButtonFont()

//声明一个“字体”通用对话框对象

CFontDialogdlg;

//定义“字体”通用对话框的初值

dlg.m_cf.lpLogFont=&

(m_pView->

m_lFont);

dlg.m_cf.rgbColors=m_pView->

m_cFont;

dlg.m_cf.Flags|=CF_INITTOLOGFONTSTRUCT;

//打开“字体”通用对话框,若单击了“确定”按钮

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

//获取所选择的字体属性

dlg.GetCurrentFont(&

m_lFont));

//获取所选择的字体颜色

m_cFont=dlg.GetColor();

//重画窗口

BOOLC*Dlg:

OnInitDialog()

OnInitDialog();

Addextrainitializationhere

//控件必要的初始化

m_ctrlSpin.SetRange(1,1000);

m_ctrlSpin.SetBase(10);

m_ctrlSpin.SetPos

(1);

m_ctrlPS.SetCurSel(0);

m_ctrlMM.SetCurSel(6);

m_ctrlHBS.SetCurSel(0);

m_ctrlBS.SetCurSel(0);

returnTRUE;

//returnTRUEunlessyousetthefocustoacontrol

//EXCEPTION:

OCXPropertyPagesshouldreturnFALSE

OnApply()

UpdateData();

//调用视图类的方法将图形属性设置变量传过去

m_pView->

OnApply();

OnOK()

Addextravalidationhere

//也调用视图类的方法将图形属性设置变量传过去

OnOK();

2、在View类中添加数据成员:

intm_nMapMode;

//映射模式

LOGBRUSHm_lBrush;

//用来交互设置CDC画刷属性的逻辑画刷

LOGPENm_lPen;

//用来交互设置CDC画笔属性的逻辑画笔

COLORREFm_cFont;

//用来交互设置CDC字体颜色

LOGFONTm_lFont;

//用来交互设置CDC字体属性的逻辑字体

//将字符串变量与整形变量之间建立映射关系,用于对话框的数据交互

CMap<

int,int,CString,CString>

m_mapMode;

m_mapPen;

m_mapBrush;

m_mapHBrush;

3、在View类中添加成员函数和实现:

头文件(.h)中所加内容:

//无模式对话框

C*Dlg*pDlg;

//图形属性对话框Apply、OK按钮的消息处理

voidOnApply();

源文件(.cpp)中所加内容:

构造函数中添加内容:

*View:

*View()

addconstructioncodehere

//初始化映射模式的值-字符串映射表

m_mapMode.SetAt(MM_ANISOTROPIC,"

MM_ANISOTROPIC"

);

m_mapMode.SetAt(MM_HIENGLISH,"

MM_HIENGLISH"

m_mapMode.SetAt(MM_HIMETRIC,"

MM_HIMETRIC"

m_mapMode.SetAt(MM_ISOTROPIC,"

MM_ISOTROPIC"

m_mapMode.SetAt(MM_LOENGLISH,"

MM_LOENGLISH"

m_mapMode.SetAt(MM_LOMETRIC,"

MM_LOMETRIC"

m_mapMode.SetAt(MM_TEXT,"

MM_TEXT"

m_mapMode.SetAt(MM_TWIPS,"

MM_TWIPS"

//初始化画笔样式的值-字符串映射表

m_mapPen.SetAt(PS_SOLID,"

PS_SOLID"

m_mapPen.SetAt(PS_DASH,"

PS_DASH"

m_mapPen.SetAt(PS_DOT,"

PS_DOT"

m_mapPen.SetAt(PS_DASHDOT,"

PS_DASHDOT"

m_mapPen.SetAt(PS_DASHDOTDOT,"

PS_DASHDOTDOT"

m_mapPen.SetAt(PS_NULL,"

PS_NULL"

m_mapPen.SetAt(PS_INSIDEFRAME,"

PS_INSIDEFRAME"

//初始化画刷样式的值-字符串映射表

m_mapBrush.SetAt(BS_HATCHED,"

BS_HATCHED"

m_mapBrush.SetAt(BS_SOLID,"

BS_SOLID"

m_mapBrush.SetAt(BS_NULL,"

BS_NULL"

//初始化线模式画笔样式的值-字符串映射表

m_mapHBrush.SetAt(HS_BDIAGONAL,"

HS_BDIAGONAL"

m_mapHBrush.SetAt(HS_CROSS,"

HS_CROSS"

m_mapHBrush.SetAt(HS_DIAGCROSS,"

HS_DIAGCROSS"

m_mapHBrush.SetAt(HS_FDIAGONAL,"

HS_FDIAGONAL"

m_mapHBrush.SetAt(PS_DASHDOTDOT,"

m_mapHBrush.SetAt(HS_HORIZONTAL,"

HS_HORIZONTAL"

m_mapHBrush.SetAt(HS_VERTICAL,"

HS_VERTICAL"

//初始化映射模式,画笔、画刷、字体样式

m_nMapMode=MM_TEXT;

m_lBrush.lbColor=RGB(0,0,0);

m_lBrush.lbHatch=HS_BDIAGONAL;

m_lBrush.lbStyle=BS_HATCHED;

m_lPen.lopnColor=RGB(0,0,0);

m_lPen.lopnStyle=PS_SOLID;

m_lPen.lopnWidth.x=1;

m_cFont=RGB(0,0,0);

m_lFont.lfHeight=30;

m_lFont.lfWidth=0;

m_lFont.lfEscapement=0;

m_lFont.lfOrientation=0;

m_lFont.lfWeight=FW_NORMAL;

m_lFont.lfItalic=FALSE;

m_lFont.lfUnderline=FALSE;

m_lFont.lfStrikeOut=FALSE;

m_lFont.lfCharSet=GB2312_CHARSET;

m_lFont.lfOutPrecision=OUT_STROKE_PRECIS;

m_lFont.lfClipPrecision=CLIP_STROKE_PRECIS;

m_lFont.lfQuality=DRAFT_QUALITY;

m_lFont.lfPitchAndFamily=VARIABLE_PITCH|FF_MODERN;

strcpy(m_lFont.lfFaceName,"

楷体"

//无模式对话框的指针初始化

pDlg=NULL;

C*View:

~*View()

m_mapMode.RemoveAll();

m_mapPen.RemoveAll();

m_mapBrush.RemoveAll();

m_mapHBrush.RemoveAll();

OnDraW()函数中添加显示文字代码:

void*View:

OnDraw(CDC*pDC)

CExm_Menu_ToolBarDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

adddrawcodefornativedatahere

//根据逻辑画笔、画刷设置设备环境画笔、画刷的属性

CBrushbrush;

if(!

brush.CreateBrushIndirect(&

m_lBrush))

return;

CPenpen;

pen.CreatePenIndirect(&

m_lPen))

CBrush*pOldBrush=pDC->

SelectObject(&

brush);

CPen*pOldPen=pDC->

pen);

//画矩形

pDoc->

DrawRects(this,pDC);

//画椭圆

DrawEllipses(this,pDC);

//画多边形

DrawPolygons(this,pDC);

//画直线

DrawLines(this,pDC);

//还原设备环境

pDC->

SelectObject(pOldBrush);

pDC->

SelectObject(pOldPen);

//根据“字体”通用对话框中的选项绘制文本

CFontmyFont;

myFont.CreateFontIndirect(&

CFont*pOldFont=pDC->

myFont);

SetTextColor(m_cFont);

//根据逻辑字体显示文字

TextOut(80,80,"

字体实例,显示选择字体"

//由CreateFont函数直接创建一种显示字体

CFontmyFont1;

myFont1.CreateFont(30,//字符的逻辑高度

0,//字符的平均宽度,缺省值

-450,//文本行顺时针旋转45度

0,

FW_BOLD,//加粗体

TRUE,//不倾斜

TRUE,//加下划线

FALSE,//不加删除线

GB2312_CHARSET,//中文字符集

OUT_OUTLINE_PRECIS,

CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY,

DEFAULT_PITCH|FF_ROMAN,

"

仿宋"

//宋体

pOldFont=pDC->

myFont1);

//将字体颜色设置为兰色

SetTextColor(RGB(0,0,255));

//根据创建字体显示文字

TextOut(200,130,"

自定义仿宋字体"

SelectObject(pOldFont);

voidC*View:

On*()

Addyourcommandhandlercodehere

//无模式对话框的建立

if(pDlg==NULL)

{

pDlg=newC*Dlg(this);

pDlg->

Create(IDD_DIALOG1);

pDlg->

ShowWindow(SW_SHOW);

//由无模式对话框设置设备环境属性

m_lPen.lopnWidth.x=pDlg->

m_nWeight;

POSITIONpos;

pos=m_mapMode.GetStartPosition();

while(pos!

=NULL){

CStringszMapMode;

intnMapMode;

m_mapMode.GetNextAssoc(pos,nMapMode,szMapMode);

if(szMapMode==pDlg->

m_strMode){

if(m_nMapMode!

=nMapMode)

{

m_nMapMode=nMapMode;

m_bSelected=FALSE;

}

break;

}

pos=m_mapPen.GetStartPosition();

CStringszPenStyle;

intnPenStyle;

m_mapPen.GetNextAssoc(pos,nPenStyle,szPenStyle);

if(szPenStyle==pDlg->

m_strPStyle){

m_lPen.lopnStyle=nPenStyle;

pos=m_mapBrush.GetStartPosition();

CStringszBrushStyle;

intnBrushStyle;

m_mapBrush.GetNextAssoc(pos,nBrushStyle,szBrushStyle);

if(szBrushStyle==pDlg->

m_strBStyle){

m_lBrush.lbStyle=nBrushStyle;

pos=m_mapHBrush.GetStartPosition();

CStringszHBrushStyle;

intnHBrushStyle;

m_mapHBrush.GetNextAssoc(pos,nHBrushStyle,szHBrushStyle);

if(szHBrushStyle==pDlg->

m_strHBrush){

m_lBrush.lbHatch=nHBrushStyle;

Invalidate();

4、在文挡类中添加相关绘图对象数据成员和方法:

头文件中:

//存储图形数据的数据结构

CArray<

CRect,CRect>

m_lineObj;

m_rectObj;

m_ellipseObj;

CTypedPtrList<

CObList,CDrawPolygon*>

m_polygonObj;

//向数据集中追加新的数据的函数

voidAddLine(CRectrect);

voidAddRect(CRectrect);

voidAddEllipse(CRectrect);

voidAddPolygon(CDrawPolygon*pPoly);

//画图形的函数

voidDrawLines(C*View*pView,CDC*pDC);

voidDrawRects(C*View*pView,CDC*pDC);

voidDrawEllipses(C*View*pView,CDC*pDC);

voidDrawPolygons(C*View*pView,CDC*pDC);

源文件中:

C*Doc:

~C*Doc()

//释放内存

m_lineObj.RemoveAll();

m_rectObj.RemoveAll();

m_ellipseObj.RemoveAll();

while(!

m_polygonObj.IsEmpty())

deletem_polygonObj.GetHead();

m_polygonObj.RemoveHead();

voidC*Doc:

AddLine(CRectrect)

m_lineObj.Add(rect);

UpdateAllViews(NULL);

AddRect(CRectrect)

m_rectObj.Add(rect);

AddEllipse(CRectrect)

m_ellipseObj.Add(rect);

AddPolygon(CDrawPolygon*pPoly)

pPoly->

m_nID=m_polygonObj.GetCount()+1;

m_polygonObj.AddTail(pPoly);

DrawLines(C*View*pView,CDC*pDC)

CStringstr;

for(inti=0;

i<

m_lineObj.GetSize();

i++)

CRectrect=m_lineObj[i];

pView->

DocToClient(rect);

MoveTo(rect.TopLeft());

LineTo(rect.BottomRight());

str.Format("

%d"

i+1);

TextOut(rect.left+rect.Width()/2+

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

当前位置:首页 > 求职职场 > 简历

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

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