/**************/ /* laskurm2.c */ /**************************************************************************** ** PROGRAM: laskurm2.c ** Windows: Win 3.1 & WIN32 ** 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 ** Project: ** laskurm2.c - tämä tiedosto ** laskurm2.rc - resurssit ** ..\laskurir.def - moduulin määrittely ** ALI\tabhand.c - viestitaulukon käsittely ** ALI\mdialog.c - dialogien käsittely ** ALI\filename.c - tiedoston nimen yms. käsittely ** ALI\mjonot.c - merkkijonojen käsittely (filename tarvitsee) ** ** Tehtäviä: 1) Laita lukemisen Message boxiin jokin muu ikoni ** (ks. ko. funktion Help) ** ** 2) Muuta ohjelmaa siten, ettei laskureiden ole ** mahdollista mennä negatiivisiksi ** ** 3) Muuta ohjelmaa siten, että aina kun jompikumpi laskuri ** tulee täyteen uuden 10, niin tiedosto "talletetaan". ** ** 4) Lisää ohjelmaan automaattitalletus 10 sek välein. ** ** 5) Lisää ohjelmaan ominaisuus, jolla automaattitalletuksen ** väli voidaan muuttaa. ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include "tabhand.h" #include "mdialog.h" #include "filename.h" #include "laskurm2.h" #define WTITLE "Laskuri" /***************************************************************************/ TblDlgMAIN("PIKA","LASKURI",MsgTbl); /***************************************************************************/ static int laskurit[LASKUREITA] = {0,0}; static int suunta = 1; /***************************************************************************/ 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; } /***************************************************************************/ int 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; } 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 /* osoitin dataan */ }; /***************************************************************************/ /* Tapahtumien käsittelijät: */ /***************************************************************************/ static EVENT lisaa(tMSGParam *msg) { ShowStatic(msg->hWnd,msg->id-HA+HAL,laskurit[msg->id-HA]+=suunta); return Changed(&File); /* HUOM! ^^^^^^^^^ */ } static EVENT nollaa(tMSGParam *msg) { nollaa_laskurit(msg->hWnd,laskurit); return Changed(&File); } static EVENT lopeta(tMSGParam *msg) { if ( NewFile(msg->hWnd,&File) == 0 ) PostQuitMessage(0); return 0; } /*-------------------------------------------------------------------------*/ /* Seuraavat laitetaan resp.bat -ohjelman avulla automaattisesti taulukkoon*/ /* koska niiden tyyppi on EVENT ja ne alkavat WM_ */ /*-------------------------------------------------------------------------*/ /* FILE */ static EVENT WM_command_IDM_FILE_NEW(tMSGParam *msg) { return NewFile(msg->hWnd,&File); } static EVENT WM_command_IDM_FILE_OPEN(tMSGParam *msg) { return OpenAndReadFile(msg->hWnd,&File);; } static EVENT WM_command_IDM_FILE_SAVEAS(tMSGParam *msg) { return SaveFileAs(msg->hWnd,&File); } static EVENT WM_command_IDM_FILE_SAVE(tMSGParam *msg) { return SaveFile(msg->hWnd,&File); } /*-------------------------------------------------------------------------*/ /* OPTIONS */ static EVENT WM_command_IDM_OPTIONS_INC(tMSGParam *msg) { HMENU hMenu = GetMenu(msg->hWnd); CheckMenuItem(hMenu,IDM_OPTIONS_DEC,MF_BYCOMMAND | MF_UNCHECKED); CheckMenuItem(hMenu,IDM_OPTIONS_INC,MF_BYCOMMAND | MF_CHECKED); suunta = 1; return 0; } static EVENT WM_command_IDM_OPTIONS_DEC(tMSGParam *msg) { HMENU hMenu = GetMenu(msg->hWnd); CheckMenuItem(hMenu,IDM_OPTIONS_DEC,MF_BYCOMMAND | MF_CHECKED); CheckMenuItem(hMenu,IDM_OPTIONS_INC,MF_BYCOMMAND | MF_UNCHECKED); suunta = -1; return 0; } /***************************************************************************/ static tMSGEntry MsgTbl[] = { { WM_COMMAND , TRANGE , DoC, lisaa , 0 , 0, HA,HA+LASKUREITA-1}, { WM_COMMAND , NOLLAA , DoC, nollaa , 0 , 0}, { WM_COMMAND , IDM_FILE_EXIT , DoC, lopeta , 0 , 0}, { WM_COMMAND , IDCANCEL , DoC, lopeta , 0 , 0}, { WM_COMMAND , EXIT , DoC, lopeta , 0 , 0}, { WM_COMMAND , IDM_FILE_NEW , DoC , WM_command_IDM_FILE_NEW }, /*a*/ { WM_COMMAND , IDM_FILE_OPEN , DoC , WM_command_IDM_FILE_OPEN }, /*a*/ { WM_COMMAND , IDM_FILE_SAVEAS , DoC , WM_command_IDM_FILE_SAVEAS }, /*a*/ { WM_COMMAND , IDM_FILE_SAVE , DoC , WM_command_IDM_FILE_SAVE }, /*a*/ { WM_COMMAND , IDM_OPTIONS_INC , DoC , WM_command_IDM_OPTIONS_INC }, /*a*/ { WM_COMMAND , IDM_OPTIONS_DEC , DoC , WM_command_IDM_OPTIONS_DEC }, /*a*/ { 0 } };