Win API记录点滴
这里记叙了在Windows下GDI编程的一些函数,用GDI函数可以有效的控制视窗的显示。尤其涉及到Windows图形编程,GDI函数将非常有用.
关于种种函数,在《Windows程序设计》书中有详尽的描述,《Windows图形编程》更是阐述了更高级的图形编程方面的函数和使用.
首先要说明的是:GDI的主要目的是支援与装置无关的图形.图形的输出又可分为两大类,位元图设备和向量图设备.
另外,要明白装置的概念,所谓装置,打个比方来说,就是画家作画的那一套设备,包括画板,画笔,画夹等.在这里,我们可以把纸当画板,可以把桌子当画板等等.装置的概念也一样,可以把视窗当装置,可以把打印机当装置,可以把投影仪当作装置.如果可以的话,硬盘,内存当作装置问题也不大.在Windows中,BRUSH,PEN,FONT就相当于你的画笔,颜料等.属于装置的内容属性.
现在,我们用GDI来在屏幕上作画,在作画之前,我们要获得应用程序某个窗口的装置(因为我们的画是画在这个窗口内的).
获得装置的方法有很多,介绍几种:
hdc = GetDC (hwnd) ;
其他行程式
ReleaseDC (hwnd, hdc) ;
hdc = GetWindowDC (hwnd) ;
其他行程式
ReleaseDC (hwnd, hdc)
hdc = CreateDC (pszDriver, pszDevice, pszOutput, pData) ;
其他行程式
DeleteDC (hdc) ;
hdcMem = CreateCompatibleDC (hdc) ;
其他行程式
DeleteDC (hdcMem) ;
具体的可参考MSDN和WINDOWS程序设计.
装置的内容是取得了,但是我们的装置(即画布)有什么样的特征呢?比如,窗口有多大?有多宽?系统有多少种颜色?这些在作画时有时需要考虑到.
取得装置内容的信息,有一个函数:
iValue = GetDeviceCaps(hdc,iIndex);
查看MSDN可以发现,通过它可以获得很多的信息,比如,当前的屏幕像素是多少(HORZRES,VERTRES)?,以毫米为单位长宽是多少(HORZSIZE,VERTSIZE),?等等,具体的参数有MSDN可翻查.
下面介绍的是画线函数:
LineTo 画直线。
Polyline和PolylineTo 画一系列相连的直线。
PolyPolyline 画多组相连的线。
Arc 画椭圆线。
PolyBezier和PolyBezierTo 画贝塞尔曲线。
ArcTo和AngleArc 画椭圆线。
PolyDraw 画一系列相连的线以及贝塞尔曲线。
画封闭区域的函数:
Rectangle 画矩形。
Ellipse 画椭圆。
RoundRect 画带圆角的矩形。
Pie 画椭圆的一部分,使其看起来像一个扇形。
Chord 画椭圆的一部分,以呈弓形。
有些函数可以辅助我们以便画出需要的图形,比如:
GetCurrentPositionEx(hdc,&pt); //获得目前位置
GetClientRect(hwnd,&rect); //获得窗口的矩形大小