当使用Win32编程进行图形绘制时,通常涉及到以下函数:
InvalidateRect(),绘图前必须使用
用来声明需要重绘的区域,即失效的区域。调用此函数会触发WM_PAINT
消息,由GetMessage函数发出。
InvalidateRect(
HWND hWnd, // 窗口句柄
CONST RECT* lpRect, // 矩形的重绘区域,NULL表示全部区域
BOOL bErase // 重绘前是否擦除
);
绘图的三个步骤
绘图通常涉及以下三个步骤:
- 开始申明绘图
HDC BeginPaint(
HWND hWnd, // 窗口句柄
LPPAINTSTRUCT lpPaint // 绘图参数的指针
);
此函数在窗口过程(或子类化过程)中调用,用于获取绘图设备的句柄(HDC)。
-
正式绘图
-
结束绘图
BOOL EndPaint(
HWND hWnd, // 窗口句柄
CONST PAINTSTRUCT* lpPaint // 绘图参数的指针
);
此函数用于结束绘图,并释放操作系统的GDI(图形设备接口)。
绘图设备DC(Device Context)
DC(Device Context)是绘图上下文或描述绘图信息的结构。HDC是DC的句柄,类似于绘图设备。
GDI是Windows图形设备接口,提供了许多绘图函数,用于绘制图形。
颜色
颜色通过RGB表示。
在绘图中,我们可以抓取GDI(绘图设备的句柄,可以看作一位画家):
HDC hdc = BeginPaint(hWnd, ...);
然后可以使用TextOut
函数告诉hdc在哪个点绘图:
TextOut(hdc, ...);
最后,使用EndPaint
函数结束绘图,并释放操作系统的GDI:
EndPaint(hWnd, ...);
颜色的数据类型为COLORREF
,等同于DWORD
。我们可以使用宏RGB(X,X,X)
来赋值颜色。
要获取RGB的各个分量,可以使用以下函数:
GetRValue()
GetGValue()
GetBValue()
绘图函数
在绘图中,常用的函数包括:
SetPixel()
:在指定点绘制一个颜色。MoveToEx()
:指定窗口当前的点位置,初始化为(0,0)。LineTo()
:从当前点绘制一条直线到指定点。Rectangle()
:绘制一个矩形。Ellipse()
:绘制一个椭圆。
这些函数可以在WM_PAINT
消息处理函数或其他需要绘图的地方使用,通过传递适当的参数来实现不同的绘图效果。
封闭图形
封闭图形是指可以使用画刷进行填充的图形,例如矩形(Rectangle()
)和椭圆(Ellipse()
)等函数可以绘制封闭图形。
以上是关于Win32绘图的一些基本函数和概念的简要介绍。