campo-sirio/include/colors.cpp
guy bf819df0be PORTING alla versione 4.56 di XVT piu' altre f...te
applicat.cpp  Aggiornata alla 4.5 la gestione dei 3d controls,
              corretto routing di certi E_COMMAND
              corretta gestione title di XVT_CONFIG
controls.cpp  Intercettati eventi XIE_COLMOVE e XIE_COLSIZE
              intrappolato bottone sinistro del mouse e ignorati gli altri
config.cpp    Migliorata gestione paragrafi con righe vuote
              probabile ottimizzazione del reperimento delle variabili
config.h      Tolto un CAZZ di Ferdinando
colors.cpp    Creato per gestire scelta colori
colors.h      Aggiunta funzione di conversione colori
mask.cpp      Gestione popup menu
sheet.cpp     Salvataggio colonne
msksheet.cpp  Salvataggio colonne e colorazione righe
printer.cpp   Migliorato riconoscimento fax e calcolo dimensioni foglio
tabapp.cpp    Ora prima creo la relazione e poi la maschera principale
xvtility.cpp  Aggiornata la gestione dei controlli 3D di Windows
mask.h        Aggiunto metodo per avere il numero della sottomaschera


git-svn-id: svn://10.65.10.50/trunk@3890 c028cbd2-c16b-5b4b-a496-9718f37d4682
1996-11-12 14:53:09 +00:00

98 lines
2.8 KiB
C++
Executable File

#if XVT_OS == XVT_OS_WIN
#define STRICT
#include <windows.h>
#include <commdlg.h>
#endif
#include <colors.h>
COLOR RGB2COLOR(unsigned char red, unsigned char green, unsigned char blue)
{
COLOR def = MAKE_COLOR(red, green, blue);
// Se nel colore non compare l'indice cerca di calcolarlo
const unsigned char color_index = (unsigned char)(def >> 12);
if (color_index <= 0x0 || color_index > 0xF)
{
const COLOR native_color[11] = { COLOR_RED, COLOR_GREEN, COLOR_BLUE, COLOR_CYAN,
COLOR_MAGENTA, COLOR_YELLOW, COLOR_BLACK, COLOR_DKGRAY,
COLOR_GRAY, COLOR_LTGRAY, COLOR_WHITE };
def &= 0x00FFFFFF;
for (int c = 0; c < 11; c++)
{
// Confronta solo la terna R,G,B
if (def == (native_color[c] & 0x00FFFFFF))
{
def = native_color[c];
break;
}
}
}
return def;
}
COLOR choose_color(COLOR col, WINDOW win)
{
int ok = FALSE;
#if XVT_OS == XVT_OS_WIN
CHOOSECOLOR cc;
memset(&cc, 0, sizeof(cc)); // Azzera struttura
if (win == NULL_WIN) win = TASK_WIN; // Sceglie una finestra valida
HWND hwnd = (HWND)xvt_vobj_get_attr(win, ATTR_NATIVE_WINDOW);
HDC hdc = GetDC(hwnd);
// Legge la palette di sistema
PALETTEENTRY* pe = NULL;
int max_entries = 0;
if (GetDeviceCaps(hdc, RASTERCAPS) & RC_PALETTE)
{
max_entries = GetDeviceCaps(hdc, SIZEPALETTE);
pe = new PALETTEENTRY[max_entries];
GetSystemPaletteEntries(hdc, 0, max_entries, pe);
}
ReleaseDC(hwnd, hdc);
// Definisce i 16 colori customizzabili
unsigned long custom_colors[16];
for (int c = 0; c < 16; c++)
{
if (pe)
{
const PALETTEENTRY& e = pe[c < 8 ? c : max_entries - 16 + c];
custom_colors[c] = RGB(e.peRed, e.peGreen, e.peBlue);
}
else
{
const unsigned char val = (c & 0x8) ? 255 : 127;
const unsigned char red = (c & 0x1) ? val : 0;
const unsigned char green = (c & 0x2) ? val : 0;
const unsigned char blue = (c & 0x4) ? val : 0;
custom_colors[c] = RGB(red, green, blue);
}
}
if (pe)
{
delete pe;
pe = NULL;
}
cc.lStructSize = sizeof(cc); // Setta dimensioni
cc.hwndOwner = hwnd; // Setta finestra padre
cc.rgbResult = RGB(XVT_COLOR_GET_RED(c), XVT_COLOR_GET_GREEN(c), XVT_COLOR_GET_BLUE(c));
cc.lpCustColors = custom_colors; // Fissa colori custom
cc.Flags = CC_RGBINIT; // Usa col come primo colore
ok = ChooseColor(&cc) != 0;
#endif
if (ok)
col = RGB2COLOR(GetRValue(cc.rgbResult), GetGValue(cc.rgbResult), GetBValue(cc.rgbResult));
else
col = COLOR_INVALID;
return col;
}