// ■市松模様をスライドさせる(左ボタンで左移動、右ボタンで右移動) #include "myWin.h" #include "math.h" static HDC hbuf; static HBITMAP hBM; int startX=0; void clearBitmap(){ SelectObject(hbuf,GetStockObject(NULL_PEN)); PatBlt(hbuf,0,0,380,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 Draw(){ clearBitmap(); HPEN pen[2]; HBRUSH brush[2]; pen[0] = CreatePen(PS_SOLID,1,0x777777); brush[0] = CreateSolidBrush(0x000000); pen[1] = CreatePen(PS_SOLID,1,0x777777); brush[1] = CreateSolidBrush(0xFFFFFF); int XST,YST=10, ifl=0, MX=70; for(int k1=0;k1<8;k1++, YST+=20){ XST=10;ifl=1; if(k1 %2) XST=XST+startX; for(int k2=0;k2<16;k2++, XST+=20){ ifl=1-ifl; SelectObject(hbuf,pen[ifl]); SelectObject(hbuf,brush[ifl]); Rectangle(hbuf,XST,YST,XST+21,YST+21); } } DeleteObject(pen[0]);DeleteObject(brush[0]); DeleteObject(pen[1]);DeleteObject(brush[1]); } void procLButtonDown(HWND hw, WPARAM wp, LPARAM lp){ startX--;Draw(); InvalidateRect(hw,NULL,FALSE); } void procRButtonDown(HWND hw, WPARAM wp, LPARAM lp){ startX++;Draw(); InvalidateRect(hw,NULL,FALSE); } void procCreate(HWND hw, WPARAM wp, LPARAM lp){ SetWindowText(hw,TEXT("市松模様のスライド")); MoveWindow(hw,0,0,380,220,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,380,220,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_LBUTTONDOWN : procLButtonDown(hw,wp,lp); return 0; case WM_RBUTTONDOWN : procRButtonDown(hw,wp,lp); return 0; case WM_PAINT : procPaint (hw, wp, lp) ; return 0; } return DefWindowProc(hw, msg, wp, lp); }