WINDING方式不能填充所有内部区域的图形的例子

来源:互联网 发布:8.14特大网络盗窃案 编辑:程序博客网 时间:2024/05/06 06:26

Polygon函数和多边形填充模式:

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){     static int cxChar,cxCaps,cyChar,cxClient,cyClient; TCHAR szBuffer[10]; HDC hdc; int i; RECT rect; PAINTSTRUCT ps; TEXTMETRIC tm; HPEN hPen; HPEN hPen1,hPen2,hPen3; LOGPEN logpen; HBRUSH hbrush;int x,y;POINT apt[10];static POINT aptFigure[10]={10,70,50,70,50,10,90,10,90,50,30,50,30,90,70,90,70,30,10,30}; switch(message){case WM_CREATE:hdc=GetDC(hwnd);GetTextMetrics(hdc,&tm);cxChar=tm.tmAveCharWidth;cxCaps=(tm.tmPitchAndFamily&1?3:2)*cxChar/2;cyChar=tm.tmHeight+tm.tmExternalLeading;ReleaseDC(hwnd,hdc);return 0;case WM_SIZE:cxClient=LOWORD(lParam);cyClient=HIWORD(lParam);return 0;case WM_PAINT:hdc=BeginPaint(hwnd,&ps);//GetClientRect(hwnd,&rect);/*SetBkColor(hdc,RGB(255,0,0));SetBkMode(hdc,TRANSPARENT);SetBkMode(hdc,OPAQUE);hPen=CreatePen(PS_DOT,1,0);SelectObject(hdc,hPen);Rectangle(hdc,100,100,300,200);*//*hbrush=(HBRUSH)GetStockObject(GRAY_BRUSH);SelectObject(hdc,hbrush);SelectObject(hdc,GetStockObject(NULL_PEN));Rectangle(hdc,120,120,220,220);Rectangle(hdc,100,100,200,200);Ellipse(hdc,500,500,300,200);*/SelectObject(hdc,GetStockObject(GRAY_BRUSH));for(i=0;i<10;++i){apt[i].x=cxClient*aptFigure[i].x/200;apt[i].y=cyClient*aptFigure[i].y/100;}SetPolyFillMode(hdc,ALTERNATE);Polygon(hdc,apt,10);for(i=0;i<10;++i){apt[i].x+=cxClient/2;}SetPolyFillMode(hdc,WINDING);Polygon(hdc,apt,10);EndPaint(hwnd,&ps);return 0;case WM_DESTROY:PostQuitMessage(0);return 0; } return DefWindowProc(hwnd,message,wParam,lParam);}