#include "myWin.h" #define BITX 500 #define BITY 500 static HDC hbuf; static HBITMAP hBM; void initBitMap(HWND hw){ HDC hdc=GetDC(hw); hBM=CreateCompatibleBitmap(hdc,BITX,BITY); hbuf=CreateCompatibleDC(hdc);SelectObject(hbuf,hBM); SelectObject(hbuf,GetStockObject(NULL_PEN)); ReleaseDC(hw, hdc); } void clearBitmap(){ PatBlt(hbuf,0,0,BITX,BITY,BLACKNESS); } double a, XS; void initData(){a=2.9;XS=0.1;} //全体表示用 double SCX=300, SCY=200, X0=800, Y0=300, da=0.00001; //2倍表示用 //double SCX=600, SCY=400, X0=1900, Y0=450, da=0.00001; //4倍表示用 //double SCX=1200, SCY=800, X0=4200, Y0=800, da=0.000001; //6倍表示用 //double SCX=1800, SCY=1200, X0=6200, Y0=1100, da=0.000001; //8倍表示用 //double SCX=2400, SCY=1600, X0=8400, Y0=1500, da=0.000001; int intX(double X) {return (int)(X * SCX -X0);} int intY(double X) {return (int)(Y0 - X * SCY);} void cmpIter(){ clearBitmap(); double X= XS ; for(a=2.9;a<4;X = a*(1-X)*X, a+=da) SetPixel(hbuf, intX(a), intY(X), 0xFFFFFF); } void procLButtonDown(HWND hw, WPARAM wp, LPARAM lp){ cmpIter(); InvalidateRect(hw,NULL,FALSE); } void procCreate(HWND hw, WPARAM wp, LPARAM lp){ MoveWindow(hw,0,0,BITX,BITY,NULL); SetWindowText(hw,TEXT("Logistic Map")); initBitMap(hw); initData(); procLButtonDown(hw,wp,lp); } void procPaint(HWND hw, WPARAM wp, LPARAM lp){ PAINTSTRUCT ps; HDC hdc=BeginPaint(hw, &ps); BitBlt(hdc,0,0,BITX,BITY,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_PAINT : procPaint (hw, wp, lp); return 0; } return DefWindowProc(hw, msg, wp, lp); }