孙鑫老师教学视频学习笔记――单文档中实现画笔及画刷
2009-06-16 16:21
483 查看
首先创建一个单文档的工程,然后在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);
画一条直线的几种方法:
(一) 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);
相关文章推荐
- 孙鑫老师教学视频学习笔记——单文档中菜单操作
- 孙鑫老师教学视频学习笔记——对话框
- 孙鑫老师教学视频学习笔记——网络套接字
- 孙鑫老师VC++教学视频学习笔记
- VC++中属性页(向导)的实现 (学习孙鑫老师视频笔记)
- 孙鑫老师教学视频学习笔记――文字处理
- 【C++学习笔记】简单的多线程程序(摘自孙鑫C++教学视频)
- 吴恩达老师深度学习视频课笔记:逻辑回归公式推导及C++实现
- 播布客教学视频_C学习笔记_9.2_整形转字符串(函数实现)
- 吴恩达老师深度学习视频课笔记:单隐含层神经网络公式推导及C++实现(二分类)
- 看了孙鑫老师的vc视频,今天又在大侠的blog里,即http://blog.csdn.net/hbyufan/ 中发现有相关笔记,转贴学习
- 看郭克华老师的视频教学笔记(六)
- 韩顺平 javascript教学视频_学习笔记30_小球撞球游戏
- 韩顺平 javascript教学视频_学习笔记32_仿sohu频道切换效果
- 孙鑫VC++视频教程笔记(13)文档与串行化
- Java中的IO-Mars老师学习视频笔记
- 看孙鑫老师VC++视频教程笔记 之 多线程编程(二)
- 张孝祥老师struct视频学习笔记2-logic里面的标签
- 韩顺平_php从入门到精通_视频教程_第20讲_仿sohu首页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理
- 安卓开发文档学习笔记之实现ActionBar中Tab导航