`
txf2004
  • 浏览: 6999424 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

windows程序设计 第五章笔记 GDI(1)

 
阅读更多

我们在对 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版(高清PDF+美化版+WORD版)

    《Windows程序设计第5版》是一本深入探讨Windows操作系统下程序开发的经典著作,适用于程序员、计算机科学学生以及对Windows系统编程感兴趣的读者。该书详细介绍了如何利用Microsoft的API(应用程序接口)来创建高效...

    Windows程序设计 (第五版) (C语言API) chm版word版

    《Windows程序设计 (第五版) (C语言API)》是一本深入探讨Windows操作系统下C语言编程的经典著作。这本书由Charles Petzold撰写,是许多程序员学习Windows API编程的首选教材。书中详细阐述了如何利用C语言直接调用...

    win32 笔记 win32 笔记

    - **《Windows程序设计》**:由Charles Petzold编写,是学习Windows编程的经典之作。 - **《Windows API程序设计大全》**:全面介绍Windows API函数的应用和实践。 - **《C++ Primer》**:由Stanley B. Lippman和Jos...

    笔记本电脑键盘检测软件Keyboard Test中文版

    1. HA_KeyboardTest221011_WGL.exe:这是Keyboard Test软件的安装程序,版本号可能是221011,表示2022年10月11日发布的版本,WGL可能代表它支持Windows图形库(Windows GDI+),或者表示它包含全英文字符集的支持。...

    vc技术内幕学习笔记

    - **MFC简介**: MFC是C++的Microsoft Windows API,专为开发WINDOWS应用程序设计。 - **优点**: - 标准化的结构: 提供了一套统一的应用程序框架,简化开发流程。 - 应用程序短小且运行速度快: 可以轻松构建动态...

    面试时作的学习笔记

    GDI(图形设备接口)是Windows操作系统中的类库,用于图像设备编程。 【STRUTS 框架】 Struts是一个基于Servlet和JSP的开源框架,用于构建Web应用程序。它的功能包括: 1. 一个控制器Servlet,将用户请求分发到...

    Delphi学习笔记

    Delphi是一种强大的面向对象的编程环境,主要用于开发Windows桌面应用程序。它基于Pascal语言,并集成了Visual Component Library(VCL)框架,使得开发者能够高效地创建功能丰富的图形用户界面(GUI)。Delphi的...

    C#期末考试复习笔记.doc

    GDI+是用于Windows图形绘制的API。创建Graphics对象是进行图形绘制的第一步,通常通过控件或窗体的`CreateGraphics`方法。`Pen`和`Brush`分别用于绘制线条和填充区域,`Point`和`Rectangle`是结构体,用于描述坐标和...

    ABC.rar_ABC

    1. **Windows API**:VC++应用程序通常基于Windows API进行开发,这个API提供了创建、管理和操作窗口的功能。为了创建无标题浮动窗口,开发者需要熟悉`CreateWindowEx`或`CreateWindow`函数,以及设置窗口样式(如WS...

    lwXPDVD_visualbasic_

    【描述】提到的“源码”是程序设计中的关键部分,它揭示了软件的实际工作原理。对于学习和理解VB编程,尤其是多媒体处理的开发者来说,提供源代码是非常宝贵的资源。源代码可以让人深入研究如何处理视频解码、播放...

    吃金豆报告

    - **书籍推荐:** 《C#程序设计语言》、《C#高级编程》等。 - **在线资源:** Stack Overflow、GitHub等社区平台上的教程和示例代码。 以上是对“吃金豆”游戏设计与实现的全面总结,涵盖了从开发环境搭建到具体...

Global site tag (gtag.js) - Google Analytics