2.2 设置对话框
为程序添加一个设置对话框,允许用户指定画笔的类型、线宽,并让随后的绘图操作就使用用户指定的新设置值来进行绘制。
表2-1
6
设置线型、线宽对话框的代码如下:
void CWdrawView::OnSetting()
{
//TODO: 在此添加命令处理程序代码 CSettingDlg dlg; dlg.m_nLineWidth=m_nLineWidth;
dlg.m_nLineStyle=m_nLineStyle;
if(IDOK==dlg.DoModal()) { m_nLineWidth=dlg.m_nLineWidth;
m_nLineStyle=dlg.m_nLineStyle;
} }
2.3 颜色
颜色对话框看起来比较复杂。实际上,MFC为我们提供了一个类:CColorDialog,可以很方便的创建这样的一个颜色对话框。
void CWdrawView::OnColor()
{
// TODO: 在此添加命令处理程序代码
CColorDialog dlg;
dlg.m_cc.Flags |=CC_RGBINIT | CC_FULLOPEN;
dlg.m_cc.rgbResult=m_clr;
} if(IDOK==dlg.DoModal()) { } m_clr=dlg.m_cc.rgbResult;
2.4 添加文字
void CTView::OnDraw(CDC* pDC)
{
7
CTDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);pDC->TextOutW(30,30,_T("windows绘图板设计!"));if (!pDoc)return;}
2.5 打开与保存
void CWdrawView::OnFileOpen() {
}
void CWdrawView::OnFileSave() {
// TODO: 在此添加命令处理程序代码HMETAFILE hmetaFile;
}
8 // TODO: 在此添加命令处理程序代码 HMETAFILE hmetaFile; hmetaFile=GetMetaFile("meta.wmf"); m_dcMetaFile.PlayMetaFile(hmetaFile); DeleteMetaFile(hmetaFile); Invalidate(); hmetaFile=m_dcMetaFile.Close(); CopyMetaFile(hmetaFile,"meta.wmf"); m_dcMetaFile.Create(); DeleteMetaFile(hmetaFile);
第三章 调试及结果分析
3.1 运行结果
根据前面步骤,将程序代码一一添加进去,点击运行,得到如下结果:
图3.1为添加文字代码运行结果;图3.2为添加所有绘图程序代码后的运行结果。

图

3.1
图3.2
9
3.2 结果分析
本次课程设计,出现的问题比较多,添加完后运行报错较多,经过仔细排查,逐一解决了问题,得到了所要的结果,所以要非常的细心,不要添错代码,尽量少出错。一开始我并没有添加刷新函数Invalidate(),这就使程序运行之后,无论鼠标左键按下时如何移动无法绘图,这是因为当一个窗口内键入内容其实就是将窗口刷新了,相当于更新了窗口,故必须有刷新函数,这和生活中的白纸写字不一样。
当添加Invalidate()后,把Invalidate()放在OnMouseMove()里,但是这样只能在窗口内画一个图形,即每画完一个图形就刷新一次。之后通过与同学讨论,并查找资料将Invalidate()改为了Invalidate(0),这时是可绘制多个图形,但鼠标每移动一个位置都进行一次刷新,绘图结束后,绘图过程中的所有痕迹都在,产生了很多拖动的影子。,经过几次试验,将Invalidate(0) 放在了OnLButtonUp()中,那么每次重绘,上次的图形会作为背景被保留下来,而不会被刷新掉。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-23014-4.html
预计