/**************************************************************************** ** PROGRAM: laskurir.c ** PURPOSE: Autolaskuri tehtynä mahd. pitkälle Windowsin resursseilla. ** Tiedostojen käyttö yleistetty, siten että aliohjelmia ** voidaan käyttää muuallakin. ** Tiedostoa luetaan ja kirjoitetaan oikeasti. ** Editor: Vesa Lappalainen ** Projektiin tarvitaan ** laskurm2.c - tämä tiedosto ** laskurir.def - moduulin määrittely ** laskurm2.rc - resurssit ** filename.c - tiedoston nimen yms. käsittely ** ** 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; DWORD CALLBACK MySave(FileType *File); DWORD CALLBACK MyRead(FileType *File); DWORD CALLBACK MyNew(FileType *File); 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 */ }; /***************************************************************************/ void ShowStatic(HWND hWnd, int value, int nr) /* Aliohjelmalla tulostetaan Static ikkunaan numero */ { char s[20]; HWND hswnd = GetDlgItem(hWnd,nr); wsprintf(s,"%d ",value); SetWindowText(hswnd,s); } /***************************************************************************/ void nollaa_laskurit(HWND hWnd,int laskurit[]) { int i; for (i=0; ihWnd,File->Name,"Talletus:", MB_APPLMODAL | MB_OK | MB_ICONEXCLAMATION); return 0; } /***************************************************************************/ DWORD CALLBACK MyRead(FileType *File) { MessageBox(File->hWnd,File->Name,"Lukeminen:", MB_APPLMODAL | MB_OK | MB_ICONEXCLAMATION); return 0; } /***************************************************************************/ DWORD CALLBACK MyNew(FileType *File) { nollaa_laskurit(File->hWnd,(int *)File->data); return 0; } /***************************************************************************/ BOOL CALLBACK MainWndProc(HWND hWnd, unsigned message, WORD wParam, LONG lParam) { #pragma argsused HMENU hMenu = GetMenu(hWnd); switch (message) { case WM_COMMAND: switch (wParam) { case HA: /* Painonappia painettu */ case KA: ShowStatic(hWnd,laskurit[wParam-HA]+=suunta,wParam-HA+HAL); 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(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { #pragma argsused MSG msg; FARPROC lProc = MakeProcInstance(MainWndProc,hInstance); HWND hWnd = CreateDialog(hInstance,"LASKURI",NULL,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, ikoni); 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: FreeProcInstance(lProc); return 0; }