GDI画笔对象
GDI中的画笔对象包含了直线和曲线的宽度、形式、颜色、端点形状、交点以及样式。你画出来的线是啥颜色,好宽,都由它决定的。
缺省的DC画笔是单个象素宽的黑色画笔。一旦画笔被选入设备上下文后,只有颜色是可以改变的,可通过下面两个函数来访问设置和得到DC画笔颜色。
COLORREFGetDCPenColor(HDChdc);
COLORREFSetDCPenColor(HDChdc,COLORREFcrColor);
GetDCPenColor函数获取设备上下文中DC画笔的当前颜色,SetDCPenColor函数设置一个新的颜色,并返回旧的颜色。
hdc=::GetDC(this->m_hWnd);
COLORREFcrCol;
crCol=GetDCPenColor(hdc);//默认为黑色
MoveToEx(hdc,0,200,NULL);
LineTo(hdc,100,200);//绘制一条黑色的直线
HGDIOBJhld=SelectObject(hdc,GetStockObject(DC_PEN));
SetDCPenColor(hdc,RGB(255,0,0));
MoveToEx(hdc,0,220,NULL);
LineTo(hdc,100,220);//绘制一条红色的直线
SelectObject(hdc,hOld);
::ReleaseDC(this->m_hWnd,hdc);
上面的GetStockObject是啥?
原来GDI定义了四种预定义的画笔对象,叫库存画笔,为了获取库存画笔,那就要用到GetStockObject这个函数了。GetStockObject(BLACK_PEN)黑色、GetStockObject(White_PEN)白色、GetStockObject(NULL_PEN)什么都不画、GetStockObject(DC_PEN)。
下面用下面两个函数来创建画笔。
HPENCreatePen(intfnPenStyle,intnwidth,COLORREFcrColor);
HPENCreatePenIndirect(CONSTLOGPEN*lgPen);
fnPenStyle画笔样式有下面这些样式。
PS_SOLID---------------纯色,所有象素都画
PS_DASH---------------虚线
PS_DOT-----------------点画线
PS_DASHDOT---------虚线和点画线交替出现
PS_DASHDOTDOT---虚线和两交点画线交替出现
PS_NULL----------------不画线
PS_INSIDEFRAME----纯色,所有象素都画
hdc=::GetDC(this->m_hWnd);
HPENp_SOLID,p_DASH,p_DOT,p_DASHDOT,p_DASHDOTDOT;
p_SOLID=CreatePen(PS_SOLID,1,RGB(255,0,0));
p_DASH=CreatePen(PS_DASH,1,RGB(255,0,0));
p_DOT=CreatePen(PS_DOT,1,RGB(255,0,0));
p_DASHDOT=CreatePen(PS_DASHDOT,1,RGB(255,0,0));
p_DASHDOTDOT=CreatePen(PS_DASHDOTDOT,1,RGB(255,0,0));
hOld=SelectObject(hdc,p_SOLID);
MoveToEx(hdc,0,10,NULL);
LineTo(hdc,10,10);
SelectObject(hdc,p_DASH);
MoveToEx(hdc,0,20,NULL);
LineTo(hdc,0,20);
SelectObject(hdc,p_DOT);
MoveToEx(hdc,0,30,NULL);
LineTo(hdc,0,30);
SelectObject(hdc,p_DASHDOT);
MoveToEx(hdc,0,40,NULL);
LineTo(hdc,0,40);
SelectObject(hdc,p_DASHDOTDOT);
MoveToEx(hdc,0,50,NULL);
LineTo(hdc,0,50);
SelectObject(hdc,hOld);
DeleteObject(p_SOLID);
DeleteObject(p_DASH);
DeleteObject(p_DOT);
DeleteObject(p_DASHDOT);
DeleteObject(p_DASHDOTDOT);
::ReleaseDC(this->m_hWnd,hdc);
CreatePenIndirect函数
结构LOGPEN存储了逻辑画笔的三个参数,画笔样式、宽度、颜色。
typedefstructtagLOGPEN{
UINTlopnStyle;//样式
POINTlopnWidth;//宽度
COLORREFlopnColor;//颜色
}LOGPEN,*PLOGPEN;
LOGPENlogpen;
HPENp;
HGDIOBJhOld;
HDChdc=::GetDC(this->m_hWnd);
logpen.lopnWidth.x=1;
logpen.lopnColor=RGB(255,0,0);
logpen.lopnStyle=PS_SOLID;
p=CreatePenIndirect(&logpen);
hOld=SelectObject(hdc,p);
MoveToEx(hdc,0,10,NULL);
LineTo(hdc,50,10);
SelectObject(hdc,hOld);
DeleteObject(p);
::ReleaseDC(this->m_hWnd,hdc);
ExtCreatePen函数
上面CreatePen和CreatePenIndirect(CreatePenIndirect也是调用的CreatePen函数)创建的画笔,当宽度大于一个象素时,画笔不能画真实形式的直线,例如虚线和点划线。绘制的直线画端是圆角的,这时这两个函数将不能满足需要了。这时就可用到ExtCreatePen函数。ExtCreaetPen可以创建几何画和装饰性画笔。
HPENExtCreatePen(DWORDdwPenStylek,
DWORDdwWidth,
CONSTLOGBRUSH*lplb,
DWORDdwStyleCont,
CONSTDWORD*lpStyle);
相关推荐
在探讨如何在Visual C++(以下简称VC)环境中使用GDI+进行图形绘制之前,我们首先需要了解几个关键概念:GDI+是什么?它与传统的GDI(Graphics Device Interface)有何不同?以及如何在VC项目中集成GDI+库来实现更...
GDI+是Windows图形设备接口(Graphics Device Interface)的一个增强版本,主要在Microsoft Visual C++(简称VC)环境中被广泛使用,用于实现丰富的图形绘制、图像处理和文本渲染。GDI+提供了更多的图形功能和更现代...
在本主题“VC6.0 GDI++”中,我们将深入探讨如何在Visual C++ 6.0环境下利用GDI++进行图形界面的绘制。 首先,虽然VC6.0是一款较老的开发环境,但仍然被许多开发者所青睐,尤其是对于学习和理解底层Windows编程。...
在Microsoft Visual C++ 6.0(简称VC6)这个经典的开发环境中,使用GDI+进行图形绘制和处理是一项常见的任务。GDI+是Windows API的一个扩展,它提供了丰富的图形功能,包括2D图形绘制、图像操作、文本渲染等。在本文...
这段时间在研究GDI+双缓冲的方法,在网上找了很多时间都没有找到合适的示例,特别是针对VC6的。后来通过对网上资料的分析,和对SDK,MFC的学习,实现了VC6下GDI+双缓冲的效果,把它写出来与大家分享,希望可以找到更...
### VC与GDI+显示PNG图片详解 #### 一、GDI+简介 GDI+是微软为Windows XP及以上版本操作系统推出的一种图形设备接口技术,它作为GDI(Graphics Device Interface)的升级版,提供了更丰富的图形处理能力,特别是在...
在VC6下实现GDI+双缓冲,首先需要创建一个内存设备上下文,并且创建一个与窗口大小相同的位图,然后将内存设备上下文与这个位图关联。接着,开发者可以在内存设备上下文中使用GDI+的各种绘图函数进行图形绘制,如...
对于使用Visual C++ 6.0(简称VC6.0)的老版本开发环境的程序员来说,尽管VC6.0本身并不直接支持GDI+,但通过特定的配置和安装步骤,我们仍然可以在VC6.0中使用GDI+进行图形编程。下面将详细介绍如何在VC6.0中搭建...
在Visual C++ 6.0(简称VC6)这个经典的开发环境中,使用GDI+进行图形绘制需要一些特定的文件,包括头文件、库文件和动态链接库(DLL)。以下是对这些知识点的详细说明: 1. **头文件(Include Files)**:GDI+的...
在Microsoft Visual C++ 6.0 (VC6) 和Visual Studio 2005中使用GDI+(Graphics Device Interface Plus)是一项常见的图形处理任务,它扩展了传统的GDI功能,提供了更强大的图形绘制和图像处理能力。GDI+允许开发者...
在VC6.0环境下,利用GDI+加载动态GIF图片是一个常见的图形处理任务,尤其在开发具有图形界面的应用程序时。GDI+是Windows API的一个扩展,它提供了丰富的绘图功能,包括对矢量图形、位图以及动画的支持。在本示例中...
在VC++开发环境中,使用GDI(Graphics Device Interface)来在Picture控件中显示PNG、BMP、JPG等图片是一项常见的任务。GDI是Windows操作系统内核的一部分,提供了丰富的图形绘制功能。以下是对这个主题的详细阐述:...
在VC6环境下,使用GDI(Graphics Device Interface)来打开PNG文件并不是一件直截了当的事情,因为GDI原生并不支持PNG这种现代的、基于压缩的图像格式。PNG(Portable Network Graphics)文件通常需要像libpng这样的...
在VC++编程环境中,"vc mtc GDI+ 双缓存画图板"是一个涉及到图形用户界面(GUI)开发的技术点。这个标题暗示我们将会讨论如何使用Microsoft的多线程类库(MTL,Multithreaded Apartment)以及GDI+图形库来实现一个双...
**VC-GDI泄漏查找工具详解** 在Windows操作系统中,GDI(Graphics Device Interface)是图形设备接口,它为应用程序提供了一种与硬件无关的方式来进行图形处理。然而,不当的GDI资源管理可能导致GDI资源泄漏,进而...
GDI+绘制文字使用Graphics::DrawString函数,其中的brush参数可以使用透明度,通过控制该透明度(逐渐减少从而增加透明度),实现文字的透明度逐渐增加,最终融入到背景中,达到渐变消失的效果。具体实现上,设置...
在Windows编程领域,Visual C++(简称VC)是一款强大的开发工具,它允许程序员利用Microsoft的图形设备接口(GDI)来创建丰富的用户界面。在这个特定的项目中,“VC用GDI与PNG图片实现半透明桌面时钟”,我们将探讨...
当我们需要在应用程序中实现动态画线,比如模拟“橡皮筋”效果,即用户在画布上拖动鼠标时能实时看到线条的变化,GDI是常用的技术之一。本篇将详细介绍如何使用VC++和GDI来实现这种画线功能,特别是橡皮筋画直线的...
在本文中,我们将深入探讨如何使用Visual C++ 6(简称VC6)和GDI+技术来开发图形用户界面(GUI)。GDI+是Windows API的一个扩展,它为开发者提供了更强大、更灵活的图形绘制功能,使得创建美观且功能丰富的用户界面...
在Windows编程领域,Visual C++(简称VC)是一种常用的开发工具,它允许程序员利用Microsoft的图形设备接口(GDI)来实现丰富的图形绘制和显示功能。本篇文章将深入探讨如何在VC项目中调用GDI来显示不同类型的图片,...