`
java-mans
  • 浏览: 11426924 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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);
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics