第一范文网 - 专业文章范例文档资料分享平台

课程设计论文-基于MFC的绘图软件的设计与实现 (4)

来源:用户分享 时间:2020-06-24 本文由吟鸢 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

BYTE tmStruckOut; BYTE tmFirstChar; BYTE tmLastChar; BYTE tmDefaultChar; BYTE tmBreakChar; BYTE tmPitchAndFamily; int tmOverhang; int tmDigitizedAspectX; int tmDigitizedAspectY; } TEXTMETRIC; CFont fontText; CString strText; CSize sizeText;

ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,

DEFAULT_PITCH | FF_ROMAN, \调用CFont::CreateFont函数,建立GDI的字体对象,参数1和2是字体的高度和宽度,最后一个参数是字体的名称

CFont* pOldFont = (CFont*) pDC->SelectObject(&fontText);//将新字体选进

设备,并返回指向前一次被选对象的指针。作用保存原来的对象,以便完成任务时恢复它

pDC->GetTextMetrics(&tm);//参数是指向TEXTMETRIC结构的指针,得到当前字体的属

性,

strText.FormanPoint t(\磅 WINDOWS 中文字体范例 1234567890\

sizeText = pDC->GetTextExtent(strText); pDC->TextOut(0, nPos, strText);

pDC->SelectObject(pOldFont);//恢复原来的对象 nPos -= tm.tmHeight + tm.tmExternalLeading; }

4)编辑CMy82View::OnDraw函数

- 16 -

void CMy82View::OnDraw(CDC* pDC) {

int nPosition = 0;

for (int i = 12; i <= 24; i += 2) { ShowFont(pDC, nPosition, i); }

三、图形绘画程序的具体实现

(一)在视类中添加成员变量并初始化

class CDrawView : public CView {// Implementation public: };

int m_nMaxX; // 用于保存屏幕尺寸 int m_nMaxY;

CDC * m_pMemDC; //内存DC

CBitmap * m_pBitmap; // 与显示DC的位图兼容的位图 int m_nDrawType; //画图类型 int m_nLineWidth; //线宽

COLORREF m_cLineColor; //线的颜色 COLORREF m_cFillColor; //填充颜色 bool m_bDrawing; //是否正在画图 CPoint m_ptStart; //画图的起始点 CPoint m_ptOld; //保存鼠标临时点 virtual ~CDrawView();

( 1 )在构造函数中初始化部分成员变量

CDrawView::CDrawView() {

// TODO: add construction code here

m_pMemDC = new CDC; //构造内存DC对象

- 17 -

}

m_pBitmap = new CBitmap; // 构造位图对象

m_nDrawType = -1; //程序启动时没有选中绘图类型,不处于绘图状态 m_nLineWidth = 1; //线宽初始为1个像素

m_cLineColor = RGB(0,0,0); //线的颜色初始为黑色 m_cFillColor = RGB(0,0,255); //填充色初始为蓝色 m_bDrawing = false; //程序启动时不处于画图状态

( 2 )在析构造函数中释放指针变量占用的内存

CDrawView::~CDrawView() {

delete m_pMemDC; //删除内存DC对象 delete m_pBitmap; //删除位图对象

}

( 3 )为视类添加WM_CREATE消息处理函数

int CDrawView::OnCreate(LPCREATESTRUCT lpCreateStruct {

if (CView::OnCreate(lpCreateStruct) == -1)

return -1;

// TODO: Add your specialized creation code here

m_nMaxX = GetSystemMetrics(SM_CXSCREEN);//得到屏幕宽度 m_nMaxY = GetSystemMetrics(SM_CYSCREEN); //得到屏幕高度 CDC * pDC = GetDC(); //获得显示DC的指针

m_pMemDC->CreateCompatibleDC(pDC); //创建显示DC的兼容内存DC //创建与显示DC的“位图”兼容的位图,位图和屏幕一样大

m_pBitmap->CreateCompatibleBitmap(pDC, m_nMaxX, m_nMaxY); //将兼容位图选进内存DC,pOldBitmap用来保存内存DC中的原位图

CBitmap * pOldBitmap = m_pMemDC->SelectObject(m_pBitmap);// 创建一个白色画刷 CBrush brush;

brush.CreateStockObject(WHITE_BRUSH);

- 18 -

//将选进内存DC的位图整个填上白色(与窗口底色一致) }

CRect rect(-1,-1,m_nMaxX, m_nMaxY); m_pMemDC->FillRect(rect,&brush); //恢复内存DC中的原有位图

m_pMemDC->SelectObject(pOldBitmap); ReleaseDC(pDC); // 释放显示DC return 0;

(二)在视类中添加菜单消息响应函数

1、在视图类中添加 “直线”、“矩形”、“椭圆”、“填充”4个菜单项的消息响应函数和“线宽”菜单中5个菜单项的消息响应函数 DrawView.h文件

afx_msg void OnSelectDrawType(UINT nID);

afx_msg void OnUpdateSelectDrawType(CCmdUI * pCmdUO); afx_msg void OnDrawLineWidth(UINT nID);

afx_msg void OnUpdateDrawLineWidth(CCmdUI * pCmdUO); DrawView.cpp文件

ON_COMMAND_RANGE(ID_DRAW_LINE,ID_DRAW_FILL, OnSelectDrawType) ON_UPDATE_COMMAND_UI_RANGE(ID_DRAW_LINE,ID_DRAW_FILL, OnUpdateSelectDrawType)

ON_COMMAND_RANGE(ID_DRAW_LINEWIDTH_ONE,ID_DRAW_LINEWIDTH_FIVE, OnDrawLineWidth)

ON_UPDATE_COMMAND_UI_RANGE(ID_DRAW_LINEWIDTH_ONE,ID_DRAW_LINEWIDTH_FIVE,OnUpdateDrawLineWidth)

void CDrawView::OnSelectDrawType(UINT nID) { }

m_nDrawType = nID - ID_DRAW_LINE;

- 19 -

void CDrawView::OnUpdateSelectDrawType(CCmdUI * pCmdUI) { }

void CDrawView::OnDrawLineWidth(UINT nID) { }

void CDrawView::OnUpdateDrawLineWidth(CCmdUI * pCmdUI) { }

int nID = pCmdUI->m_nID - ID_DRAW_LINEWIDTH_ONE + 1; if(nID == m_nLineWidth)

pCmdUI->SetCheck(true);

m_nLineWidth = nID - ID_DRAW_LINEWIDTH_ONE + 1; int nID = pCmdUI->m_nID - ID_DRAW_LINE; if(nID == m_nDrawType)

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(false);

else

pCmdUI->SetCheck(false);

2、在视图类中添加 “线色?”和“填充色?”2个菜单项的消息处理函数

void CDrawView::OnDrawLinecolor() {

CColorDialog dlg;

dlg.m_cc.Flags |= CC_PREVENTFULLOPEN | CC_RGBINIT; dlg.m_cc.rgbResult = m_cLineColor; if(dlg.DoModal() == IDOK) {

- 20 -

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新高中教育课程设计论文-基于MFC的绘图软件的设计与实现 (4)全文阅读和word下载服务。

课程设计论文-基于MFC的绘图软件的设计与实现 (4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1101083.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top