/* ----------------------------- 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;
}