/**************/ /* vaihtaja.c */ /**************************************************************************** PROGRAM: vaihtaja.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. PROJECT: vaihtaja.c vaihtaja.rc vaihtaja.def scaling.c = scaling-dialogin käsittely. Kokeile myös scalin?.c ALI\tabhand.c ALI\mdialog.c ALI\showdoub.c TEHTÄVIÄ: 1) Kokeile vaihdella dialogien käynnistykseen funktioita DoModalDialog DoModelessDialog DoMultiModelessDialog 2) Kokeile vaihtaa projektiin scalin2.c tai scalin3.c scaling.c:n tilalle. Tällä on merkitystä vain kun käsittelijässä WM_command_IDM_APP_SCALING on kutsu DoMultiModelessDialog 2) Täydennä rahanvaihto toiminto valmiiksi. 3) Kokeile muuttaa dialogin oletusjärjetystä (RWSHOP!) 4) Lisää ohjelmaan lämpötilojen muunnos. 5) Muuta ohjelmaa siten, että tunnetut muunnokset luetaan dialogin käynnistyessä tiedostosta .\SCALING.INI 6) Vain yksi modeless esiintymä kustakin dialogista voi olla kerrallaan käynnissä scaling.c:n tapauksessa. Miksi? 7) Miten voisit korjata ongelman? Editor: Vesa Lappalainen 26.10.1992 & 26.8.1994 ****************************************************************************/ #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include #include #include #include "portable.h" #include "mdialog.h" #include "tabhand.h" #include "vaihtaja.h" TDIALOGPROC(ScalingMsgTbl,Scaling) TblClassWindowMAIN("VaihtajaClass","Ikoni","Vaihtaja",MsgTbl,0); /***************************************************************************/ static EVENT WM_paint(tMSGParam *msg) /* # MAKE_DC # */ { static char viesti[]="Valitse menusta ohjelma!"; return TextOut(msg->hDC, 10, 10, viesti,strlen(viesti)); } static EVENT WM_create(tMSGParam *msg) { MoveWindow(msg->hWnd,20,20,400,400,FALSE); SetClassBackround(msg->hWnd,GetStockObject(GRAY_BRUSH)); return 0; } static EVENT WM_command_IDM_FILE_EXIT(tMSGParam *msg) { return SendMessage(msg->hWnd,WM_DESTROY,0,0); } static EVENT WM_command_IDM_APP_SCALING(tMSGParam *msg) { DoMultiModelessDialog(msg->hWnd,"SCALING",Scaling); return 0; // 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",MDialogAbout); return 0; } static EVENT WM_command_IDM_HELP_ABOUT(tMSGParam *msg) { DoModalDialog(msg->hWnd,"About",MDialogAbout); return 0; } /****************************************************************************/ static tMSGEntry MsgTbl[] = { EV_HANDLE_WM_DESTROY, { WM_PAINT , DoC , DoC , WM_paint, MAKE_DC }, /*a*/ { WM_CREATE , DoC , DoC , WM_create }, /*a*/ { WM_COMMAND , IDM_FILE_EXIT , DoC , WM_command_IDM_FILE_EXIT }, /*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_ABOUT , DoC , WM_command_IDM_HELP_ABOUT }, /*a*/ { 0 } }; /***************************************************************************/