// ■歪んだ市松模様 #include "myWin.h" #include "math.h" static HDC hbuf; static HBITMAP hBM; double PI=3.14159265358979; double dPI=PI/16; void initBitMap(HWND hw){// ビットマップ作成とメモリデバイスコンテキスト作成 HDC hdc=GetDC(hw); hBM=CreateCompatibleBitmap(hdc,1000,1000); hbuf=CreateCompatibleDC(hdc);SelectObject(hbuf,hBM); SelectObject(hbuf,GetStockObject(NULL_PEN)); PatBlt(hbuf,0,0,1000,1000,WHITENESS); ReleaseDC(hw, hdc); } void Draw(){ HPEN pen[4]; HBRUSH brush[4]; pen[0] = CreatePen(PS_SOLID,1,0x0000FF); brush[0] = CreateSolidBrush(0x0000FF); pen[1] = CreatePen(PS_SOLID,1,0xAAFFFF); brush[1] = CreateSolidBrush(0xAAFFFF); pen[2] = CreatePen(PS_SOLID,1,0xFF0000); brush[2] = CreateSolidBrush(0xFF0000); pen[3] = CreatePen(PS_SOLID,1,0xFFAAFF); brush[3] = CreateSolidBrush(0xFFAAFF); int XST,YST=30, ifl=0, MX=70,ix=0; for(int k1=0;k1<4;k1++){ XST=35;ifl=1-ifl;ix=2-ix; for(int k2=0;k2<4;k2++){ int X1=0;ix=2-ix; for(int i= -8; i<=8;i++){ //int X2=X1+(int) sqrt((double)(MX-i*i)), Y1=0; int X2=X1+(int)(cos(dPI*i)*10+0.5), Y1=0; for(int j=-8;j<=8;j++){ ifl=1-ifl; //int Y2=Y1+(int) sqrt((double)(MX-j*j)); int Y2=Y1+(int)(cos(dPI*j)*10+0.5); SelectObject(hbuf,pen[ifl+ix]); SelectObject(hbuf,brush[ifl+ix]); Rectangle(hbuf,XST+X1,YST+Y1,XST+X2,YST+Y2); Y1=Y2; } X1=X2; } XST+=103; } YST+=103; } DeleteObject(pen[0]);DeleteObject(brush[0]); DeleteObject(pen[1]);DeleteObject(brush[1]); DeleteObject(pen[2]);DeleteObject(brush[2]); DeleteObject(pen[3]);DeleteObject(brush[3]); } void procCreate(HWND hw, WPARAM wp, LPARAM lp){ SetWindowText(hw,TEXT("歪んだ市松模様を描いてみた(その2)")); MoveWindow(hw,0,0,500,500,true); initBitMap(hw);Draw(); InvalidateRect(hw,NULL,FALSE); } void procPaint(HWND hw, WPARAM wp, LPARAM lp){// ビットマップを画面に表示 PAINTSTRUCT ps; HDC hdc=BeginPaint(hw, &ps); BitBlt(hdc,0,0,1000,1000,hbuf,0,0,SRCCOPY); EndPaint(hw,&ps); } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp){ switch(msg){ case WM_DESTROY : PostQuitMessage(0) ; return 0; case WM_CREATE : procCreate(hw,wp,lp) ; return 0; case WM_PAINT : procPaint (hw, wp, lp); return 0; } return DefWindowProc(hw, msg, wp, lp); }