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