当使用Win32编程进行图形绘制时,通常涉及到以下函数:

InvalidateRect(),绘图前必须使用

用来声明需要重绘的区域,即失效的区域。调用此函数会触发WM_PAINT消息,由GetMessage函数发出。

InvalidateRect(
    HWND hWnd,               // 窗口句柄
    CONST RECT* lpRect,      // 矩形的重绘区域,NULL表示全部区域
    BOOL bErase              // 重绘前是否擦除
);

绘图的三个步骤

绘图通常涉及以下三个步骤:

  1. 开始申明绘图
HDC BeginPaint(
    HWND hWnd,                    // 窗口句柄
    LPPAINTSTRUCT lpPaint          // 绘图参数的指针
);

此函数在窗口过程(或子类化过程)中调用,用于获取绘图设备的句柄(HDC)。

  1. 正式绘图

  2. 结束绘图

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绘图的一些基本函数和概念的简要介绍。