无效客户区

【勇芳软件工作室】汉化HomePreviousNext

Windows不是WM_PAINT消息的唯一来源。InvalidateRectInvalidateRgn功能可以间接地为您的Windows生成WM_PAINT消息。这些功能将客户区域的全部或部分标记为无效(必须重绘)。

在以下示例中,窗口过程在处理WM_CHAR消息时使整个客户端区域无效。这允许用户通过键入数字并查看结果来更改数字;一旦应用程序的消息队列中没有其他消息,就会绘制这些结果。

POINT aptPentagon[6] = {50,2, 98,35, 79,90, 21,90, 2,35, 50,2},

aptHexagon[7] = {50,2, 93,25, 93,75, 50,98, 7,75, 7,25, 50,2};

POINT *ppt = aptPentagon;

int cpt = 6;

.

.

.

case WM_CHAR:

开关(wParam){

case '5':

ppt = aptPentagon;

cpt = 6;

break;

case '6':

ppt = aptHexagon;

cpt = 7;

break;

}

InvalidateRect(hwnd, NULL, TRUE);

return 0L;

case WM_PAINT:

hdc = BeginPaint(hwnd, &ps);

GetClientRect(hwnd, &rc);

SetMapMode(hdc, MM_ANISOTROPIC);

SetWindowExtEx(hdc, 100, 100, NULL);

SetViewportExtEx(hdc, rc.right, rc.bottom, NULL);

Polyline(hdc, ppt, cpt);

EndPaint(hwnd, &ps);

return 0L;

在这个例子中,InvalidateRect使用的NULL参数指定整个客户区; TRUE参数导致背景被删除。如果您不希望应用程序等到应用程序的消息队列没有其他消息,请使用UpdateWindow功能强制立即发送WM_PAINT消息。如果客户区域有无效部分,UpdateWindow将给定窗口的WM_PAINT消息直接发送到窗口过程。