C MFC 如何绘制线 画笔

转自:http://blog.sina.com.cn/s/blog_4dbjn.html在OnDraw函数中void CtestView::OnDraw(CDC* pDC){ CtestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) // TODO: 在此处为本机数据添加绘制代码
//将画刷的颜色定为蓝色 brush.CreateSolidBrush(RGB(0,0,255)); CP
//将画笔的颜色定为红色 pen.CreatePen(PS_SOLID, 2, RGB(255,0,0)/*::GetSysColor(COLOR_3DSHADOW)*/);
//将画刷选入设备上下文pDC CBrush* pOldBrush = (CBrush*) pDC-&SelectObject(&brush); //将画笔选入设备上下文pDC CPen*
pDC-&SelectObject(&pen); // 画矩形
pDC-&Rectangle(100,100,300,300); // restore DC and cleanup pDC-&SelectObject(pOldBrush); pDC-&SelectObject(pOldPen); brush.DeleteObject(); pen.DeleteObject();}
以上代码会画出一个大小为200*200的矩形,矩形的边框由画笔的定义决定,边框是红色,边框线宽是2.矩形内部的填充颜色是蓝色,由画刷的定义决定。如果不使用画笔,画出的矩形是一个200*200的全部是蓝色矩形块,没有边框。如果不使用画刷,画出的矩形是一个有红色边框的矩形,内部是白色。
由此,我们可以将画笔解释为其颜色与画出的图形的边框颜色一致,而画刷的颜色则与画出的图形的内部填充颜色一致。这种用法和一般的图形编辑器中的画笔与画刷的用法是相通的。
[MFC]CPen画笔类、CBrush画刷类、背景颜色和背景模式
1. 画笔的风格:
1) 所有的画线函数都是使用CPen类指定的画笔绘制的,默认都是1像素宽、黑色的实线;
2) 要使定义的画笔生效(即可以画线)必须先创建CPen的画笔对象,然后将其...
MFC画刷类CBrush使用实例 .
画刷类CBrush
利用画笔可以画图形的边框,而用画刷就可以在图形内着色。大多数的GDI绘图函数既使用画笔又使用画刷,它们用画笔绘制各种图形的周边,而用画刷填充图形,因而可以用一种颜色和风格去设置画...
MFC利用CPen与CBrush绘制实心圆
实现代码如下
[MFC]CPen画笔类、CBrush画刷类使用介绍
[MFC]CPen画笔类、CBrush画刷类使用介绍
MFC中的画刷CBrush
MFC 提供一个CBrush
HDC hdc = GetDC(this-&Handle);
cdc.m_hDC =
brush.Cr...
开发笔记:
BOOL CPanelWnd::OnEraseBkgnd(CDC* pDC)
// TODO: 在此添加消息处理程序代码和/或调用默认值
//return CDialo...
CPen pen(PS_DOT,1,RGB(255,0,0));
CClientDC dc(this);
CPen* pOldPen=dc.SelectObject(&pen);
dc.Move...
一、CBrush成员函数
1.1构造函数
CBrush( );
CBrush( COLORREF crColor ); //类似CreateSolidBrush
CBrush( int nIn...
// lessonMyBrushView.cpp : implementation of the ClessonMyBrushView class
#include &stdafx.h&
没有更多推荐了,07:58 提问
mfc实现用菜单修改画笔的粗细、颜色等功能,实现视图的自动刷新,在视窗大小改变时能自动绘制线条
mfc实现用菜单修改画笔的粗细、颜色等功能,实现视图的自动刷新,在视窗大小改变时能自动绘制线条
按赞数排序
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐在上篇中我们实现了画直线的功能,现在我们来实现画彩色线条和使用绘图画刷和透明画刷。
在上次建的工程中继续修改。
一、首先实现绘制彩色线条。
首先需要创建一个特定的颜色的画笔,然后将此画笔选入设备描述表中, 可以利用MFC提供的类CPen来创建画笔对象,其的一个构造函数
CPen(int nPenStyle,int nWidth,COLORREF crColor);
其中nPenStyle 指定比的线型(实现、点线、虚线等),nWidth 指定比的宽度,crColor指定比的颜色,利用RGB这个宏可以构建这种类型的值。
另外,构造一个GDI对象后,该对象并不会立即生效,必须选入设备描述表,它才会在以后的绘制操作中生效。利用SelectObject 函数可以实现吧GDI对象选入设备描述表中,并且该函数会返回指定先前被选对象的指针。着主要是为了再完成当前绘制操作后,还原设备描述表用的。
在void CDraw1View::OnLButtonUp(UINT nFlags, CPoint point) 的消息处理函数中修改代码:
CPen pen(PS_SOLID,1,RGB(255,0,0));
CClientDC dc(this);
CPen *pOldPen = dc.SelectObject(&pen);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);
值得注意的是:当画笔的宽度要小于等于1是,虚线线型才有效。
二、使用画刷绘图
1、简单画刷
//创建一个红色画刷
CBrush brush(RGB(255,0,0));
//创建并获得设备描述表
CClientDC dc(this);
//利用红色画刷填充鼠标拖曳过程中形成的矩形区域
dc.FillRect(CRect(m_ptOrigin,point),&brush);
void FillRect(LPCRECT lpRect,CBrush* pBrush);
参数说明:lpRect指向一个RECT结构体或CRect对象指针
pBrush指向用于填充矩形的画刷对象的指针。
2、位图画刷
首先要给程序增加一个位图资源。
就创建了一个默认名称为IDB_BITMAP1的位图资源,并编辑此位图。创建了位图资源后,就可以利用代码来创建位图画刷了。
在void CDraw1View::OnLButtonUp(UINT nFlags, CPoint point) 消息处理函数中修改代码:
//创建位图对象
//加载位图资源
bitmap.LoadBitmap(IDB_BITMAP1);
//创建位图画刷
CBrush brush(&bitmap);
//创建并获得设备描述表
CClientDC dc(this);
//利用位图画刷填充鼠标拖曳过程中形成的矩形区域
dc.FillRect(CRect(m_ptOrigin,point),&brush);
三、透明画刷
我们首先来看看利用DCD的Rectangle 函数绘制一个矩形,代码如下:
CClientDC dc(this);
dc.Rectangle(CRect(m_ptOrigin,point));
运行结果如下,我们可以很明显的看到先前画的矩形会被后来画饿矩形所覆盖掉,那么我们要怎么来实现透明呢。
因为设备描述表中有一个默认的白色画刷,在绘图时,它会利用这个画刷来填充矩形的内部,就导致了上面我们看到的结果。
我们可以利用GetStockObject 这个函数来实现。但是利用GetStockObject 函数获取的是一个画刷句柄,而我们在进行绘制操作时需要的是一个画刷对象,这是我们可以利用CBrush 类提供的一个FromHandle 函数来实现从画刷句柄转化为画刷对象这个功能。
static DCD* PASCAL FromHandle(HDC hDC);
实现代码如下:
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);
运行结果:
MFC 简单绘图
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code he...
MFC之简单绘图
在VC++中如何通过消息映射机制,用Win32 SDK,CDC类,CClientDC类,CWindowDC类实现绘图操作
void CDrawView::OnLButtonDown(UINT nFl...
MFC简单绘图(三)
在上篇中我们实现了利用画刷来绘图,现在我们来实现绘制连续线条。在上次建的工程Draw1中继续修改。为了绘制连续线条,首先需要得到线条的起点,然后需要捕获鼠标移动过程中的每一个点,这个可以通过捕获鼠...
MFC画刷类CBrush使用实例 .
画刷类CBrush
利用画笔可以画图形的边框,而用画刷就可以在图形内着色。大多数的GDI绘图函数既使用画笔又使用画刷,它们用画笔绘制各种图形的周边,而用画刷填充图形,因而可以用一种颜色和风格去设置画...
好吧,不得不承认,我昨天懒了,没有对这个进行更新,是完全的抵制不住电影的诱惑啊!!或许...
自加入实验室以来,老师便布置
第一种方式:使用HDC
hdc = ::GetDC(m_hWnd);
MoveToEx(hdc, m_ptOld.x, m_ptOld.y, NULL);
其实这部分才是我最先学习MFC的部分,这里给出代码与原理,先看一下结果图(分别是绘点、绘线、绘面、绘注记):
首先说下MFC绘制图形,要写在项目view.cpp的ondraw里,得到...
没有更多推荐了,GDI 对象:
Windows GDI提供了一些绘图对象,程序通过这些GDI对象设置绘图的工具和风格,这里的对象是指Windows数据结构,而不是C++类的对象。GDI对象是Windows图形设备接口的抽象绘图工具。除了画笔和画刷,其它GDI对象还包括字体、位图和调色板。MFC对GDI对象进行了很好的封装,提供了封装GDI对象的类,如CPen、CBrush、CFont、CBitmap和CPalette等,这些类都是GDI对象类CGdiObject的派生类。================================================================
选择一个GDI对象:
CDC类提供了成员函数SelectObject()选择用户自己创建的GDI对象,该函数有多种重载形式,
用户可以选择已定制好的画笔、画刷、字体和位图等不同类型的GDI对象
SelectObject( CPen* pPen );
SelectObject( CBrush* pBrush );
SelectObject( CFont* pFont );
SelectObject( CBitmap* pBitmap );
SelectObject( CRgn* pRgn );
CGdiObject*
SelectObject(CGdiObject* pObject );
函数参数是一个指向用户已定制好的GDI对象的指针,选择操作成功函数将返回以前GDI对象的指针,否则返回NULL。
在选择绘图设备类对象(GDI对象)进行绘图时,一般可按下列步骤进行:(1)定义一个GDI对象,然后调用相应的函数(如CreatePen、CreateSolidBrush等)创建此GDI对象。
(2)将已构造出的GDI对象利用设备环境类对象的成员函数SelectObject选入到当前环境中,并同时将原来的GDI对象保存起来。
(3)绘图结束后,恢复当前设备环境中原来的GDI对象。
在Windows系统中包含了一些库存的GDI对象,在第(3)步中可直接利用设备环境类(CDC)的成员函数SelectStockObject将一个Windows库存的GDI对象选入,系统可自动将原来选入的GDI对象从设备环境中分离出来。
================================================================
图形设备接口、GDI类:
CGdiObject类CGdiObject类派生于CObject类,它是CGdiObject、CPen、CBrush、Cfont和CBitmap等的基类。
用户不能直接生成一个CGdiObject类,而必须在它的某种设备继承类中生成一个CGdiObject类的派生类。
CPen类是CGdiObject类的一个派生类,它封装了Windows图形设备接口(GDI)中有关画笔的操作。
创建CPen对象:
创建一个CPen对象可以有以下几种方法:
(1)定义一个CPen对象,用其成员函数CreatePen或CreatePenIndirect对其进行初始化。
Pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
(2)定义一个CPen对象,并一次性地初始化它的所有参数。
CPen pen(PS_SOLID,1,RGB(255,0,RGB(255,0,0));
(3)动态地创建一个CPen对象。
= new CPen(PS_SOLID,1,RGB(255,0,0));
在一个函数中多次创建一个CPen对象时可以采用这种方法。
应用这种方法时,特别注意操作完毕后要删除分配的CPen对象,即:
CBrush类是CGdiObject类的一个派生类,它封装了Windows图形设备界面(GDI)中有关画刷的操作。
CBrush类的用法与CPen类似。
创建CBrush对象:
利用CBrush类的构造函数可创建Cbrush对象。
1. 实心画刷
用实心画刷进行图形填充时,以这种画刷的颜色实心填充。其创建方法如下:
(1)定义CBrush对象,用函数CreateSolidBrush对对象进行初始化。
brush.CreateSolidBrush(RGB(255,0,0));
(2)定义CBrush类对象,并利用构造函数对对象的参数进行初始化。
CBrush brush(RGB(255,0,0));
(3)动态创建。用这种方法定义时,在操作完成后要删除创建的CBrush对象。
Brush=new CBrush(RGB(255,0,0));
2. 影线画刷
影线画刷不是用画刷的颜色实心填充图形,而是用不同的阴影图案来填充。
影线画刷的创建方法同实心画刷一样:
(1)定义对象,用函数初始化。
brush.CreateSolidBrush(PS_SOLID,RGB(255,0,0));
(2)一次性创建。
CBrush brush(HS_HORIZONTAL,RGB(255,0,0));
(3)动态创建。
用这种方法创建的CBrush对象,在操作完成后要删除CBrush对象。
Brush = new CBrush(HS_HORIZONTAL,RGB(255,0,0));
3. 位图画刷
位图画刷是用位图图像来填充图形的。
函数CreatPatternBrush用来初始化一个位图画刷。
以下代码创建一个位图画刷(其中,pBitmap指向一个位图对象):
brush.CreatPatternBrush(pBitmap);
CFont类是CGdiObject类的一个派生类,它封装了逻辑字体及方法。
创建CFont对象:
CFont类只有一个构造函数,在定义了一个CFont类对象之后,必须用成员函数CreateFont或CreateFontIndirect来初始化CFont对象的参数。
CreateFont函数的参数非常多,可查阅MSDN。
CBitmap类和Cpen、CBrush类一样,是CGdiObject类的派生类,它封装了使用Windows GDI进行图形绘制中关于位图的操作。
在CBitmap类中重载了两个LoadBitmap函数,用于加载位图资源:
BOOL LoadBitmap( LPCTSTR lpszResourceName );
BOOL LoadBitmap( UINT nIDResource );
CPen和CBrush的使用
利用CPen画自定义线条和CBrush填充自定义区域。
一、CPen的使用。
//构造画笔
CPenmyPen1(PS_SOLID, 2,
RGB(255,0,0));
CClientDCdc( ...
在MFC中,CGdiObject类是GDI对象的基类,通过查阅MSDN我们可以看到,CGdiObject类有六个直接的派生类。
GDI对象主要也是这六个,分别是:
CBrush画刷定义了一种位图形式的像素,利用它可对区域内部填充颜色
该类封装了Windows的图形设备接口(GDI)刷子。通过该类构造的CBrush对象可以传递给任何一个需要画刷的CDC成员函数。...
CBrush画刷定义了一种位图形式的像素,利用它可对区域内部填充颜色
该类封装了Windows的图形设备接口(GDI)刷子。通过该类构造的CBrush对象可以传递给任何一个需要画刷的CDC成员函...
[MFC]CPen画笔类、CBrush画刷类使用介绍
参考中“类层次结构图”是为了方便查找某个&em&类的基类&/em&。该MFC参考通常不描述通过...CBitmap afxwin.h CBitmapButton afxext.h &em&CBrush&/em& afxwin.h CButton 按钮...
没有更多推荐了,《1》一般画线方法
首先应在View类中增加CPOINT类的一成员变量,并在构造函数中将其初始化为0。
1、利用全局函数(SDK函数)实现画线
时获取的点位置
画线到当前点
2、利用类实现画线
*pDC=GetDC();//此时利用的是的成员函数
-&MoveTo(m_ptOrigin);
-&LineTo(point);
3、利用类实现画线
构造时调用,析构时调用,因此无需显式的调用和
dc(this); //构造的仅与类相关,画线仅能画在窗口上
dc(GetParent());
//构造的与类的父窗口(框架窗口)相关,画线能画在工具栏上,不能画到菜单栏上
.MoveTo(m_ptOrigin);
.LineTo(point);
4、利用类实现画线——也不需要显式地调用和
利用该类可在可在整个屏幕(包括客户区与非客户区)上画线
//与没有区别
//可画到菜单栏
dc(GetDesktopWindow());
//可画到桌面上
.MoveTo(m_ptOrigin);
.LineTo(point);
《2》画出其他颜色线条(利用画笔—类)
创建画笔,参数分别为笔的类型,笔的粗细,笔的颜色
将新画笔的类型选择到设备描述表中,并返回原来画笔的类型
将原先画笔的类型选择到设备描述表中
《》创建画刷
创建颜色画刷
brush(RGB(255,0,0));
.FillRect(CRect(m_ptOrigin,point),&brush);
创建位图画刷
创建位图的画刷
利用画刷填充
创建透明画刷
*pBrush=CBrush
((HBRUSH)GetStockObject(NULL_BRUSH));
创建透明画刷使先前画的仍能看到
函数将句柄转换为对象,函数获得画刷的句柄
*pOldBrush=dc.SelectObject(pBrush);
.Rectangle(CRect(m_ptOrigin,point));//画矩形
.SelectObject(pOldBrush);
《4》画连续的线
1、增加一型成员变量,并初始化为
2、在函数中令;在函数中令,同时获取点的位置;
3、在函数中添加
设置绘画的模式
MFC在窗体上画线
麻瓜新手第一次开始做项目
对于在窗体上画线其实就是几行代码:
CDC *pDC = GetDC();
//通过GetDC();函数创建了一个CDC 类型对象
//如此你就可以通过...
mfc绘制直线
http://void CLine::LineTo(CDC*pDC,CP2 p1){
COLORREFclr=RGB(255,0,0)...
VC/MFC动态画线(橡皮线),画圆,画椭圆,画矩形
所谓的动态画线,画矩形,画椭圆的本质就是在于消隐问题的解决以及对Windows消息循环机制的理解,消隐问题:因为MFC中有一个函数SetROP2,通过将该函数的参数设置为R2—NOT(当前绘制的像素值...
MFC 画线的几种方式
MFC 画线的几种方式
博客分类:
一.画鼠标按下到弹起之间的直线
CView 的私有成员变量 CPoint m_ptO...
如何用MFC画出直线、虚线、折线、圆、椭圆、矩形、弧形(附上源码)
我创建的工程名字是默认的,叫MFCApplication3
首先在MFCApplication3Dlg.h这个文件中添加构造说明:
CPen m_pen[5];
CPoint ...
使用橡皮筋画线算法完成直线、曲线的绘制保存和读取... MFC 橡皮筋画线程序 3C币 14下载
mfc橡皮筋画线程序 3C币 8下载
&em&mfc画线&/em&程序 3C币 14下载
MFC橡皮...
做的不是太好 不算完善 对应的是计算机图形学中的三种&em&画线&/em&方法... *详细原因:
交 &em&MFC&/em&实现三种&em&画线&/em&方法 3积分 立即下载 ...
&em&mfc&/em&实现DDA,中点&em&画线&/em&,Bresenham算法划线的实现很容易看懂 下载后自己改的空间比较大!... &em&mfc&/em&实现DDA,中点&em&画线&/em&,Bresenham算法划线的实现很容易看懂 下载后自己改的空间...
MFC单文档两点画线的四种方法
记录一下:
这个听起来似乎很简单了,没有什么技术难度,只是对几种方法有点含混不清,并且对CMainFrame类和CView类之间的关系与区别不太清楚,这里加以总结。
没有更多推荐了,

我要回帖

更多关于 C充电线 的文章

 

随机推荐