/* ------------------------------ TOP.C ------------------------------
* Gestione della finestra principale
* ---------------------------------------------------------------- */
#define STRICT
#include <Windows.h>
#include "dlg3.h"
/* -------------------------- wmActivate ----------------------------
* Elabora il messaggio WM_ACTIVATE
* wParam Specifica se la finestra Š
* stata attivata o disattivata.
* hWndAltra = (HWND) LOWORD (lParam) Identifica la finestra
* attivata o disattivata.
* bIconic = (BOOL) HIWORD (lParam) E' un valore diverso da 0
* se la finestra Š in icona.
* Restituisce TRUE se messaggio elaborato, FALSE in caso contrario.
* In questo caso, DefWindowProc viene chiamata e mette il focus.
* ---------------------------------------------------------------- */
static BOOL wmActivate (HWND hWnd, WORD wParam, HWND hWndAltra, BOOL bIconic)
{
// .... Elaborazione del messaggio ....
return FALSE;
}
/* -------------------------- wmClose -------------------------------
* Elabora il messaggio WM_CLOSE
* Restituisce TRUE se messaggio elaborato, FALSE in caso contrario.
* In questo caso, DefWindowProc viene chiamata e distrugge la
* finestra.
* ---------------------------------------------------------------- */
static BOOL wmClose (HWND hWnd)
{
// .... Elaborazione del messaggio ....
return FALSE;
}
/* -------------------------- wmCommand -----------------------------
* Elabora il messaggio WM_COMMAND
* id = wParam E' l'identificatore.
* 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)
{
char szBuf[40];
FARPROC lpOwnerDlgProc; // Funzione Dialog
long FAR PASCAL OwnerDlgProc (HWND, unsigned, WORD, DWORD);
static VARIABLES Variables = {2, 5, 283, 10, 10};
// Variabili da ottenere
switch (id)
{
case IDM_OWNER:
// ---- Creazione finestra di dialogo
lpOwnerDlgProc = MakeProcInstance ((FARPROC)OwnerDlgProc,
hInst);
DialogBoxParam (hInst, MAKEINTRESOURCE (OWNERDLG), hWnd,
(DLGPROC)lpOwnerDlgProc,
(DWORD)(LPVARIABLES)&Variables);
FreeProcInstance (lpOwnerDlgProc);
break;
default:
wsprintf (szBuf, "Comando ricevuto: %d", id);
MessageBox (hWnd, szBuf, "Menu", MB_OK | MB_ICONEXCLAMATION);
break;
}
return;
}
/* -------------------------- wmCreate ------------------------------
* Elabora il messaggio WM_CREATE
* lpCrst = (CREATESTRUCT FAR*) lParam Punta ad una struttura
* CREATESTRUCT.
* ---------------------------------------------------------------- */
static VOID wmCreate (HWND hWnd, CREATESTRUCT FAR* lpCrst)
{
hAccel = LoadAccelerators (hInst, MAKEINTRESOURCE (TOPACCEL));
return;
}
/* -------------------------- wmDestroy -----------------------------
* Elabora il messaggio WM_DESTROY
* ---------------------------------------------------------------- */
static VOID wmDestroy (HWND hWnd)
{
PostQuitMessage (0); // Per la finestra principale
return;
}
/* -------------------------- wmEraseBkGnd --------------------------
* Elabora il messaggio WM_ERASEBKGND
* hDC = (HDC) wParam Identifica il device context.
* Restituisce TRUE se lo sfondo Š stato cancellato,
* o FALSE per domandare la cancellazione standard.
* ---------------------------------------------------------------- */
static BOOL wmEraseBkgnd (HWND hWnd, HDC hDC)
{
// .... Elaborazione del messaggio ....
return FALSE;
}
/* -------------------------- wmHScroll -----------------------------
* Elabora il messaggio WM_HSCROLL
* wCode = wParam Specifica un codice della barra
* di scorrimento che indica la
* richiesta dell'utente.
* hCtl = (HWND) HIWORD (lParam) E' l'handle del controllo, se
* il msg. viene da un controllo.
* ---------------------------------------------------------------- */
static VOID wmHScroll (HWND hWnd, WORD wCode, HWND hCtl)
{
// .... Elaborazione del messaggio ....
return;
}
/* -------------------------- wmInitMenu ----------------------------
* Elabora il messaggio WM_INITMENU
* hMenu = (HMENU) wParam Handle del menu da inizializzare.
* ---------------------------------------------------------------- */
static VOID wmInitMenu (HWND hWnd, HMENU hMenu)
{
// .... Elaborazione del messaggio ....
return;
}
/* -------------------------- wmKeyboard ----------------------------
* Elabora i messaggi WM_CHAR, WM_KEYDOWN e WM_KEYUP
* ---------------------------------------------------------------- */
static VOID wmKeyboard (HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
{
// .... Elaborazione del messaggio ....
return;
}
/* -------------------------- wmKillFocus ---------------------------
* Elabora il messaggio WM_KILLFOCUS
* hWndAltra= (HWND) wParam Handle della finestra che riceve
* il focus.
* ---------------------------------------------------------------- */
static VOID wmKillFocus (HWND hWnd, HWND hWndAltra)
{
// .... Elaborazione del messaggio ....
return;
}
/* -------------------------- wmMenuSelect --------------------------
* Elabora il messaggio WM_MENUSELECT
* wParam id per un item, o hMenu per un popup.
* Flags Indica il contesto.
* ---------------------------------------------------------------- */
static VOID wmMenuSelect (HWND hWnd, WORD wParam, WORD Flags)
{
// .... Elaborazione del messaggio ....
return;
}
/* -------------------------- wmMouse -------------------------------
* Elabora i messaggi WM_MOUSEMOVE e WM_?BUTTON*
* wMsg E' il messaggio.
* wParam Indica i tasti/pulsanti premuti.
* x = LOWORD (lParam) E' l'ascissa del puntatore.
* y = HIWORD (lParam) E' l'ordinata del puntatore.
* ---------------------------------------------------------------- */
static VOID wmMouse (HWND hWnd, WORD wMsg, WORD wParam, int x, int y)
{
// .... Elaborazione del messaggio ....
return;
}
/* -------------------------- wmMove --------------------------------
* Elabora il messaggio WM_MOVE
* x = LOWORD (lParam) Š la nuova ascissa.
* y = HIWORD (lParam) Š la nuova ordinata.
* ---------------------------------------------------------------- */
static VOID wmMove (HWND hWnd, int x, int y)
{
// .... Elaborazione del messaggio ....
return;
}
/* -------------------------- wmPaint -------------------------------
* Elabora il messaggio WM_PAINT
* ---------------------------------------------------------------- */
static VOID wmPaint (HWND hWnd)
{
PAINTSTRUCT ps;
HDC hDC;
hDC = BeginPaint (hWnd, &ps);
// .... Elaborazione del messaggio ....
EndPaint (hWnd, &ps);
return;
}
/* -------------------------- wmQueryEndSession ---------------------
* Elabora il messaggio WM_QUERYENDSESSION
* Restituisce TRUE per rifiutare la fine della sessione
* o FALSE per accettarla.
* ---------------------------------------------------------------- */
static BOOL wmQueryEndSession (HWND hWnd)
{
// .... Elaborazione del messaggio ....
return FALSE;
}
/* -------------------------- wmSetFocus ----------------------------
* Elabora il messaggio WM_SETFOCUS
* hWndAltra = (HWND) wParam Contiene l'handle della finestra
* che perde il focus.
* ---------------------------------------------------------------- */
static VOID wmSetFocus (HWND hWnd, HWND hWndAltra)
{
// .... Elaborazione del messaggio ....
return;
}
/* -------------------------- wmSize --------------------------------
* Elabora il messaggio WM_SIZE
* wParam E' il tipo di cambiamento dimensioni.
* cx = LOWORD (lParam) E' la nuova larghezza.
* cy = HIWORD (lParam) E' la nuova altezza.
* ---------------------------------------------------------------- */
static VOID wmSize (HWND hWnd, WORD wParam, int cx, int cy)
{
// .... Elaborazione del messaggio ....
return;
}
/* -------------------------- wmSysCommand --------------------------
* Elabora il messaggio WM_SYSCOMMAND
* wParam Indica il comando selezionato.
* x = LOWORD (lParam) E' l'ascissa del puntatore.
* y = HIWORD (lParam) E' l'ordinata del puntatore.
* Restituisce TRUE se messaggio elaborato, FALSE in caso contrario.
* ---------------------------------------------------------------- */
static BOOL wmSysCommand (HWND hWnd, WORD wParam, int x, int y)
{
// .... Elaborazione del messaggio ....
return FALSE;
}
/* -------------------------- wmTimer -------------------------------
* Elabora il messaggio WM_TIMER
* id = wParam E' l'identificatore del timer.
* ---------------------------------------------------------------- */
static VOID wmTimer (HWND hWnd, int id)
{
// .... Elaborazione del messaggio ....
return;
}
/* -------------------------- wmVScroll -----------------------------
* Elabora il messaggio WM_VSCROLL
* wCode = wParam Indica dove si ha "cliccato".
* hCtl = (HWND) HIWORD (lParam) E' l'handle del controllo se
* il msg. viene da un controllo.
* ---------------------------------------------------------------- */
static VOID wmVScroll (HWND hWnd, WORD wCode, HWND hCtl)
{
// .... Elaborazione del messaggio ....
return;
}
/* -------------------------- TopWndProc ----------------------------
* WndProc della finestra Top - elabora i messaggi ricevuti
* ---------------------------------------------------------------- */
LRESULT FAR PASCAL TopWndProc (HWND hWnd, WORD wMsg, WORD wParam,
LONG lParam)
{
LRESULT lRes = 0; // Valore di ritorno
BOOL bElabora = TRUE; // Indica comando elaborato
switch (wMsg)
{
case WM_ACTIVATE:
bElabora = wmActivate (hWnd, wParam, (HWND)LOWORD (lParam),
(BOOL)HIWORD (lParam));
break;
case WM_CLOSE:
bElabora = wmClose (hWnd);
break;
case WM_COMMAND:
wmCommand (hWnd, LOWORD (wParam), (HWND)lParam,
HIWORD (wParam));
break;
case WM_CREATE:
wmCreate (hWnd, (CREATESTRUCT FAR*)lParam);
break;
case WM_DESTROY:
wmDestroy (hWnd);
break;
case WM_ERASEBKGND:
bElabora = wmEraseBkgnd (hWnd, (HDC)wParam);
if (bElabora)
lRes = TRUE; // Lo sfondo Š stato cancellato
break;
case WM_HSCROLL:
wmHScroll (hWnd, wParam, (HWND)HIWORD (lParam));
break;
case WM_INITMENU:
wmInitMenu (hWnd, (HMENU)wParam);
break;
case WM_KILLFOCUS:
wmKillFocus (hWnd, (HWND)wParam);
break;
case WM_MENUSELECT:
wmMenuSelect (hWnd, wParam, LOWORD (lParam));
break;
case WM_MOVE:
wmMove (hWnd, LOWORD (lParam), HIWORD (lParam));
break;
case WM_PAINT:
wmPaint (hWnd);
break;
case WM_QUERYENDSESSION:
bElabora = wmQueryEndSession (hWnd);
break;
case WM_SETFOCUS:
wmSetFocus (hWnd, (HWND)wParam);
break;
case WM_SIZE:
wmSize (hWnd, wParam, LOWORD (lParam), HIWORD (lParam));
break;
case WM_SYSCOMMAND:
bElabora = wmSysCommand (hWnd, wParam, LOWORD (lParam),
HIWORD (lParam));
break;
case WM_TIMER:
wmTimer (hWnd, wParam);
break;
case WM_VSCROLL:
wmVScroll (hWnd, wParam, (HWND)HIWORD (lParam));
break;
case WM_CHAR:
case WM_KEYDOWN:
case WM_KEYUP:
wmKeyboard (hWnd, wMsg, wParam, lParam);
break;
case WM_MOUSEMOVE:
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_LBUTTONDBLCLK:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
case WM_RBUTTONDBLCLK:
case WM_MBUTTONDOWN:
case WM_MBUTTONUP:
case WM_MBUTTONDBLCLK:
wmMouse (hWnd, wMsg, wParam, LOWORD (lParam),
HIWORD (lParam));
break;
default:
bElabora = FALSE;
break;
}
// ---- Elaborazione di default
if (!bElabora)
lRes = DefWindowProc (hWnd, wMsg, wParam, lParam);
return lRes;
}