#include "windows.h" #include "cmath" #include "windowsx.h" #include "tchar.h" #include "iostream" LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); #define defwidth 640 #define defheight 480 int WINAPI WinMain(HINSTANCE hInst,HINSTANCE Hst,LPSTR str,int mode) { TCHAR* szClassName = _T("MyWindClass"); TCHAR* szWinName = _T("Math"); MSG msg; WNDCLASS wnc; ZeroMemory(&wnc,sizeof wnc); wnc.lpfnWndProc = WndProc; wnc.hInstance = hInst; wnc.lpszClassName = szClassName; wnc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wnc.hCursor = LoadCursor(NULL,IDC_ARROW); wnc.hbrBackground = CreateSolidBrush(RGB(255,255,255)); RegisterClass(&wnc); HWND hwnd = CreateWindow( szClassName, szWinName, WS_SYSMENU, 10, 10, defwidth, defheight, HWND_DESKTOP, NULL, hInst, NULL ); ShowWindow(hwnd,SW_SHOWDEFAULT); while(GetMessage(&msg,NULL,0,0)) DispatchMessage(&msg); } void OnDestroy(HWND); void OnPaint(HWND); BOOL OnCreate(HWND,LPCREATESTRUCT); LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg) { HANDLE_MSG(hwnd,WM_DESTROY,OnDestroy); HANDLE_MSG(hwnd,WM_PAINT,OnPaint); HANDLE_MSG(hwnd,WM_CREATE,OnCreate); default: return DefWindowProc(hwnd,msg,wParam,lParam); } } void _stdcall TiMe(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { InvalidateRect(hwnd,NULL,true); } BOOL OnCreate(HWND hw,LPCREATESTRUCT) { return true; } void OnDestroy(HWND) { PostQuitMessage(1); } #define LN2 0.69314718055994530942; #define PI 3.141592653589793; inline double getFuncY(long double x) { if(x < -3) return 3*x + 7; else if(x >= -3 && x <= 3) return -2; else if(x > 3) return 3*x-11; } void OnPaint(HWND hw) { PAINTSTRUCT ps; RECT rect; GetClientRect(hw,&rect); int xaxis = rect.right/2,yaxis = rect.bottom/2; HDC hdc = BeginPaint(hw,&ps); SelectBrush(hdc,CreateSolidBrush(RGB(0,0,0))); MoveToEx(hdc,0,yaxis,NULL); LineTo(hdc,rect.right,yaxis); MoveToEx(hdc,xaxis,0,NULL); LineTo(hdc,xaxis,rect.bottom); MoveToEx(hdc,0,0,NULL); for(register double x = -100.0,y=0;x < 100.0;x+=0.01){ y = -(getFuncY(x)); int mn = 51; SetPixel(hdc,xaxis+x*mn,yaxis+y*mn,RGB(0,0,0)); } EndPaint(hw,&ps); }