孙鑫老师教学视频学习笔记——单文档中实现画笔及画刷

简介:
首先创建一个单文档的工程,然后在CDrawView类中添加OnLButtonDown和OnLButtonUp事件。
画一条直线的几种方法
 (一) HDC hdc;
 hdc=::GetDC(m_hWnd);  //从CWin派生的类均有一个与该窗口相关的句柄m_hWnd
 MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
 LineTo(hdc,point.x,point.y);
 ::ReleaseDC(m_hWnd,hdc);
 (二) CDC *pDC=GetDC();
 pDC->MoveTo(m_ptOrigin);
 pDC->LineTo(point);
 ReleaseDC(pDC); 
 (三) CClientDC dc(this);           //View类窗口位画线区
        //CClientDC dc(GetParent());  //窗口的画线区域为父窗口
 dc.MoveTo(m_ptOrigin);
 dc.LineTo(point);
 (四) CWindowDC dc(this);          //可以访问整个屏幕区域,包括客户区和非客户区
        //CWindowDC dc(GetParent());   
        //CWindowDC dc(GetDesktopWindow());  //画线区域为整个Windows桌面区域
 dc.MoveTo(m_ptOrigin);
 dc.LineTo(point);
运用画笔画各种颜色的直线
        CPen pen(PS_SOLID,1,RGB(0,255,0));   //绿色
 CClientDC dc(this);
 CPen *pOldPen=dc.SelectObject(&pen);  //注意要保存原有的画笔
 dc.MoveTo(m_ptOrigin);
 dc.LineTo(point);
 dc.SelectObject(pOldPen);       //还原原来的画笔
运用画刷填充区域
        CBrush brush(RGB(255,0,0));      //用红色来填充一个矩形区域
 CClientDC dc(this); 
 dc.FillRect(CRect(m_ptOrigin,point),&brush);
        CBitmap bitmap;                 //用一个位图来填充矩形区域
 bitmap.LoadBitmap(IDB_BITMAP1);
 CBrush brush(&bitmap);
 CClientDC dc(this); 
 dc.FillRect(CRect(m_ptOrigin,point),&brush);
用DC来画矩形
        //该方法画出的矩形,后面的矩形会覆盖前面的矩形
       CClientDC dc(this);            
       dc.Rectangle(m_ptOrigin,point);    //参数为矩形的左上角和右下角
       //为解决上述问题,采用以下方法来实现透明画刷
       CClientDC dc(this);
       CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
       CBrush *pOldBrush=dc.SelectObject(pBrush);
       dc.Rectangle(CRect(m_ptOrigin,point));
       dc.SelectObject(pOldBrush);
实现像画图工具中的画笔一样,可连续画图:
首先添加OnMouseMove事件,在该事件的相应函数中实现。先定义一个变量BOOL m_bDraw。因为画图
是在鼠标左键按下后开始的,所以在OnLButtonDown事件的相应函数里面赋值m_bDraw=TRUE;而在
OnLButtonUp事件的相应函数中赋值m_bDraw=FALSE.
       CClientDC dc(this);
       CPen pen(PS_SOLID,1,RGB(0,255,0));    //创建绿色的画笔
       CPen *pOldPen=dc.SelectObject(&pen);
       if(m_bDraw==TRUE)
       {
     dc.MoveTo(m_ptOrigin);
     dc.LineTo(point);
           m_ptOrigin=point;   更改原始点,以便连续作图
       }
       dc.SelectObject(pOldPen); 


本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/167406,如需转载请自行联系原作者
相关文章
|
8月前
六、如何优雅地在PPT中使用课本插图?(附源文件) | 微课系列教程
上图,相信大家都不陌生吧!没错,《少年闰土》中的经典插图——看瓜刺猹。但这个图,不但没有高清版,就算有高清版,它的复古画风,不管如何都不好在PPT中排版啊。
353 0
|
4月前
|
C# 图形学
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
119 1
|
4月前
|
图形学
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
79 0
|
8月前
|
前端开发
用canvas实现在线画板,带你找回童年乐趣
用canvas实现在线画板,带你找回童年乐趣
|
8月前
四、巧用Camtasia来剪视频 | 微课系列教程
因为平时我们要用到的视频操作很多,视频拼接、细节修正、从长视频中取一部分等等。那么本课以微课录制后的视频裁剪为例,教大家一些简单的视频剪切和音频杂音处理,最后导出视频。
69 0
|
9月前
|
数据采集 数据挖掘 程序员
【编程课堂】海龟作图
turtle 是 python 内置的一个比较有趣味的模块,俗称 海龟作图,它是基于 tkinter 模块打造,提供一些简单的绘图工具,海龟作图最初源自 20 世纪 60 年代的 Logo 编程语言,之后一些很酷的 Python 程序员构建了 turtle 库,让其他程序员只需要 import turtle,就可以在 Python 中使用海龟作图。
|
10月前
|
C语言
无敌!我用【C语言】手搓出了一个体系完整的【员工管理系统】还能玩游戏听音乐?(超详细,附完整源码)
前言:员工管理系统是一款面向公司管理员的管理工具,旨在提供员工信息管理、薪资管理、员工绩效评估、员工福利管理和智能推荐等功能,帮助公司管理员更好地管理员工信息和提高员工工作效率。 这是总体设计大概模型图:
107 0
|
11月前
游戏开发零基础入门教程(5):不要挡住我,我要去上面
这一节我们学习了层级管理,以及通过使用拖拽的方式来调整层级的顺序。 在真实的游戏中可能会包含很多的层级,在调整层级时,不要忘记口诀:谁挡住了我,我就去谁的上面。 试着在游戏中加入更多的层级,拖拽调整层级的顺序,然后观察编辑区中的图片显示效果。
113 0
|
11月前
|
小程序
女神节你也能自己动手制作一个漂亮的微信小游戏
嗨!大家好,我是小蚂蚁。 这是我之前制作的一个非常漂亮的微信小游戏,你可以给予它进行改编,然后自己制作一个小游戏送给你想送的人。 我发现这篇文章每年至少可以发四次,情人节一次,女神节一次,520一次,七夕一次[阴险]。 今年的我做了点儿改进,增加了一首背景音乐,是经典的《卡农》钢琴曲,希望你喜欢。
71 0
|
移动开发 前端开发 JavaScript
手把手教你使用CanvasAPI打造一款拼图游戏
手把手教你使用CanvasAPI打造一款拼图游戏
443 0
手把手教你使用CanvasAPI打造一款拼图游戏