#define MAX_LOADSTRING 100
//Global Variables:
HINSTANCE hInst; //current instance
TCHAR szTitle[MAX_LOADSTRING]; //The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; //The title bar text
const int iXmax = 600;const int iYmax = 600;const double CxMin = -2.5;const double CxMax = 1.5;const double CyMin = -2.0;const double CyMax = 2.0;const int IterationMax = 200;const double EscapeRadius = 2;//Foward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE,int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);intAPIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,intnCmdShow)
{//TODO: Place code here.
MSG msg;
HACCEL hAccelTable;//Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_MY, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);//Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{returnFALSE;
}
hAccelTable=LoadAccelerators(hInstance, (LPCTSTR)IDC_MY);//Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}returnmsg.wParam;
}//
//FUNCTION: MyRegisterClass()//
//PURPOSE: Registers the window class.//
//COMMENTS://
//This function and its usage is only necessary if you want this code//to be compatible with Win32 systems prior to the 'RegisterClassEx'//function that was added to Windows 95. It is important to call this function//so that the application will get 'well formed' small icons associated//with it.//ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize= sizeof(WNDCLASSEX);
wcex.style= CS_HREDRAW |CS_VREDRAW;
wcex.lpfnWndProc=(WNDPROC)WndProc;
wcex.cbClsExtra= 0;
wcex.cbWndExtra= 0;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(hInstance, (LPCTSTR)IDI_MY);
wcex.hCursor=LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName=(LPCSTR)IDC_MY;
wcex.lpszClassName=szWindowClass;
wcex.hIconSm=LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);return RegisterClassEx(&wcex);
}//
//FUNCTION: InitInstance(HANDLE, int)//
//PURPOSE: Saves instance handle and creates main window//
//COMMENTS://
//In this function, we save the instance handle in a global variable and//create and display the main program window.//BOOL InitInstance(HINSTANCE hInstance, intnCmdShow)
{
HWND hWnd;
hInst= hInstance; //Store instance handle in our global variable
hWnd=CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);if (!hWnd)
{returnFALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);returnTRUE;
}//
//FUNCTION: WndProc(HWND, unsigned, WORD, LONG)//
//PURPOSE: Processes messages for the main window.//
//WM_COMMAND - process the application menu//WM_PAINT - Paint the main window//WM_DESTROY - post a quit message and return//
//LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{intwmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);switch(message)
{caseWM_COMMAND:
wmId=LOWORD(wParam);
wmEvent=HIWORD(wParam);//Parse the menu selections:
switch(wmId)
{caseIDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);break;caseIDM_EXIT:
DestroyWindow(hWnd);break;default:returnDefWindowProc(hWnd, message, wParam, lParam);
}break;caseWM_PAINT:
{//添加大括号,使内部的变量初始化赋值编译通过
hdc = BeginPaint(hWnd, &ps);//TODO: Add any drawing code here...
intiX,iY;doubleCx,Cy;double PixelWidth = (CxMax - CxMin)/iXmax;doublePixelHeight;
PixelHeight= (CyMax - CyMin)/iYmax;
COLORREF color;doubleZx,Zy;doubleZx2,Zy2;
INT Iteration;doubleER2;
ER2= EscapeRadius *EscapeRadius;//依据曼德博集合计算原理,获取每个像素的属性
for(iY = 0;iY < iYmax;iY++)//循环每一行
{
Cy= CyMin + iY*PixelHeight;if(fabs(Cy) < PixelHeight/2)
Cy= 0.0;for(iX=0;iX < iXmax;iX++)//循环每一列
{
Cx= CxMin +iX*PixelHeight;
Zx= Zy= Zy2=Zx2 = 0.0;
Iteration= 0;//针对每个像素进行循环计算
while(Iteration < IterationMax && ((Zx2 + Zy2)
{
Zy= 2* Zx*Zy +Cy;
Zx= Zx2 - Zy2 +Cx;
Zx2= Zx*Zx;
Zy2= Zy *Zy;
Iteration++;
}if(Iteration ==IterationMax)
color= RGB(0,0,0);//前景色黑色
elsecolor= RGB(255,255,255);//背景色白色
SetPixel(hdc,iX,iY,color);
}
}//RECT rt;//GetClientRect(hWnd, &rt);//DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
EndPaint(hWnd,&ps);break;
}caseWM_DESTROY:
PostQuitMessage(0);break;default:returnDefWindowProc(hWnd, message, wParam, lParam);
}return 0;
}//Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{switch(message)
{caseWM_INITDIALOG:returnTRUE;caseWM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) ==IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));returnTRUE;
}break;
}returnFALSE;
}