/* ----------------------------- PIATTO.C ------------------------------ * Gestione della finestra di dialogo * ---------------------------------------------------------------- */ #define STRICT #include <Windows.h> #include "dlg2.h" // ---- Variabili globali del sorgente static char FAR szCarne [30] = ""; // Carne scelta static char FAR szVerdura [30] = ""; // Verdura scelta static BOOL bSale = FALSE; // Salato static int nCottura = IDD_APUNTO; // Cottura static LPSTR ListeCarni [] = { "Entrecote", "Scaloppine", "Bistecca", "Carpaccio", "Tournedos", "Bourguignon", "Carbonata alle erbe", "Rognone", "Blanquette", "Cotolette", "Arrosto", "Fricassea", "Involtini", "Brasato", "" }; static LPSTR ListeVerdure [] = { "Melanzane", "Patate", "Bietole", "Carote", "Funghi", "Cavolfiore", "Fagiolini", "" }; /* -------------------------- wmCommand ----------------------------- * Elabora il messaggio WM_COMMAND * id = wParam E' l'identificatore del controllo. * hCtl = (HWND) LOWORD (lParam) Identifica il controllo che invia * il messaggio, se non proviene da * un controllo questo parametro Š * uguale a 0. * nNotify = HIWORD (lParam) Messaggio di notifica, se il msg. * proviene da un acceleratore questo * parametro Š uguale a 1, se da un * menu Š uguale a 0. * ---------------------------------------------------------------- */ static VOID wmCommand (HWND hWnd, int id, HWND hCtl, int nNotify) { int nSelection; register i; char szBuf [30]; switch (id) { case IDOK: // ---- Recupera le scelte correnti GetDlgItemText (hWnd, IDD_SCELTA, szCarne, sizeof szCarne); nSelection = (int)SendDlgItemMessage (hWnd, IDD_VERDURA, CB_GETCURSEL, 0, 0L); if (nSelection != CB_ERR) SendDlgItemMessage (hWnd, IDD_VERDURA, CB_GETLBTEXT, nSelection, (long)szVerdura); bSale = IsDlgButtonChecked (hWnd, IDD_SALE); for (i = IDD_SCOTTATA, nCottura = 0; i <= IDD_BENCOTTA; ++i) if (IsDlgButtonChecked (hWnd, i)) { nCottura = i; break; } EndDialog (hWnd, TRUE); break; case IDD_CARNE: switch (nNotify) { case LBN_SELCHANGE: nSelection = (int)SendDlgItemMessage (hWnd, IDD_CARNE, LB_GETCURSEL, 0, 0L); if (nSelection != LB_ERR) { SendDlgItemMessage (hWnd, IDD_CARNE, LB_GETTEXT, nSelection, (LPARAM)szBuf); SetDlgItemText (hWnd, IDD_SCELTA, szBuf); } break; case LBN_DBLCLK: // Simula un OK SendMessage (hWnd, WM_COMMAND, IDOK, 0L); break; } break; case IDCANCEL: EndDialog (hWnd, TRUE); break; default: break; } return; } /* -------------------------- wmInitDialog -------------------------- * Elabora il messaggio WM_INITDIALOG * idFocus = wParam E' l'identificatore del controllo che pu• * ricevere il focus. * lParam Contiene un valore passato da DialogBoxParam * Il valore di ritorno Š TRUE normalmente o FALSE se il focus Š * stato messo su un controllo. * ---------------------------------------------------------------- */ static BOOL wmInitDialog (HWND hWnd, int idFocus, DWORD lParam) { register i; // ---- Inizializza la la list box for (i = 0; *ListeCarni [i]; ++i) SendDlgItemMessage (hWnd, IDD_CARNE, LB_ADDSTRING, 0, (long)ListeCarni [i]); SendDlgItemMessage (hWnd, IDD_CARNE, LB_SELECTSTRING, -1, (long)szCarne); // Selezione SetDlgItemText (hWnd, IDD_SCELTA, szCarne); // Static SetDlgItemText (hWnd, IDD_VERDURA, "Salve!"); // ---- Inizializza la combo box for (i = 0; *ListeVerdure [i]; ++i) SendDlgItemMessage (hWnd, IDD_VERDURA, CB_ADDSTRING, 0, (long)ListeVerdure [i]); SendDlgItemMessage (hWnd, IDD_VERDURA, CB_SELECTSTRING, -1, (long)szVerdura); // Selezione // --- Definisce il tipo di cottura CheckRadioButton (hWnd, IDD_SCOTTATA, IDD_BENCOTTA, nCottura); // ---- E il sale CheckDlgButton (hWnd, IDD_SALE, bSale); return TRUE; } /* -------------------------- wmCtlColor ---------------------------- * Elabora il messaggio WM_CTLCOLOR * hDC = (HDC) wParam E' il DC del controllo. * hCtl = (HWND) LOWORD (lParam) Handle del controllo. * nCode = (int) HIWORD (lParam) Codice tipo di controllo. * Restituisce FALSE se non elaborato, hBrush sullo sfondo in * caso contrario. * ---------------------------------------------------------------- */ static HBRUSH wmCtlColor (HWND hWnd, HDC hDC, HWND hCtl, int nCode) { return FALSE; } /* -------------------------- PiattoDlgProc ---------------------------- * DlgProc della finestra di dialogo * ---------------------------------------------------------------- */ BOOL FAR PASCAL PiattoDlgProc (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) { BOOL bRes = TRUE; // Valore di ritorno switch (wMsg) { case WM_COMMAND: wmCommand (hWnd, LOWORD (wParam), (HWND)lParam, HIWORD (wParam)); break; case WM_INITDIALOG: bRes = wmInitDialog (hWnd, wParam, lParam); break; // case WM_CTLCOLOR: // bRes = (BOOL)wmCtlColor (hWnd, (HDC)wParam, // (HWND)LOWORD (lParam), // (int)HIWORD (lParam)); // break; default: bRes = FALSE; break; } return bRes; }