#include <Windows.h> #include <cmath> #include<cstdio> using namespace std; int GetRoot(float a,float b,float c,double *root) { double delta,deltasqrt; delta=b*b-4*a*c; if(delta<0)return 0; deltasqrt=sqrt(delta); if(a!=0){ root[0]=(-b+deltasqrt)/2.0*a; root[1]=(-b-deltasqrt)/2.0*a; } else{ if(b!=0)root[0]=root[1]=-c/b; else return 0; } if(root[0]==root[1])return 1; else return 2; } char str[80]; //窗口过程 LRESULT CALLBACK WndPro(HWND,UINT,WPARAM,LPARAM); //WinMain主函数 int WINAPI WinMain ( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd ) { HWND hwnd; MSG msg; WNDCLASS wndclass; //窗口类 wndclass.style=CS_HREDRAW|CS_VREDRAW; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hInstance=hInstance; wndclass.lpszMenuName=NULL; wndclass.lpszClassName="HelloWin"; //窗口类名 wndclass.lpfnWndProc=WndPro; if(!RegisterClass(&wndclass)) { MessageBox(NULL,"窗口注册失败","HelloWin",0); return 0; } hwnd=CreateWindow("HelloWin","MY Windows",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,SW_NORMAL); UpdateWindow(hwnd); while (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndPro(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; static HWND hwndButton,hwndEdit[3]; char strEdit[80]; float a[3]; double root[2]; int i; switch (message) { case WM_CREATE: hwndEdit[0]=CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,10, 60,100,25,hwnd,NULL,NULL,NULL); hwndEdit[1]=CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,120, 60,100,25,hwnd,NULL,NULL,NULL); hwndEdit[2]=CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,230, 60,100,25,hwnd,NULL,NULL,NULL); hwndButton=CreateWindow("Button","计 算",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 340,60,100,25,hwnd,NULL,NULL,NULL); break; case WM_PAINT: hdc=BeginPaint(hwnd,&ps); TextOut(hdc,10,10,"请输入一个一元二次方程的系数",strlen("请输入一个一元二次方程的系数")); TextOut(hdc,10,40,"a",1); TextOut(hdc,120,40,"b",1); TextOut(hdc,230,40,"c",1); TextOut(hdc,10,90,str,strlen(str)); EndPaint(hwnd,&ps); break; case WM_COMMAND: if(((HWND)lParam==hwndButton)&&(HIWORD(wParam)==BN_CLICKED)) { for (i = 0; i < 3 ; i++) { GetWindowText(hwndEdit[i],strEdit,80); a[i]=(float)atof(strEdit); } int n=GetRoot(a[0],a[1],a[2],root); if(n<1)strcpy(str,"方程无根!"); else sprintf_s(str,80,"方程的根为:%f,%f",root[0],root[1]); InvalidateRect(hwnd,NULL,TRUE);//强制使客户区无效,发送WM_PAINT消息 } break; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd,message,wParam,lParam); } }