/**************/ /* vaihtajh.c */ /**************************************************************************** PROGRAM: vaihtajh.c PURPOSE: Vaihtaa rahaa ja matkoja Ohjelmaan lisätty Help-toiminto (merkitty h) PROJECT: vaihtajh.c vaihtaja.rc vaihtaja.def mdialog.c TEHTÄVIÄ: 1) Lisää Help-toiminto F1-näppäimellä toimivaksi. 2) Lisää muutama suoraan helpissä tiettyyn kohtaan menevä toiminto. Editor: Vesa Lappalainen 1.9.1993 ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include #include #include #include "vaihtaja.h" #include "mdialog.h" #define WCLASSNAME "WMultiWClass" /***************************************************************************/ BOOL CALLBACK_E About(HWND hDlg,unsigned message,WPARAM wParam,LPARAM lParam) { #pragma argsused switch (message) { case WM_INITDIALOG: return (TRUE); case WM_COMMAND: if ( wParam == IDOK || wParam == IDCANCEL ) { DestroyDialog(hDlg,TRUE); return (TRUE); } break; } return (FALSE); } static char s[100]; /***************************************************************************/ double GetDouble(HWND hDlg,WPARAM id) { double d=0; GetDlgItemText(hDlg,id,s,sizeof(s)); sscanf(s,"%lf",&d); return d; } /***************************************************************************/ void ShowDouble(HWND hDlg,WPARAM id,double d) { double ad,old_d = GetDouble(hDlg,id); ad = fabs(d); if ( fabs(old_d) > ad ) ad = fabs(old_d); if ( fabs(d -old_d) <= ad*0.0000001 ) return; /* Suht virhe isompaan */ sprintf(s,"%-0.9lg",d); SetDlgItemText(hDlg,id,s); } /***************************************************************************/ #include "scaling.c" /***************************************************************************/ BOOL CALLBACK_E Money(HWND hDlg,unsigned message,WPARAM wParam,LPARAM lParam) { #pragma argsused switch (message) { case WM_INITDIALOG: return (TRUE); case WM_COMMAND: if ( wParam == IDOK || wParam == IDCANCEL ) { DestroyDialog(hDlg,1); return (TRUE); } break; } return (FALSE); } /***************************************************************************/ LRESULT CALLBACK_E MainWndProc(HWND hWnd, unsigned message, WPARAM wParam, LPARAM lParam) { static char viesti[]="Valitse application menusta ohjelma!"; PAINTSTRUCT ps; switch (message) { case WM_PAINT: /* Viesti: Piirrä ikkuna uudelleen */ if ( BeginPaint(hWnd,&ps) ) TextOut(ps.hdc, 10, 10, viesti,strlen(viesti)); EndPaint(hWnd,&ps); return (NULL); case WM_DESTROY: /* Viesti: ikkuna hävitetään */ WinHelp(hWnd,"VAIHTAJA.HLP",HELP_QUIT,0); /* h */ PostQuitMessage(0); return (NULL); case WM_COMMAND: switch (wParam) { case IDM_FILE_EXIT: SendMessage(hWnd,WM_DESTROY,0,0); return NULL; case IDM_APP_SCALING: return (LRESULT)DoModelessDialog(hWnd,"SCALING",Scaling); case IDM_APP_MONEY: return (LRESULT)DoModelessDialog(hWnd,"CHANGE",Money); case IDM_HELP_ABOUT: return (LRESULT)DoModalDialog(hWnd,"About",About); case IDM_HELP_INDEX: return WinHelp(hWnd,"VAIHTAJA.HLP",HELP_INDEX,0); /* h */ default: break; } break; default: /* Antaa Windowsin käsitellä muut */ break; } return (DefWindowProc(hWnd, message, wParam, lParam)); } /***************************************************************************/ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { #pragma argsused WNDCLASS wc; /* Ikkunaluokka */ HWND hWnd; /* Pääikkunan kahva */ MSG msg; /* Viesti */ if (!hPrevInstance) { /* Onko muita esiintymiä käynnisssä? */ wc.style = NULL; wc.lpfnWndProc = MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(hInstance, "Ikoni"); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = GetStockObject(GRAY_BRUSH); wc.lpszMenuName = "MAINMENU"; wc.lpszClassName = WCLASSNAME; if (!RegisterClass(&wc)) return (FALSE); } hWnd = CreateWindow(WCLASSNAME,"Vaihtaja",WS_OVERLAPPEDWINDOW, 20,20,400,400, NULL,NULL,hInstance,NULL); if (!hWnd) return (FALSE); ShowWindow(hWnd, nCmdShow); /* Näytetään ikkuna */ UpdateWindow(hWnd); /* Lähetetään WM_PAINT viesti */ while (GetMessage(&msg,NULL,NULL,NULL)) { if ( IsModelessMessage(&msg) ) continue; TranslateMessage(&msg); /* Tulkitaan virtuaaliset näp. koodit */ DispatchMessage(&msg); /* Lähetetään viesti ikkunalle */ } FreeAllModeless(); return (msg.wParam); /* Palautetaan PostQuitMessage-funktion arvo */ }