// ■干渉縞で遊ぶ #include "myWin.h" #include "math.h" static HDC hbuf; static HBITMAP hBM; int startX=200, DX=1; void clearBitmap(){ SelectObject(hbuf,GetStockObject(NULL_PEN)); PatBlt(hbuf,0,0,440,220,WHITENESS); } void initBitMap(HWND hw){// ビットマップ作成とメモリデバイスコンテキスト作成 HDC hdc=GetDC(hw); hBM=CreateCompatibleBitmap(hdc,1000,1000); hbuf=CreateCompatibleDC(hdc);SelectObject(hbuf,hBM); clearBitmap(); ReleaseDC(hw, hdc); } void drawLine(int X1,int Y1,int X2,int Y2){ MoveToEx(hbuf,X1,Y1,NULL);LineTo(hbuf, X2,Y2); } void Draw(){ clearBitmap(); HPEN pen; pen = CreatePen(PS_SOLID,2,0xFF0000);SelectObject(hbuf,pen); HBRUSH brush = CreateSolidBrush(0xFF0000);SelectObject(hbuf,brush); Ellipse(hbuf,40,40,180,180); DeleteObject(pen); SetROP2(hbuf,R2_MERGENOTPEN); pen = CreatePen(PS_SOLID,2,0xFF);SelectObject(hbuf,pen); int XS=20, YS=20,YE=200,DS=15; for(XS=20;XS<100;XS+=4,DS-=1) drawLine(XS, YS,XS+DS, YE); for(XS=100;XS<200;XS+=4,DS-=1) drawLine(XS, YS,XS+DS, YE); DeleteObject(pen); SetROP2(hbuf,R2_COPYPEN); pen = CreatePen(PS_SOLID,2,0x0000FF);SelectObject(hbuf,pen); for(XS=startX;XS200) DX=-1; startX+=DX; Draw(); InvalidateRect(hw,NULL,FALSE); } 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_LBUTTONDOWN : procLButtonDown(hw,wp,lp); return 0; case WM_RBUTTONDOWN : procRButtonDown(hw,wp,lp); return 0; case WM_TIMER : procTimer(hw,wp,lp); return 0; case WM_PAINT : procPaint (hw, wp, lp) ; return 0; } return DefWindowProc(hw, msg, wp, lp); }