/**************/ /* laskurm2.c */ /**************************************************************************** ** PROGRAM: laskurm2.c ** PURPOSE: Autolaskuri tehtynä mahd. pitkälle Windowsin resursseilla. ** Tiedostojen käyttö yleistetty, siten että aliohjelmia ** voidaan käyttää muuallakin. ** Tiedostoa ei lueta ja kirjoiteta oikeasti. ** Editor: Vesa Lappalainen ** Projektiin tarvitaan ** laskurm2.c - tämä tiedosto ** ..\laskurir.def - moduulin määrittely ** laskurm2.rc - resurssit ** ALI\filename.c - tiedoston nimen yms. käsittely ** ALI\mjonot.c - tiedostonkäsittely tarvitsee ** ** Tehtäviä: 1) ** ** 2) ** ** 3) ** ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include "filename.h" #include "laskurm2.h" #define WTITLE "Laskuri" #define LASKUREITA 2 static int laskurit[LASKUREITA] = {0,0}; static int suunta = 1; static HICON ikoni; static FileType File={ "", /* Tiedoston nimi, aluksi "" */ WTITLE, /* Ikkunan otsikko, jonka perään tied.nimi */ 1, /* Luetun funktion tyyppi, ks. szFilter */ "Laskuri (*.las)\0*.las\0Teksti (*.txt)\0*.txt\0Kaikki (*.*)\0*.*\0", 0, /* Onko tiedostoa muutettu. */ MySave, /* Osoitin talletusfunktioon */ MyRead, /* Osoitin lukufunktioon */ MyNew, /* Osoitin tiedon nollausfunktioon */ laskurit /* Ikkunan kahva, joka käsittelee tiedon */ }; /***************************************************************************/ int ShowStatic(HWND hWnd, int id, int value) /* Aliohjelmalla tulostetaan Static ikkunaan numero */ { char s[20]; wsprintf(s,"%d ",value); SetDlgItemText(hWnd,id,s); return 0; } /***************************************************************************/ void nollaa_laskurit(HWND hWnd,int laskurit[]) { int i; for (i=0; ihWnd,File->Name,"Talletus:", MB_APPLMODAL | MB_OK | MB_ICONEXCLAMATION); return 0; } /***************************************************************************/ int MyRead(FileType *File) { MessageBox(File->hWnd,File->Name,"Lukeminen:", MB_APPLMODAL | MB_OK | MB_ICONEXCLAMATION); return 0; } /***************************************************************************/ int MyNew(FileType *File) { nollaa_laskurit(File->hWnd,(int *)File->data); return 0; } /***************************************************************************/ BOOL CALLBACK_E MainWndProc(HWND hWnd, unsigned message, WPARAM wParam, LPARAM lParam) { #pragma argsused HMENU hMenu = GetMenu(hWnd); switch (message) { case WM_COMMAND: switch (wParam) { case HA: /* Painonappia painettu */ case KA: ShowStatic(hWnd,wParam-HA+HAL,laskurit[wParam-HA]+=suunta); Changed(&File); return TRUE; case NOLLAA: nollaa_laskurit(hWnd,laskurit); Changed(&File); return TRUE; /* OPTIONS */ case IDM_OPTIONS_INC: CheckMenuItem(hMenu,IDM_OPTIONS_DEC,MF_BYCOMMAND | MF_UNCHECKED); CheckMenuItem(hMenu,IDM_OPTIONS_INC,MF_BYCOMMAND | MF_CHECKED); suunta = 1; return TRUE; case IDM_OPTIONS_DEC: CheckMenuItem(hMenu,IDM_OPTIONS_DEC,MF_BYCOMMAND | MF_CHECKED); CheckMenuItem(hMenu,IDM_OPTIONS_INC,MF_BYCOMMAND | MF_UNCHECKED); suunta = -1; return TRUE; /* FILE */ case IDM_FILE_NEW: NewFile(hWnd,&File); return TRUE; case IDM_FILE_OPEN: OpenAndReadFile(hWnd,&File); return TRUE; case IDM_FILE_SAVEAS: SaveFileAs(hWnd,&File); return TRUE; case IDM_FILE_SAVE: SaveFile(hWnd,&File); return TRUE; case IDM_FILE_EXIT: case IDCANCEL: case EXIT: if ( NewFile(hWnd,&File) ) return TRUE; PostQuitMessage(0); return TRUE; case 175: MessageBox(hWnd,"Terve!","Painoit ikonia!", MB_APPLMODAL | MB_OK | MB_ICONEXCLAMATION); default: return FALSE; } } return FALSE; } /***************************************************************************/ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { #pragma argsused MSG msg; FARPROC lProc = MakeProcInstance((FARPROC)MainWndProc,hInstance); HWND hWnd = CreateDialog(hInstance,"LASKURI",NULL,(DLGPROC)lProc); /*HWND hWnd2 = CreateDialog(hInstance,"LASKURI",NULL,lProc);*/ HACCEL hAccel = LoadAccelerators(hInstance,"PIKA"); ikoni = LoadIcon(hInstance,"IKONI"); if ( !hWnd ) goto lopetus; SetClassWord(hWnd, GCW_HICON, (WORD)ikoni); /* EI HYVÄ!!!! ÄLÄ TEE NÄIN!!! */ while (GetMessage(&msg,NULL,NULL,NULL)) { if ( TranslateAccelerator(hWnd,hAccel,&msg) ) continue; if ( IsDialogMessage(hWnd,&msg) ) continue; TranslateMessage(&msg); /* Tulkitaan virtuaaliset näp. koodit */ DispatchMessage(&msg); /* Lähetetään viesti ikkunalle */ } lopetus: (void)FreeProcInstance(lProc); return 0; }