我们在对 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) ;
分享到:
相关推荐
《Windows程序设计第5版》是一本深入探讨Windows操作系统下程序开发的经典著作,适用于程序员、计算机科学学生以及对Windows系统编程感兴趣的读者。该书详细介绍了如何利用Microsoft的API(应用程序接口)来创建高效...
《Windows程序设计 (第五版) (C语言API)》是一本深入探讨Windows操作系统下C语言编程的经典著作。这本书由Charles Petzold撰写,是许多程序员学习Windows API编程的首选教材。书中详细阐述了如何利用C语言直接调用...
- **《Windows程序设计》**:由Charles Petzold编写,是学习Windows编程的经典之作。 - **《Windows API程序设计大全》**:全面介绍Windows API函数的应用和实践。 - **《C++ Primer》**:由Stanley B. Lippman和Jos...
1. HA_KeyboardTest221011_WGL.exe:这是Keyboard Test软件的安装程序,版本号可能是221011,表示2022年10月11日发布的版本,WGL可能代表它支持Windows图形库(Windows GDI+),或者表示它包含全英文字符集的支持。...
- **MFC简介**: MFC是C++的Microsoft Windows API,专为开发WINDOWS应用程序设计。 - **优点**: - 标准化的结构: 提供了一套统一的应用程序框架,简化开发流程。 - 应用程序短小且运行速度快: 可以轻松构建动态...
GDI(图形设备接口)是Windows操作系统中的类库,用于图像设备编程。 【STRUTS 框架】 Struts是一个基于Servlet和JSP的开源框架,用于构建Web应用程序。它的功能包括: 1. 一个控制器Servlet,将用户请求分发到...
Delphi是一种强大的面向对象的编程环境,主要用于开发Windows桌面应用程序。它基于Pascal语言,并集成了Visual Component Library(VCL)框架,使得开发者能够高效地创建功能丰富的图形用户界面(GUI)。Delphi的...
GDI+是用于Windows图形绘制的API。创建Graphics对象是进行图形绘制的第一步,通常通过控件或窗体的`CreateGraphics`方法。`Pen`和`Brush`分别用于绘制线条和填充区域,`Point`和`Rectangle`是结构体,用于描述坐标和...
1. **Windows API**:VC++应用程序通常基于Windows API进行开发,这个API提供了创建、管理和操作窗口的功能。为了创建无标题浮动窗口,开发者需要熟悉`CreateWindowEx`或`CreateWindow`函数,以及设置窗口样式(如WS...
【描述】提到的“源码”是程序设计中的关键部分,它揭示了软件的实际工作原理。对于学习和理解VB编程,尤其是多媒体处理的开发者来说,提供源代码是非常宝贵的资源。源代码可以让人深入研究如何处理视频解码、播放...
- **书籍推荐:** 《C#程序设计语言》、《C#高级编程》等。 - **在线资源:** Stack Overflow、GitHub等社区平台上的教程和示例代码。 以上是对“吃金豆”游戏设计与实现的全面总结,涵盖了从开发环境搭建到具体...