/**************/ /* laskurim.c */ /**************************************************************************** ** PROGRAM: laskurim.c ** PURPOSE: Autolaskuri tehtynä mahd. pitkälle Windowsin resursseilla. ** Menu talletukseen ja valmiin tiedoston nimen hakeminen. ** Lukeminen ja tallettaminen on tehty "leikisti". ** Editor: Vesa Lappalainen ** Projektiin tarvitaan ** laskurim.c - tämä tiedosto ** ..}laskurir.def - moduulin määrittely ** laskurim.rc - resurssit ** ** Tehtäviä: 1) Lisää tiedoston avaamiseen valmiita tiedostomuotoja ** (ks. avausdialogissa kohtaa File Type ja vertaa ** sen tulosta muuttujaan szFilter) ** ** 2) Laita lukemisen Message boxiin jokin muu ikoni ** (ks. ko. funktion Help) ** ** 3) Muuta ohjelmaa siten, ettei laskureiden ole ** mahdollista mennä negatiivisiksi ** ** 4) Muuta ohjelmaa siten, että aina kun jompikumpi laskuri ** tulee täyteen uuden 10, niin tiedosto "talletetaan". ** ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include #include #include #include "laskurim.h" #define WTITLE "Laskuri" #define LASKUREITA 2 char FileName[256] = ""; int changed = 0;; static int laskurit[LASKUREITA] = {0,0}; static int suunta = 1; /***************************************************************************/ DWORD AskFileName(HWND hwnd,int save,char *FileName) { static OPENFILENAME ofn; static char szDirName[256]="."; static char szFile[256]="", szFileTitle[256]; static char szCustomFilter[256]="(*.*)\0*.*\0"; static int FirstTime = 1; /* Call this first time */ static char szFilter[256]= "Laskuri (*.las)\0*.las\0Teksti (*.txt)\0*.txt\0Kaikki (*.*)\0*.*\0"; DWORD error = 0; if ( FirstTime ) { /* If first call. */ FirstTime = 0; /* Set all structure members to zero on first time. */ memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.lpstrFilter = szFilter; ofn.nFilterIndex = 1; ofn.lpstrFile = szFile; ofn.nMaxFile = sizeof(szFile); ofn.lpstrCustomFilter = szCustomFilter; ofn.nMaxCustFilter = sizeof(szCustomFilter); ofn.lpstrFileTitle = szFileTitle; ofn.nMaxFileTitle = sizeof(szFileTitle); ofn.lpstrInitialDir = szDirName; } else if ( save ) strcpy(szFile,FileName); else szFile[0]=0; ofn.hwndOwner = hwnd; ofn.Flags = OFN_SHOWHELP | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; if ( ( save ? GetSaveFileName(&ofn) : GetOpenFileName(&ofn) ) == TRUE ) { char s[80]; wsprintf(s,"%s - [%s]",(LPSTR)WTITLE,ofn.lpstrFileTitle); SetWindowText(hwnd,s); _fstrcpy(FileName,ofn.lpstrFile); return 0; } else if ( !(error = CommDlgExtendedError()) ) return -1; /* Only user pressed CANCEL or something like that */ return error; } /***************************************************************************/ DWORD SaveFile(HWND hWnd,char *FileName) { DWORD error; if ( !FileName[0] && (error = AskFileName(hWnd,1,FileName)) != 0 ) return error; MessageBox(hWnd,FileName,"Talletus:", MB_APPLMODAL | MB_OK | MB_ICONEXCLAMATION); changed = 0; return 0; } /***************************************************************************/ DWORD SaveFileIfChanged(HWND hWnd,char *FileName,int ClearName) { char s[256]; int answ; DWORD error; if ( !changed ) { ClearFileName: if ( ClearName ) { FileName[0] = 0; SetWindowText(hWnd,WTITLE); } changed = 0; return 0; } wsprintf(s,"%s\nTiedostoa muutettu.\n\nTalletetaanko?", (LPSTR)FileName); answ = MessageBox(hWnd,s,WTITLE,MB_APPLMODAL | MB_YESNOCANCEL | MB_ICONEXCLAMATION); switch ( answ ) { case IDYES: if ( (error = SaveFile(hWnd,FileName)) != 0 ) return error; case IDNO: goto ClearFileName; default: return -1; } } /***************************************************************************/ int ReadFile(HWND hWnd,char *FileName) { MessageBox(hWnd,FileName,"Lukeminen:", MB_APPLMODAL | MB_OK | MB_ICONEXCLAMATION); changed = 0; return 0; } /***************************************************************************/ 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 i; for (i=0; i