// ■干渉縞で遊ぶ #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); int XS=20, YS=20,YE=200,YC=100, RY=10; for(XS=20;XS<180;XS+=40) for(int i=0;i<=10;i++) if(i%2) drawLine(XS+i*2 , YC-RY, XS+i*2 , YC+RY); else drawLine(XS+i*2+20, YC-RY, XS+i*2+20, YC+RY); 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); }