Categories: VC/C++

Registrazione della Classe di Finestre in Windows

Ogni finestra creata da un’applicazione Windows deve basarsi su una classe che riguarda stili, font, colori, posizioni ed altro. Quando un’applicazione registra una nuova classe di finestre, questa diventa utilizzabile da tutti i programmi in esecuzione e quindi è importante non creare conflitti e dare nomi di classi il più possibile univoci. Vediamo ora la struttura che determina una classe:

typedef STRUCT tagWNDCLASS {
   WORD style;
   long (FAR PASCAL* lpfnWndProc) ();
   int cbClsExtra;
   int cbWndExtra;
   HANDLE hInstance;
   HICON hIcon;
   HCURSOR hCursor;
   HBRUSH hbrBackground;
   LPSTR lpszMenuName;
   LPSTR lpszClassName;
} WNDCLASS;

Windows fornisce già alcune classi di finestre predefinite, ma molte applicazioni devono definirne di personalizzate. Vediamo i singoli elementi della struttura ed il loro significato:

style – Definisce lo stile della finestra, questi valori possono essere combinati tramite l’operatore OR bit a bit ( | ):

  • CS_BYTEALIGNCLIENT – Allinea l’area cliente sui limiti di un byte
  • CS_BYTEALIGNWINDOW – Allinea una finestra sui limiti di un byte
  • CS_CLASSDC – Fornisce un contesto di visualizzazione alla classe di finestre
  • CS_DBLCLKS – Invia un messaggio di doppio clic alla finestra
  • CS_GLOBALCLASS – Stabilisce che la classe di finestre è una classe globale dell’applicazione
  • CS_HREDRAW – Ridisegna la finestra quando ne vengono modificate le dimensioni orizzontali
  • CS_NOCLOSE – Disattiva l’opzione di chiusura nel menu di sistema
  • CS_OWNDC – Ogni finestra riceve un’istanza del proprio contesto di visualizzazione
  • CS_PARENTDC – Invia alla classe di finestre il contesto di visualizzazione della finestra da cui dipende
  • CS_SAVEBITS – Salva la parte dello schermo che viene coperta da un’altra finestra
  • CS_VREDRAW – Ridisegna la finestra quando ne vengono modificate le dimensioni vericali

lpfnWndProc – Riceve un puntatore alla funzione di gestione delle finestre che si occuperà di tutte le operazioni su di essa.
cbClsExtra – Fornisce il numero di byte che devono essere allocati dopo la struttura della classe della finestra, può avere valore nullo.
cbWndExtra – Fornisce il numero di byte che devono essere allocati dopo l’istanza della finestra, può avere valore nullo.
hInstance – Definisce l’istanza dell’applicazione registrando la classe di finestre, non può avere valore nullo.
hIcon – Handle dell’icona utilizzata nella finestra, può avere valore nullo, nel qual caso viene visualizzata l’icona predefinita di Windows.
hCursor – Handle del cursore quando questi si trova sulla client area della finestra, può avere valore nullo, nel qual caso verrà visualizzato il cursore predefinito di Windows.
hbrBackground – Può trattarsi di un colore di sistema di Windows:

  • COLOR_ACTIVEBORDER
  • COLOR_ACTIVECAPTION
  • COLOR_APPWORKSPACE
  • COLOR_BACKGROUND
  • COLOR_BTNFACE
  • COLOR_BTNSHADOW
  • COLOR_BTNTEXT
  • COLOR_CAPTIONTEXT
  • COLOR_GRAYTEXT
  • COLOR_HIGHLIGHT
  • COLOR_HIGHLIGHTTEXT
  • COLOR_INACTIVEBORDER
  • COLOR_INACTIVECAPTION
  • COLOR_MENU
  • COLOR_MENUTEXT
  • COLOR_SCROLLBAR
  • COLOR_WINDOW
  • COLOR_WINDOWFRAME
  • COLOR_WINDOWTEXT

oppure di un colore RGB. Ovviamente questi colori di sistema sono quelli predefiniti il cui valore si trova nel registro di sistema e dipente dal tema corrente di Windows. Se questo valore è nullo, la finestra verrà colorata secondo un colore standard.
lpszMenuName – Stringa contenente il nome di un menu nelle risorse, può essere nullo.
lpszClassName – Stringa contenente il nome della classe da registrare.

Una volta riempita la struttura con tutti i valori è possibile registrarla con la funzione RegisterClass.
Nel prossimo appuntamento parleremo del ciclo dei messaggi.

<< Lezione Precedente – Inizio CorsoLezione Successiva >>

Share
Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.

Recent Posts

MerciGest: il gestionale di magazzino semplice e gratuito

MerciGest è il software gestionale gratuito per Windows che semplifica la gestione del magazzino: giacenze,…

4 giorni ago

Software gestionali con SQL Server: un archivio unico, accessibile ovunque

Tutti i nostri software gestionali possono essere collegati a un database SQL Server, consentendo l’accesso…

5 giorni ago

Come iniziare ad usare MerciGest in 5 minuti

MerciGest è semplice e immediato: basta scaricare e installare il programma per iniziare subito. Al…

1 settimana ago

Cos’è MerciGest e a chi serve

MerciGest è un gestionale di magazzino per Windows pensato per negozi, piccole imprese e artigiani…

1 settimana ago

Introduzione alla Standard Template Library (STL)

La Standard Template Library (STL) è una delle componenti più potenti del C++. Fornisce una…

7 mesi ago

Un Abbonamento per Tutti i Software

Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…

2 anni ago