电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOCX文档下载
分享到微信 分享到微博 分享到QQ空间

VS2010和MFC编程入门之50(图形图像:GDI对象之画笔CPen)

  • 资源ID:471848643       资源大小:70.96KB        全文页数:9页
  • 资源格式: DOCX        下载积分:15金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要15金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

VS2010和MFC编程入门之50(图形图像:GDI对象之画笔CPen)

VS2010MFC编程入门之五十(图形图像:GDI 对象之画笔CPen )理解了 CDC 类及其屏幕绘图函数,这里主要内容是GDI 对象之画笔CPen。GDI对象在 MFC 中, CGdiObject 类是 GDI 对象的基类,通过查阅MSDN 我们可以看到,CGdiObject 类有六个直接的派生类, GDI 对象主要也是这六个,分别是: CBitmap 、 CBrush 、CFont 、 CPalette 、CPen 和 CRgn。在这六个 GDI 对象中,最常用的莫过于画笔和画刷了,即CPen 类和 CBrush 类。本文就主要讲解画笔的使用。画笔的应用实例在这里直接通过一个波形图的实例,来详细讲解画笔的使用方法。首先介绍此实例要实现的功能:在对话框上有一个Picture 控件,将此控件的背景填充为黑色;启动一个定时器,每次定时器到时,所有波形数据都前移一个单位,并获取一个 80 以内的随机数作为波形的最后一个数据,然后以绿色画笔在绘图控件上绘制波形。这样就实现了波形的绘制及动态变化。下面是具体实施步骤:1 、创建一个基于对话框的MFC 工程,名字设为“Example50 ”。2 、在自动生成的对话框模板 IDD_EXAMPLE50_DIALOG 中,删除“ TODO: Place dialog controls here. ”静态文本框,添加一个 Picture 控件, ID 设为 IDC_WAVE_DRAW 。3 、为 Picture 控件 IDC_WAVE_DRAW 添加 CStatic 变量,名称设为m_picDraw 。4 、在文件 Example50Dlg.h文件中 CExample50Dlg 类声明的上面添加宏定义:C+ 代码#define POINT_COUNT 100此符号常量的意义是波形的点数,这里用define将其定义为符号常量是为了方便以后可能的修改,假如我们以后想将点数改为200 ,则只改此宏定义就可以了:#define POINT_COUNT 200,而如果没有使用符号常量,在程序中直接使用了100 ,那么就需要将所有使用 100 的位置找出来,并替换为 200 ,这样不仅麻烦也很容易出错,所以最好是将其定义为符号常量。5 、在 CExample50Dlg.h 文件中为 CExample50Dlg 类添加成员数组:C+ 代码intm_nzValuesPOINT_COUNT;此数组用于存放波形数据。6 、在 CExample50Dlg 类的构造函数中为数组m_nzValues 的元素赋初值:C+ 代码CExample50Dlg:CExample50Dlg(CWnd* pParent /*=NULL*/): CDialogEx(CExample50Dlg:IDD, pParent)m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);/ 将数组 m_nzValues 的元素都初始化为 0 memset(m_nzValues, 0, sizeof(int) * POINT_COUNT);7 、在 CExample50Dlg 对话框的初始化成员函数CExample50Dlg:OnInitDialog()中,构造随机数生成器,并启动定时器。CExample50Dlg:OnInitDialog()修改如下:C+ 代码BOOL CExample50Dlg:OnInitDialog()CDialogEx:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command range. ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization here/ 以时间为种子来构造随机数生成器srand(unsigned)time(NULL);/ 启动定时器, ID 为 1,定时时间为 200ms SetTimer(1, 200, NULL);return TRUE; / return TRUE unless you set the focus to a control8 、为 CExample50Dlg 类添加波形绘制的成员函数CExample50Dlg:DrawWave(CDC *pDC, CRect &rectPicture),参数分别为设备上下文指针和绘图的矩形区域。C+ 代码void CExample50Dlg:DrawWave(CDC *pDC, CRect &rectPicture)float fDeltaX;/ x轴相邻两个绘图点的坐标距离float fDeltaY;/ y轴每个逻辑单位对应的坐标值int nX;/在连线时用于存储绘图点的横坐标int nY;/在连线时用于存储绘图点的纵坐标CPen newPen;/用于创建新画笔CPen *pOldPen;/用于存放旧画笔CBrush newBrush;/用于创建新画刷CBrush *pOldBrush; /用于存放旧画刷/计算 fDeltaX 和 fDeltaYfDeltaX = (float)rectPicture.Width() / (POINT_COUNT - 1);fDeltaY = (float)rectPicture.Height() / 80;/ 创建黑色新画刷newBrush.CreateSolidBrush(RGB(0,0,0);/选择新画刷,并将旧画刷的指针保存到pOldBrushpOldBrush = pDC->SelectObject(&newBrush);/ 以黑色画刷为绘图控件填充黑色,形成黑色背景pDC->Rectangle(rectPicture);/ 恢复旧画刷pDC->SelectObject(pOldBrush);/ 删除新画刷newBrush.DeleteObject();/ 创建实心画笔,粗度为 1,颜色为绿色newPen.CreatePen(PS_SOLID, 1, RGB(0,255,0);/选择新画笔,并将旧画笔的指针保存到pOldPenpOldPen = pDC->SelectObject(&newPen);/ 将当前点移动到绘图控件窗口的左下角,以此为波形的起始点pDC->MoveTo(rectPicture.left, rectPicture.bottom);/ 计算 m_nzValues 数组中每个点对应的坐标位置,并依次连接,最终形成曲线for (int i=0; i<POINT_COUNT; i+)nX = rectPicture.left + (int)(i * fDeltaX);nY = rectPicture.bottom - (int)(m_nzValuesi * fDeltaY);pDC->LineTo(nX, nY);/ 恢复旧画笔pDC->SelectObject(pOldPen);/ 删除新画笔newPen.DeleteObject();9 、有了定时器和绘图成员函数,我们就可以在WM_TIMER 消息的响应函数中添加对波形数据的定时处理和对波形的定时绘制了。定时器及WM_TIMER 消息处理函数的添加方法如果忘记了,可以再到VS2010/MFC 编程入门之四十四(MFC 常用类:定时器 Timer )温习下。WM_TIMER消息的处理函数修改如下:C+ 代码void CExample50Dlg:OnTimer(UINT_PTR nIDEvent)/ TODO: Add your message handler code here and/or call default CRect rectPicture;/ 将数组中

注意事项

本文(VS2010和MFC编程入门之50(图形图像:GDI对象之画笔CPen))为本站会员(公****)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.