原文链接:http://blog.csdn.net/poem_qianmo/article/details/7333886

GDI(Graphics Device Interface) 图形设备接口,掌管了所有显像设备的图像显示及输出功能。Windows系统现在的图形操作环境都是他的功劳。

Ⅰ.坐标与DC

*创建一个窗口,显示的屏幕上便划分出三个区域,即屏幕区(Screen),窗口区(Window)与内部窗口区(Client);

* Device Context (设备内容)即DC,DC就是程序可以进行绘图的地方;

* 在处理WM_paint以外的地方要取得窗口DC,若使用GetDC()函数取得窗口DC后,必须使用ReleaseDC()函数将DC释放。方法如下:

HDC GetDC(HWND hwnd); //取得DC

Int ReleaseDC(HWND hWnd,HDC getedhdc);//释放DC,若运行成功,返回整数1,若失败返回0 getedhdc要释放的dc

II. 画笔与画刷

* 画笔与画刷都是GDI中所定义的图形对象,画笔是线条的样式。画刷是封闭图形内部填充的样式。可以自定义绘图所用的画笔与画刷样式,系统预设画笔样式为BLACK_PEN,画刷样式为NULL_BRUSH。

* 自定义画笔或画刷样式,用下面3个API函数:

HPEN CreatePen(int 样式, int 宽度, COLORREF 颜色 );   //建立画笔HBRUSH CreateHatchBrush(COLORREF 颜色);            //建立阴影画刷HBRUSH CreateSolidBrush(COLORREF 颜色);         //建立单色画刷

* GDI对象使用的基本过程是:建立——选用——删除,GDI对象有:画笔,画刷,位图,字体,区域及调色板等。

1、建立新画笔与新画刷之后,必须在所要进行绘图的DC中选择它们,才会产生预期的画笔与画刷效果,我们采用SelectObject()函数:

HGDIOBJ SelectObject(HDC hdc,HGDIOBJ  GDI对象);     //选用GDI对象,返回先前使用的GDI对象

2、GDI对象一旦建立就会占用部分内存,一旦不使用就务必用DeleteObject将他们删除:

BOOL DeleteObject(HGDIOBJ DGI对象);             //删除GDI对象删除成功返回布尔值“ture”,若失败返回“FALSE”

III.GDI绘图函数

* virtual BOOL TextOut(

int x,          //输出字符串的X坐标

int y,           //输出字符串的Y坐标

LPCTSTR lpszString,        //字符串指针

int nCount      //字符串的长度

);

BOOL TextOut(
_In_  HDC hdc,
_In_  int nXStart,
_In_  int nYStart,
_In_  LPCTSTR lpString,
_In_  int cchString
);
The TextOut function writes a character string at the specified location, using the currently selected font, background color, and text color.
 
* 多边形函数

Polygon()   绘制封闭多边形

PolyLine()  绘制多边线条

PolybneTo()  以当前画笔所在位置绘制多边线条

PolyPolygon()  绘制多个封闭多边形

PolyPolyline()  绘制多个多边线条

BOOL Polygon(
_In_  HDC hdc,
_In_  const POINT *lpPoints,
_In_  int nCount
);

Parameters

hdc [in]

A handle to the device context.

lpPoints [in]

A pointer to an array of POINT structures that specify the vertices of the polygon, in logical coordinates.

nCount [in]

The number of vertices in the array. This value must be greater than or equal to 2.

Return value

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero.

Remarks

The polygon is closed automatically by drawing a line from the last vertex to the first.

* 封闭图形函数

1.画矩形的GDI函数

BOOL Rectangle(

int x1,

int y1,

int x2,

int y2

);

BOOL Rectangle(

LPCRECT lpRect

);

2.画椭圆的GDI函数

BOOL Ellipse(

int x1,

int y1,

int x2,

int y2

);

BOOL Ellipse(

LPCRECT lpRect

);

3.画圆角矩形

BOOL RoundRect(

int x1,

int y1,

int x2,

int y2,

int x3,

int y3

);

BOOL RoundRect(

LPCRECT lpRect,

POINT point

);

4.画扇形

BOOL Pie(

int x1,

int y1,

int x2,

int y2,

int x3,

int y3,

int x4,

int y4

);

BOOL Pie(

LPCRECT lpRect,

POINT ptStart,

POINT ptEnd

);

5.画弓形

BOOL Chord(

int x1,

int y1,

int x2,

int y2,

int x3,

int y3,

int x4,

int y4

);

BOOL Chord(

LPCRECT lpRect,

POINT ptStart,

POINT ptEnd

);

GDI相关基础知识的更多相关文章

  1. JAVA相关基础知识

    JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...

  2. iOS蓝牙开发(二)蓝牙相关基础知识

    原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...

  3. 深入理解mysql之BDB系列(1)---BDB相关基础知识

        深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富   一:BDB体系结构 1.1.BDB体系结构 BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1 ...

  4. 【RAC】RAC相关基础知识

    [RAC]RAC相关基础知识 1.CRS简介    从Oracle 10G开始,oracle引进一套完整的集群管理解决方案—-Cluster-Ready Services,它包括集群连通性.消息和锁. ...

  5. iOS蓝牙开发(一)蓝牙相关基础知识(转)

    转载自:http://www.cocoachina.com/ios/20150915/13454.html 原文作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad , ...

  6. IOS 蓝牙相关-基础知识(1)

    蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...

  7. iOS_SN_BlueTooth( 一)蓝牙相关基础知识

    原文  http://www.cocoachina.com/ios/20150915/13454.html 作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad ,ip ...

  8. ios蓝牙开发(一)蓝牙相关基础知识

    蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...

  9. SSD 相关基础知识

    SDD 基础知识 SSD(Solid State Drives)是固态硬盘,使用闪存颗粒来存储数据,闪存又可分为NAND Flash和NOR Flash,通常所说的SSD硬盘都使用NAND Flash ...

随机推荐

  1. JS表单验证类HTML代码实例

    以前用的比较多的一个JS表单验证类,对于个人来说已经够用了,有兴趣的可以在此基础上扩展成ajax版本.本表单验证类囊括了密码验证.英文4~10个 字符验证. 中文非空验证.大于10小于100的数字.浮 ...

  2. UNIX时间戳及日期的转换与计算

    UNIX时间戳是保存日期和时间的一种紧凑简洁的方法,是大多数UNIX系统中保存当前日期和时间的一种方法,也是在大多数计算机语言中表示日期和时间的一种标准格式.以32位整数表示格林威治标准时间,例如,使 ...

  3. CPU进程与线程的关系和区别

    进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位. ...

  4. 从windows server 2003中学到的事儿

    2003让我学会了几件事儿, 第一.自己会装系统了. 第二.知道很多选项是可以自己进行设置的.这点很重要,本来xp用得很习惯,然后很多都理所当然得认为,就应该是那个样子,可是,并不是的. 在2003不 ...

  5. 【转】ipad死机了,无法退出,也无法关机,怎么办

    原文网址:http://zhidao.baidu.com/link?url=oTz6J78hmtCAKddhwu1ITUiPmLnVJIaA_v_0dZblPaIJUhuMdyTCdS6H2737GX ...

  6. android仿京东、淘宝商品详情页上拉查看详情

    话不多说,直接上干货,基本就是一个scrollview中嵌套两个scrollview或者webview;关键点事处理好子scrollview和父scrollview的触摸.滑动事件已达到想要的效果.大 ...

  7. android SimpleCursorAdapter的使用

    String[] fields=new String[]{"foodname","price","taste","stuff&qu ...

  8. ACM2114_S[I](1^3+2^3+3^3)

    #include<iostream> using namespace std; int main() { __int64 n,m,i,j,sum; while(cin>>n) ...

  9. LA 4794 - Sharing Chocolate dp

    题意 有一块\(x*y\)的巧克力,问能否恰好分成n块,每块个数如下 输入格式 n x y a1 a2 a3 ... an 首先\(x \times y 必然要等于 \sum\limits_{i=1} ...

  10. 深入理解linux网络技术内幕读书笔记(十)--帧的接收

    Table of Contents 1 概述 1.1 帧接收的中断处理 2 设备的开启与关闭 3 队列 4 通知内核帧已接收:NAPI和netif_rx 4.1 NAPI简介 4.1.1 NAPI优点 ...