/**************/ /* vaihtaj3.c */ /***************************************************************************** PROGRAM: vaihtaj3.c PURPOSE: Vaihtaa rahaa ja matkoja Ohjelmalla esitellään omatekoisten dialog boxien käyttöä. Pääikkuna tekee vain menun, jolla voidaan valita mikä dialog box tulee aktiiviseksi Skaalausvaihtajan oletusikkunana on luonnosta mitattu matka. Painamalla ENTER (IDOK) päästään aina tähän ikkunaan. Kun ikkunaan tullaan, valitaan koko ikkunassa oleva teksti, jotta uuden syöttäminen olisi helpompaa. Ikkunoiden toimintajärjestys on valittu Resource Workshopissa toiminnolla Options - Set order. Ikkunat ovat käytettävissä yhtäaikaa jos ne on luotu Modeless. Modeless-dialogien on käyttöön omat aliohjelmat, jotka tallettavat kaikki käyttöön otetut modeless dialogit. Modeless tai Modal dialogi valitaan kutsun perusteella DoModelessDialog tai DoModalDialog. Itse dialogit voivat olla samoja, mikäli ne lopetetaan kutsuun DestroyDialog. t Tähän malliin on lisätty myös esimerkki ohjelman kääntämisestä kieleltä toiselle (lisäykset merkitty t = translate) ac Pikanäppäinten käsittely lisätty (merkitty ac = accelarator). h Avustus (help). (merkitty h = help ) csh Sisältöriippuva avustus (merkitty csh = context sensitive help) PROJECT: vaihtaj3.c vaihtaja.rc vaihtaja.def scalin3.c ALI\tabhand.c ALI\mdialog.c ALI\showdoub.c ALI\transdlg.c ALI\language.c ALI\mjonot.c ALI\help.c TEHTÄVIÄ: 1) Täydennä rahanvaihto-toiminto valmiiksi. 2) Muuta ohjelmaa siten, että aina kun mittakaavadialogi käynnistetään, käytetään sen edelliseltä kerralta jääneitä arvoja (mittakaava, muunnos, map-matka, yksiköt) 3) Kielen vaihtaminen ei ulotu yksiköihin. Miten korjaisit asian? 4) Mitä pitää tehdä, jotta englanninkielinen avustuskin toimisi? 5) Muuta muunnos-ohjelma yleiseksi siten, että sitä ohjataan seuraavan näköisellä VAIHTAJA.INI-tiedostolla. Tiedoston lukemisen jälkeen menu muuttuu sen mukaan montako [Change?] sektiota saatiin luettua. ;----------------------------------------------------------------------------- [Change0] title = Mittakaavamuunnos menu = &Scaling help = Muuta mittakaavaksi 1:1 jos haluat tehdä yksikkömuunnoksia from = &Kartalla to = &Luonnossa scale = &Mittakaava ; yksikkö kerroin lisäys do0 = mm, 1.0 , 0 do1 = cm, 10.0 , 0 ...jne.. do17= lentopinta, 30400.8 , 0 [Change1] title = Rahanvaihto menu = &Money Change from = &Mistä to = M&ihin do0 = mk, 1.0 , 0 do1 = $ , 4.68 , 0 ...jne... [Change2] title = Lämpötilan muunnos menu = &Temperature from = &Mistä to = M&ihin do0 = C , 1.0 , 0 do1 = K , 1.0 , -273.1 ...jne... ;----------------------------------------------------------------------------- Editor: Vesa Lappalainen 13.7.1993 *****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include #include #include "portable.h" #include "mdialog.h" #include "tabhand.h" #include "transdlg.h" /* t */ #include "help.h" /* csh */ #include "vaihtaja.h" /****************************************************************************/ TDIALOGPROC(ScalingMsgTbl,Scaling); TrINITPROC(Scaling,IScaling,BOOL); /* t */ TrINITPROC(MDialogAbout,IAbout,BOOL); /* t */ TblClassWindowMAIN("VaihtajaClass","Ikoni","Vaihtaja",MsgTbl,0); /****************************************************************************/ tHelpTable HelpTable[] = { /* csh */ { IDR_OTHER, "naapuri" }, { IDR_THIS, "oma" }, { ID_MAP_DIST, "menu_file" }, { ID_MAP_UNIT, "lopeta" }, { ID_OUT_DIST, "combobox" }, { ID_OUT_UNIT, "combobox" }, { ID_SCALE, "mittakaava" }, { 0 } }; /****************************************************************************/ static EVENT WM_paint(tMSGParam *msg) /* # MAKE_DC # */ { char *viesti = T("Valitse menusta ohjelma!"); /* HUOM! EI static! t */ return TextOut(msg->hDC, 10, 10, viesti,strlen(viesti)); } static EVENT WM_create(tMSGParam *msg) { mAddAccelerator(msg->hWnd,"Pika"); /* ac */ MoveWindow(msg->hWnd,20,20,400,400,FALSE); SetClassBackround(msg->hWnd,GetStockObject(GRAY_BRUSH)); return 0; } static EVENT WM_destroy(tMSGParam *msg) /* t */ { free_translate(); /* t */ WinHelp(msg->hWnd,T("VAIHTAJA.HLP"),HELP_QUIT,0); /* h */ PostQuitMessage(!msg->hWnd); /* = 0, näin ei param. käyttömyyttä */ return 0; } static EVENT WM_command_IDM_FILE_EXIT(tMSGParam *msg) { return SendMessage(msg->hWnd,WM_DESTROY,0,0); } static EVENT WM_command_IDM_ENGLISH(tMSGParam *msg) /* t */ { if ( language() == 1 ) return 0; read_translate("vaihtaja.tra",1); TranslateProgram(msg->hWnd,0); set_language(1); return 0; } static EVENT WM_command_IDM_FINNISH(tMSGParam *msg) /* t */ { TranslateProgram(msg->hWnd,1); set_language(0); return 0; } static EVENT WM_command_IDM_APP_SCALING(tMSGParam *msg) { #if 1 /* Käännös joko näin: */ DoMultiModelessDialog(msg->hWnd,"SCALING",IScaling); return 0; /* t */ #else /* Tai näin: (toimii vain modeless-dialogit! Miksi?) */ HWND hDlg = DoMultiModelessDialog(msg->hWnd,"SCALING",Scaling); /* t */ TranslateDialog(hDlg); return 0; #endif // DoModelessDialog(msg->hWnd,"SCALING",Scaling); return 0; // DoModalDialog(msg->hWnd,"SCALING",Scaling); return 0; } static EVENT WM_command_IDM_APP_MONEY(tMSGParam *msg) { DoModalDialog(msg->hWnd,"CHANGE",IAbout); return 0; /* t */ } /* ^^^^^^ */ static EVENT WM_command_IDM_HELP_INDEX(tMSGParam *msg) /* h */ { return WinHelp(msg->hWnd,T("VAIHTAJA.HLP"),HELP_INDEX,0); /* t */ } /* ^^ ^ t */ static EVENT WM_command_IDM_HELP_ABOUT(tMSGParam *msg) { DoModalDialog(msg->hWnd,"About",IAbout); return 0; /* t */ } /* ^^^^^^ */ /****************************************************************************/ static EVENT WM_command_IDM_HELP_CS(tMSGParam *msg) /* csh */ { // return DoHelpOnFocus(msg->hWnd,T("VAIHTAJA.HLP"),HelpTable); /* t */ return DoHelpOnFocusID(msg->hWnd,T("VAIHTAJA.HLP")); /* t */ } /****************************************************************************/ static tMSGEntry MsgTbl[] = { { WM_PAINT , DoC , DoC , WM_paint, MAKE_DC }, /*a*/ { WM_CREATE , DoC , DoC , WM_create }, /*a*/ { WM_DESTROY , DoC , DoC , WM_destroy }, /*a*/ { WM_COMMAND , IDM_FILE_EXIT , DoC , WM_command_IDM_FILE_EXIT }, /*a*/ { WM_COMMAND , IDM_ENGLISH , DoC , WM_command_IDM_ENGLISH }, /*a*/ { WM_COMMAND , IDM_FINNISH , DoC , WM_command_IDM_FINNISH }, /*a*/ { WM_COMMAND , IDM_APP_SCALING , DoC , WM_command_IDM_APP_SCALING }, /*a*/ { WM_COMMAND , IDM_APP_MONEY , DoC , WM_command_IDM_APP_MONEY }, /*a*/ { WM_COMMAND , IDM_HELP_INDEX , DoC , WM_command_IDM_HELP_INDEX }, /*a*/ { WM_COMMAND , IDM_HELP_ABOUT , DoC , WM_command_IDM_HELP_ABOUT }, /*a*/ { WM_COMMAND , IDM_HELP_CS , DoC , WM_command_IDM_HELP_CS }, /*a*/ { 0 } }; /***************************************************************************/