PDA

Visualizza la versione completa : [C++] Colori di sistema


Il Pazzo
01-01-2007, 15:38
Devo colorare una finestra che ho creato, con i colori di sistema... tutti quelli che ho trovato (su MSDN) sono questi:

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

e li ho provati tutti... ma nessuno che mi colori il form con gli stessi colori delle altre fineste...

Quale devo utilizzare?

andbin
01-01-2007, 17:22
Originariamente inviato da Il Pazzo
Devo colorare una finestra che ho creato, con i colori di sistema... tutti quelli che ho trovato (su MSDN) sono questi:

COLOR_ACTIVEBORDER
COLOR_ACTIVECAPTION
....
COLOR_WINDOWFRAME
COLOR_WINDOWTEXT

e li ho provati tutti... ma nessuno che mi colori il form con gli stessi colori delle altre fineste...

Quale devo utilizzare? Dipende da come/dove hai usato queste costanti (e se lo spieghi è meglio). Questi valori li puoi usare:

- Nel campo hbrBackground delle strutture WNDCLASS e WNDCLASSEX
- Come parametro delle funzioni GetSysColor, SetSysColors, GetSysColorBrush

Il Pazzo
01-01-2007, 17:36
Originariamente inviato da andbin
- Nel campo hbrBackground delle strutture WNDCLASS e WNDCLASSEX


Qui... li ho provati tutti.... ma gli unici colori che mi sono usciti fuori sono stato, bianco, grigio, nero e trasparente adddirittura... è strana come cosa (almeno credo)... ma nessuno che mi colori la mia finestra dello stesso colore delle finestre delle altre applicazioni,,,

Ho anche creato (A PARTE) un progetto windows form per vedere di che colore mi faceva il form.. .e tra i colori di sistema c'era il nome "control" ma non sono riuscito a trovare poi un corrispondente per poter colorare la mia finestra assegnando il valore giusto

andbin
01-01-2007, 18:26
Originariamente inviato da Il Pazzo
Qui... li ho provati tutti.... ma gli unici colori che mi sono usciti fuori sono stato, bianco, grigio, nero e trasparente adddirittura... è strana come cosa (almeno credo)... ma nessuno che mi colori la mia finestra dello stesso colore delle finestre delle altre applicazioni,,,

Ho anche creato (A PARTE) un progetto windows form per vedere di che colore mi faceva il form.. .e tra i colori di sistema c'era il nome "control" ma non sono riuscito a trovare poi un corrispondente per poter colorare la mia finestra assegnando il valore giusto In genere basta mettere ad esempio:

wcx.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);

Comunque ognuno dei colori COLOR_xxx ha un compito ben preciso e viene usato solo: o in certi tipi di finestre o ad esempio in certe parti di un controllo/finestra.

Per gli sfondi delle finestre, si può usare (e ha senso):

- COLOR_WINDOW, è il colore usato come sfondo dai vari controlli es. edit-box, list-box, combo-box, ecc... Tipicamente è il colore bianco e nelle proprietà dello Schermo è selezionabile per la parte "Finestra".

- COLOR_3DFACE, è il colore usato ad esempio dagli oggetti tridimensionali: pulsanti, dialog-box, ecc... Tipicamente è un colore sul grigio e nelle proprietà dello Schermo è selezionabile per la parte "Oggetti tridimensionali"

- COLOR_APPWORKSPACE, è il colore usato ad esempio dalle finestre principali di applicazioni MDI. Tipicamente è un colore sul grigio scuro (ma dipende dal tema) e nelle proprietà dello Schermo è selezionabile per la parte "Sfondo dell'applicazione".

Insomma ... non vedo problemi. Basta impostare il campo hbrBackground come ho detto sopra.

Il Pazzo
01-01-2007, 19:31
Il problema è che non funziona... come dici tu mi fa lo sfondo bianco... no come il colore delle altre finestre (forse non sono stato chiaro... aprendo una qualunque finestra... non so... vedi la cartella documenti... ecco... il colore di sfondo della barra dei pulsanti standard... quel colore voglio...)... Quel colore può cambiare da computer a computer... da sistema a sistema... ci dovrebbe essere una macro, una variabile.. qualcosa per definire quel colore...

andbin
01-01-2007, 19:37
Originariamente inviato da Il Pazzo
Il problema è che non funziona... come dici tu mi fa lo sfondo bianco... no come il colore delle altre finestre (forse non sono stato chiaro... aprendo una qualunque finestra... non so... vedi la cartella documenti... ecco... il colore di sfondo della barra dei pulsanti standard... quel colore voglio...)... Quel colore può cambiare da computer a computer... da sistema a sistema... ci dovrebbe essere una macro, una variabile.. qualcosa per definire quel colore... Le dialog-box, i pulsanti, le tool-bar (es. quella di Explorer), le scroll-bar, usano il colore indicato con la costante COLOR_3DFACE.

Il Pazzo
01-01-2007, 20:19
Niente... sempre lo sfondo bianco.... forse manca qualche linea di codice prima?

andbin
02-01-2007, 10:53
Originariamente inviato da Il Pazzo
Niente... sempre lo sfondo bianco.... forse manca qualche linea di codice prima? Non so che dirti .... il seguente codice (che poi è quello che posto sempre in questi casi :zizi: ) funziona perfettamente e mostra la finestra con lo stesso colore di sfondo delle dialog-box.


#define STRICT
#include <windows.h>

#define MAIN_WNDCLASS "MiaClasseFinestra"

LRESULT CALLBACK Main_WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
return 0;

case WM_DESTROY:
PostQuitMessage (0);
return 0;

case WM_CLOSE:
DestroyWindow (hWnd);
return 0;
}

return DefWindowProc (hWnd, uMsg, wParam, lParam);
}

INT APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevious, LPSTR lpszCmdLine, INT iCmdShow)
{
WNDCLASSEX wcx;
HWND hWnd;
MSG msg;

wcx.cbSize = sizeof (wcx);
wcx.style = CS_HREDRAW | CS_VREDRAW;
wcx.lpfnWndProc = (WNDPROC) Main_WndProc;
wcx.cbClsExtra = 0;
wcx.cbWndExtra = 0;
wcx.hInstance = hInstance;
wcx.hIcon = NULL;
wcx.hIconSm = NULL;
wcx.hCursor = LoadCursor (NULL, IDC_ARROW);
wcx.hbrBackground = (HBRUSH) (COLOR_3DFACE+1);
wcx.lpszMenuName = NULL;
wcx.lpszClassName = MAIN_WNDCLASS;

if (!RegisterClassEx (&wcx))
{
MessageBox (NULL, "Errore nella registrazione della classe",
"ERRORE", MB_OK | MB_ICONEXCLAMATION);
return 1;
}

hWnd = CreateWindow (MAIN_WNDCLASS, "Titolo finestra", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, 300, 300,
NULL, NULL, hInstance, NULL);

if (hWnd == NULL)
{
MessageBox (NULL, "Errore nella creazione della finestra",
"ERRORE", MB_OK | MB_ICONEXCLAMATION);
return 1;
}

ShowWindow (hWnd, SW_SHOWNORMAL);
UpdateWindow (hWnd);

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}

return 0;
}

Il Pazzo
02-01-2007, 14:22
Il tuo mi da due errori....

Riferimento al simbolo esterno _main non risolto nella funzione
1 esterni non risolti

Al solito compilato in MultiByte.. in Unicode mi dava 4 errori (quelli del cast) che quando venivano risolti mi venivano generati questi 2 errori che ho scritto sopra...

andbin
02-01-2007, 14:34
Originariamente inviato da Il Pazzo
Il tuo mi da due errori....

Riferimento al simbolo esterno _main non risolto nella funzione
1 esterni non risolti

Al solito compilato in MultiByte.. in Unicode mi dava 4 errori (quelli del cast) che quando venivano risolti mi venivano generati questi 2 errori che ho scritto sopra... Il codice che ho postato io è per una applicazione Win32 "GUI" (non "console" per intenderci .... non uso main() ma WinMain!!!!) e con set di caratteri "ANSI" (non Unicode).

Compilalo in modo opportuno! (come impostare la cosa, dipende da quale ambiente di sviluppo/compilatore usi)

Loading