我们在对 windows 设备进行绘图操作的时候要用到 GDI 函数 并且要获取 设备的 DC 也就是设备的代号
如果是响应WM_PAINT 消息 那么 我们利用
BeginPaint
.......code
EndPaint
获取设备上下文代号
如果处理的不是 WM_PAINT 消息 那么 就利用
GetDC
.....code
ReleaseDC //释放DC
如果我们要获取整个视窗的DC那么用 GetWindowDC
如果要获取 Client Area的DC那么用GetClientDC 来获取 但是最后都要掉哟过ReleaseDC来释放设备上下文
在MSDN我们可以看到 我们在 GetDC后 一定要调用 ReleaseDC 而一定不能调用 DeleteDC
DeleteDC是 在 CreateDC后调用的 。。。。。
hdcMem = CreateCompatibleDC (hdc) ; //兼容DC
其他行程式
DeleteDC (hdcMem) ;
hdcMeta = CreateMetaFile (pszFilename) ;
其他行程式
hmf = CloseMetaFile (hdcMeta)
int GetDeviceCaps( HDC
hdc, // handle to DC int
nIndex // index of capability); 获得设备的信息
SetPixel 绘制一个点
GetPixel 可以返回指定设备指定坐标上的点的颜色
BOOL Polyline( //这个函数的功能是可以将多个点连续的画起来
HDC hdc,
// handle to device context
CONST POINT *lppt,
// array of endpoints //POINT 结构体数组
int cPoints // number of points in array); //POINT 结构体数组的个数
Rectangle、矩形
Ellipse、 绘制椭圆
RoundRect 绘制一个边角圆滑的椭圆
BOOL RoundRect(
HDC hdc,
// handle to DC
int nLeftRect,
// x-coord of upper-left corner of rectangle
int nTopRect,
// y-coord of upper-left corner of rectangle
int nRightRect,
// x-coord of lower-right corner of rectangle
int nBottomRect,
// y-coord of lower-right corner of rectangle
int nWidth,
// width of ellipse //值越大 边角就越明显
int nHeight // height of ellipse); //值越大 边角就越明显
Chord 绘制一个弦
Pie 饼图函数绘 制一个扇形楔,由一个椭圆形和两个子午线轮胎的交集范围内。通过使用当前画笔的馅饼概述,并通过使用当前画笔填充。
Arc 绘制一个椭圆弧
PolyBezier 贝塞尔曲线
PolyBezierTo 也是画贝塞尔曲线
在绘制线的时候对画笔的 设置
HPEN pen ;
pen=GetStockObject (WHITE_PEN) ;
SelectObject(hdc,pen) ;// 这样就 为我们的设备上下文设置了白色的画笔 选择的时候必须用 GetStockObject获取画笔
受限与 windows的几种画笔 我们可以通过函数创建自己的画笔
CreatePen 或者 CreatePenIndirect 使用完了之后 我们需要DelectObject删除 逻辑画笔 这是一种GDI物件
其他的物件有 其他五种是画刷、点阵图、区域、字体和调色盘。除了调色盘之外,这些物件都是通过SelectObject选进装置内容的。
hPen =CreatePen(PS_DASH,1,RGB(122,233,55));
SelectObject (hdc,hPen) ; //这个例子创建了一个浅绿色的画笔
DeleteObject(hPen) ; //删除创建的GDI物件 也就是逻辑画笔
ClentToScreen 是客户坐标到屏幕的转换
ScreenToClient是屏幕到客户的转换
GetWindowRect是相对于 屏幕的左上角的(0,0)
创建逻辑画笔的第二种方法
LOGPEN logpen ;
hPen = CreatePenIndirect (&logpen) ;
DeleteObject(logpen); //可以在响应WM_DESTROY的时候 删除画笔
int GetObject(
HGDIOBJ hgdiobj, // handle to graphics object
int cbBuffer, // size of buffer for object information
LPVOID lpvObject // buffer for object information
);
这个函数的用法是 如果 我们有位图或者 画笔 或者。。的句柄那么我们能获得对应的 GDI对象的信息
如果需要目前选进装置内容的画笔代号,可以呼叫: 也就是我们要获取当前设备的画笔句柄 也可以获取其他句柄 具体看MSDN函数的介绍
hPen = GetCurrentObject (hdc, OBJ_PEN) ;
在画虚线的时候我们也可以 用 SetBkColor填充 虚线的空白地方
SetBkMode(TRANSPARENT) ;会设置 背景模式为透明的 。。 GetBkMode 可以获取现在的背景模式 也就是返回 SetBkMode设置的背景参数
GetObject喝 GetCurrentObject的区别 GetObject是通过句柄获取 设备的属性 GetCurrentObject是获取当前设备的句柄 通过参数 。。
函式
图形
Rectangle |
直角矩形 |
Ellipse |
椭圆 |
RoundRect |
圆角矩形 |
Chord |
椭圆周上的弧,两端以弦连接 |
Pie |
椭圆上的圆形图 |
Polygon |
多边形 MSDN |
PolyPolygon |
多个多边形 N个 |
SetPolyFillMode (hdc, iMode) ; 设置多边形填充模式
如果我们要对背景进行填充那么就要创建画刷了 画刷 句柄HBRUSH 可以用到 CreateSolidBrush (crColor) ; 函数 和
CreateHatchBrush (iHatchStyle, crColor) ; 带斜线的画刷
hBrush = CreateBrushIndirect (&logbrush) ; 间接的创建画刷
如果要取得画刷的 信息一样可以调用 GetObject来实现
我们还可以选择坐标的映射方式
SetMapMode (hdc, iMapMode ) //那么 我们可以设置 x y坐标的初始起点
同样 有Set就对应有GetMapMode
还有一些常用的函数
GetTextExtend 获取一段文本的信息
GetTextMetrics 获取系统文本度量
GetSystemMetrics 获取系统的度量
GetDeviceCaps 获取设备信息
GetCursorPos 获取鼠标位置
SetCursor set鼠标位置
MoveWindow 移动窗体
GetWindowRect 获取窗体的举行 相当于 Desktop
GetClientRect 获取客户区域的举行相对于window
ScreenToClient ClientToScreen 客户 屏幕坐标的转换
DptoLP
函数功能:该函数将设备坐标转变为逻辑坐标,转变依赖于设备的图形模式,窗口和坐标的起点及范围的设置,和转换的内容。
SetRect设置 举行的值
PeekMessage和GetMessage有类似的功能但是不同的是 PeekMessage可以对消息进行处理 例如从消息队列中国删除消息
建立剪裁区域 HRGN 也是GDI物件 之一也可以调用DeleteObject删除
创建剪裁区域的2中方法
hRgn = CreateRectRgn (xLeft, yTop, xRight, yBottom) ;
或者
hRgn = CreateRectRgnIndirect (&rect) ;
您也可以建立椭圆剪裁区域:
hRgn = CreateEllipticRgn (xLeft, yTop, xRight, yBottom) ;
或者
hRgn = CreateEllipticRgnIndirect (&rect) ;
分享到:
相关推荐
1、掌握主窗口、子窗口的创建、显示、销毁方法 2、掌握窗口间消息传递、参数的传递的方法 3、掌握在WM_PAINT消息和在其他消息中得到DC的方法 4、掌握的常见的绘图函数的使用、画笔、画刷的使用 5、掌握WM_CREATE、WM...
《C语言程序设计(第五版)谭浩强》学习笔记
近有幸拜读了Charles Petzold的大作《Windows程序设计》,真有种相见恨晚的感觉。这是一本1999年出版、主要讲述在Windows平台下如何使用C语言调用API函数进行软件开发的老书。在当今RAD工具充斥市场的今天,该书依然...
《ASP程序设计》备课笔记 《ASP程序设计》教学大纲 《ASP程序设计》考试大纲 《ASP程序设计》实验备课笔记 《ASP程序设计》实验大纲 《ASP程序设计》实验指导书 《ASP程序设计》期末考试答案 《ASP程序设计》期末...
Windows环境MASN32汇编程序设计学习笔记Windows环境MASN32汇编程序设计学习笔记Windows环境MASN32汇编程序设计学习笔记Windows环境MASN32汇编程序设计学习笔记Windows环境MASN32汇编程序设计学习笔记Windows环境MASN...
《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》...
windows环境MASM32汇编程序设计学习笔记windows环境MASM32汇编程序设计学习笔记windows环境MASM32汇编程序设计学习笔记windows环境MASM32汇编程序设计学习笔记
C++程序设计复习笔记.doc
C语言程序设计重点笔记.doc C语言程序设计重点笔记.doc C语言程序设计重点笔记.doc C语言程序设计重点笔记.doc C语言程序设计重点笔记.doc C语言程序设计重点笔记.doc C语言程序设计重点笔记.doc C语言程序设计重点...
HTML5高级程序设计学习笔记,僅供參考。
windows程序设计读书笔记一(窗口与消息)
【笔记】谭浩强C语言程序设计--简明笔记.pdf
一位具有工作经验的程序员对《windows程序设计》的切身感悟!
MFC Windows程序设计(第二版)精华浓缩笔记,内容丰富详实,可以帮助MFC初学者快速入门
Java程序设计个人所整理的一些笔记
c程序设计语言学习摘录笔记。方便复习和查询。
windows驱动程序开发的学习笔记,对初学windows驱动程序下的开发很有帮助,对开发中会出现的问题做了详细的分析
华北电力大学C语言程序设计考研笔记。学长上岸宝典,涵盖了谭浩强《C程序设计》的全部知识点,框架清晰,调理明确
NULL 博文链接:https://liujunsong.iteye.com/blog/460309
《VF程序设计》实验备课笔记 《VF程序设计》实验教学大纲 《VF程序设计》课程备课笔记 《VF程序设计》 习题及解答 《VF程序设计》课程教学大纲 《VF程序设计》课件 本人所用的一整套教学资料,与大家分享。