/**************/ /* kysyint.c */ /***************************************************************************** PROGRAM: kysyint.c Windows: Win 3.1 & WIN32 PURPOSE: Pitää yllä kokonaisluvun kysyvää dialogia. Editor: Vesa Lappalainen 15.10.1994 PROJECT: kysyint.c, kysyint.rc, ALI\tabhand.c + "pääohjelma" Usage: Kutsussa muutettavan kokonaisluvun osoite laitetaan lParam-osaan: DoModalDialogParam(msg->hWnd,"KysyInt",AskIntFunc,(LPARAM)&luku); Luvun muutoksista lähetetään aina viesti WM_COMMAND, CM_INT_CHANGE *****************************************************************************/ #include #include "portable.h" #include "tabhand.h" #include "kysyint.rh" static int alkupluku = 0; static int far *pluku = NULL; static int changeInt(tMSGParam *msg) { if ( pluku == NULL ) return 0; /* Mitä kävisi ilman tätä testiä ja miksi? */ *pluku = (int)GetDlgItemInt(msg->hWnd,ID_LUKU,NULL,TRUE); SEND_WM_COMMAND(GetParent(msg->hWnd),CM_INT_CHANGE,0,0); return 0; } static int lopeta(tMSGParam *msg) { changeInt(msg); pluku = NULL; /* Mitä kävisi jos tätä alustusta ei olisi ja miksi?*/ DestroyDialog(msg->hWnd,0); return 0; } static EVENT WM_initdialog(tMSGParam *msg) { pluku = (int far *)msg->lParam; if ( pluku == NULL ) return 0; alkupluku = *pluku; SetDlgItemInt(msg->hWnd,ID_LUKU,*pluku,TRUE); SetFocus(GetDlgItem(msg->hWnd,ID_LUKU)); Edit_SetSel(GetDlgItem(msg->hWnd,ID_LUKU),0,-1); return DEFRETURN; /* Jos palautetaan 0, ei SetFocus vaikuta! */ } static EVENT WM_command_ID_LUKU__EN_CHANGE(tMSGParam *msg) { return changeInt(msg); } static EVENT WM_command_IDOK(tMSGParam *msg) { return lopeta(msg); } static EVENT WM_command_IDCANCEL(tMSGParam *msg) { SetDlgItemInt(msg->hWnd,ID_LUKU,alkupluku,TRUE); return lopeta(msg); } /****************************************************************************/ /* Viestien käsittelytaulukko */ /****************************************************************************/ tMSGEntry AskIntTbl[] = { { WM_CLOSE , DoC , DoC , WM_command_IDCANCEL }, { WM_INITDIALOG , DoC , DoC , WM_initdialog }, /*a*/ { WM_COMMAND , ID_LUKU , EN_CHANGE , WM_command_ID_LUKU__EN_CHANGE }, /*a*/ { WM_COMMAND , IDOK , DoC , WM_command_IDOK }, /*a*/ { WM_COMMAND , IDCANCEL , DoC , WM_command_IDCANCEL }, /*a*/ { 0 } }; /****************************************************************************/