Windows编程的图形基础(一)HDC, HPEN, HBRUSH
2011-11-28 12:19
204 查看
在windows编程中,要在设备(显示器)上显示相应的图像,这里先针对简单的对象,比如line, polygon, 矩形,椭圆等,实现的具体过程如下:
首先要获得设备句柄,有了设备句柄你才可以在相应设备上输出图形,用GetDC和RealseDC函数来获得和释放设备句柄。然后在BeginPaint和EndPaint函数()中执行相应的绘画。
每个设备都有其相应的属性,例如在设备中的输出字体,就有相应的字体属性,有字体颜色,大小,还有TextAlign等属性,通过SetTextAlign及对应的GetTextAlign函数来设定。
当设备要输出对一些线段或一些多边形时,就要有相应的Pen和Brush。Pen,Brush等也有相应的句柄和相应的属性,它们的属性不属于设备属性的值。而Pen,Brush等是属于设备的属性。比如Pen画的线,就有线的宽度和长度和画笔样式,它是一个逻辑画笔,通过CreatePen、 CreatePenIndirect或ExtCreatePen函数中指定这些特征来建立一个逻辑画笔,这些函数传回一个逻辑画笔的句柄,然后设备把这画笔句柄选进设备内容。我们认为,设备内容中目前选中的画笔就是设备内容的一个属性。但是。清除画笔对象是必要的,因为画笔定义占用了分配的内存空间。而在结尾清除设备上下文的句柄也是必要的,他们也占据了一定的内存空间。
下面来谈谈HPEN和HBRUSH
首先当然是申明一个HPEN,HPEN hPen,我们可以通过调用GetStockObject(WHITE_PEN),CreatePen(iPenStyle,iWidth, crColor), 和CreatePenIndirect(CONST LOGPEN*lplgpn)其返回值都是HPEN,他们的区别就是,stock
Pen,就是系统库存的pen颜色,他们是WHITE_PEN, BLACK_PEN, NULL_PEN这些样式可以直接从GetStockObject()函数获得。而其中CreatePenIndirect()就是把pen的一些样式属性比如penStyle,width,color的值放入LOGPEN结构体中,从而构建HPEN。
设备上下文通过SelectObject(hdc, hPen)函数把相应的pen选入设备上下文属性中。
在不用这些pen后,应调用DeleteObject(hPen)把他们清理掉。
而HBRUSH的情况和HPEN的情况类似,Windows还有五个函数,可以让您建立逻辑画刷,然后就可使用SelectObject将画刷选进设备内容。与逻辑画笔一样,逻辑画刷也是GDI对象。您建立的所有画刷都必须被删除。
hBrush = CreateSolidBrush (crColor) ;
hBrush = CreateHatchBrush (iHatchStyle,crColor) ;
CreatePatternBrush
CreateDIBPatternBrushPt
hBrush = CreateBrushIndirect(&logbrush) ;
变量logbrush是一个型态为LOGBRUSH(「逻辑画刷」 )的结构
一旦您取得到了画刷句柄,就可以使用SelectObject将该画刷选进设备内容:
SelectObject (hdc, hBrush) ;
然后,您可以使用DeleteObject函数删除所建立的画刷:
DeleteObject (hBrush) ;
其中以上函数的详细信息可以参见MSDN。
首先要获得设备句柄,有了设备句柄你才可以在相应设备上输出图形,用GetDC和RealseDC函数来获得和释放设备句柄。然后在BeginPaint和EndPaint函数()中执行相应的绘画。
每个设备都有其相应的属性,例如在设备中的输出字体,就有相应的字体属性,有字体颜色,大小,还有TextAlign等属性,通过SetTextAlign及对应的GetTextAlign函数来设定。
当设备要输出对一些线段或一些多边形时,就要有相应的Pen和Brush。Pen,Brush等也有相应的句柄和相应的属性,它们的属性不属于设备属性的值。而Pen,Brush等是属于设备的属性。比如Pen画的线,就有线的宽度和长度和画笔样式,它是一个逻辑画笔,通过CreatePen、 CreatePenIndirect或ExtCreatePen函数中指定这些特征来建立一个逻辑画笔,这些函数传回一个逻辑画笔的句柄,然后设备把这画笔句柄选进设备内容。我们认为,设备内容中目前选中的画笔就是设备内容的一个属性。但是。清除画笔对象是必要的,因为画笔定义占用了分配的内存空间。而在结尾清除设备上下文的句柄也是必要的,他们也占据了一定的内存空间。
下面来谈谈HPEN和HBRUSH
首先当然是申明一个HPEN,HPEN hPen,我们可以通过调用GetStockObject(WHITE_PEN),CreatePen(iPenStyle,iWidth, crColor), 和CreatePenIndirect(CONST LOGPEN*lplgpn)其返回值都是HPEN,他们的区别就是,stock
Pen,就是系统库存的pen颜色,他们是WHITE_PEN, BLACK_PEN, NULL_PEN这些样式可以直接从GetStockObject()函数获得。而其中CreatePenIndirect()就是把pen的一些样式属性比如penStyle,width,color的值放入LOGPEN结构体中,从而构建HPEN。
设备上下文通过SelectObject(hdc, hPen)函数把相应的pen选入设备上下文属性中。
在不用这些pen后,应调用DeleteObject(hPen)把他们清理掉。
而HBRUSH的情况和HPEN的情况类似,Windows还有五个函数,可以让您建立逻辑画刷,然后就可使用SelectObject将画刷选进设备内容。与逻辑画笔一样,逻辑画刷也是GDI对象。您建立的所有画刷都必须被删除。
hBrush = CreateSolidBrush (crColor) ;
hBrush = CreateHatchBrush (iHatchStyle,crColor) ;
CreatePatternBrush
CreateDIBPatternBrushPt
hBrush = CreateBrushIndirect(&logbrush) ;
变量logbrush是一个型态为LOGBRUSH(「逻辑画刷」 )的结构
一旦您取得到了画刷句柄,就可以使用SelectObject将该画刷选进设备内容:
SelectObject (hdc, hBrush) ;
然后,您可以使用DeleteObject函数删除所建立的画刷:
DeleteObject (hBrush) ;
其中以上函数的详细信息可以参见MSDN。
相关文章推荐
- windows基础编程----第四篇(调用GDI绘制出相关图形)
- OpenGL基础图形编程 - OpenGL光照
- Windows编程基础 第五章 鼠标消息 定时器 菜单
- OpenGL基础图形编程 - 复杂物体建模
- Windows编程基础 第六章 系统菜单 上下文相关菜单 图标 光标 字符串 菜单 加速键
- 将Java程序变成Windows系统服务-Java基础-Java-编程开发
- 使用Java操作Windows注册表-Java基础-Java-编程开发
- Windows编程基础 第八章 位图 坐标系映射模式 文字和字体 对话框
- 有一定基础的 C++ 学习者该怎样学习 Windows 编程?
- Windows编程基础 第十一章 动态库 静态库
- OpenGL基础图形编程 - OpenGL数据类型和函数名
- Win32 OpenGL编程(4) 2D图形基础(颜色及坐标体系进阶知识)
- Windows 网络编程基础(转贴)
- OpenGL基础图形编程
- (C#)Windows Shell 外壳编程系列1 - 基础,浏览一个文件夹
- MFC Windows编程基础( 学习记录2015.3)
- windows编程基础
- Windows网络编程基础学习
- Windows编程基础--窗体篇[转载]
- Java高手真经. 编程基础卷:Java核心编程技术:Java基础+核心库+图形+网络+高级特性