#include #include"Akima_NI.h" LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE,int); char szClassName[]="Akima_NI"; int WINAPI WinMain(HINSTANCE hCurInst,HINSTANCE hPrevInst, LPSTR lpsCmdLine,int nCmdShow) { MSG msg; BOOL bRet; if(!InitApp(hCurInst)) return FALSE; if(!InitInstance(hCurInst,nCmdShow)) return FALSE; while((bRet=GetMessage(&msg,NULL,0,0))!=0){ if(bRet==-1){ MessageBox(NULL,"GetMessageエラー","Error",MB_OK); break; }else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } ATOM InitApp(HINSTANCE hInst) { WNDCLASSEX wc; wc.cbSize=sizeof(WNDCLASSEX); wc.style=CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc=WndProc; wc.cbClsExtra=0; wc.cbWndExtra=0; wc.hInstance=hInst; wc.hIcon=(HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE|LR_SHARED); wc.hCursor=(HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE|LR_SHARED); wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName=NULL; wc.lpszClassName=(LPCTSTR)szClassName; wc.hIconSm=(HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE|LR_SHARED); return RegisterClassEx(&wc); } BOOL InitInstance(HINSTANCE hInst,int nCmdShow) { HWND hWnd; hWnd=CreateWindow(szClassName, "真! 秋間 浩の補間法", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if(!hWnd) return FALSE; ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); return TRUE; } LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp) { HDC hdc; PAINTSTRUCT ps; static akima aki; int i; static int x[MAX],f[MAX],n; static BOOL view,force,info; static RECT rc; char nokori[64],f1[32]; static char *kyosei="強制モード"; static char *setsumei="左クリック:分点追加\n右クリック:(再)描画\nSPACE:クリア" "\nCONTROL:観賞モード ←→ 通常モード\nESCAPE:強制モード ←→ 自由モード" "\n\n強制モード:不正な分点は無効とします(使用を強く推奨)" "\n\n追加した順番で分点間を線で繋ぎます" "\nウィンドウサイズ変更に対応しています"; switch(msg){ case WM_PAINT: hdc=BeginPaint(hWnd,&ps); if(!view){ SetTextColor(hdc,RGB(246,173,205)); wsprintf(nokori,"あと最大 %d 個の座標を追加できます",MAX-n); TextOut(hdc,0,0,nokori,(int)strlen(nokori)); if(info){ rc.top=rc.bottom-180; DrawText(hdc,(LPCTSTR)setsumei,-1,&rc,DT_WORDBREAK); rc.top=0; strcpy(f1,"F1:説明非表示"); }else strcpy(f1,"F1:説明表示"); TextOut(hdc,0,20,f1,(int)strlen(f1)); if(!force) DrawText(hdc,(LPCTSTR)kyosei,-1,&rc,DT_RIGHT); for(i=0;i