Salve, sto creando un'applicazione in Borland C++ (BDS 2006) simile a WordPad senza l'uso delle VCL, e quindi soltanto con le WinAPI.
Per il campo di testo ho usato la classe RICHEDIT_CLASS, definita in richedit.h delle WinAPI e ho importato la libreria "riched20.dll".
La funzione per il cambio del colore del font da dialogo (ChooseColor) del testo selezionato funziona:
codice:
BOOL cambiaFontColor(HWND hwnd)
{
CHOOSECOLOR cc;
CHARFORMAT cf;
DWORD colori[16];
memset(&cc,0,sizeof(CHOOSECOLOR));
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = hwnd;
cc.rgbResult = coloreTesto;
cc.lpCustColors = colori;
cc.Flags =CC_RGBINIT;
if(!ChooseColor( &cc )) return( FALSE );
coloreTesto = cc.rgbResult;
memset(&cf,0,sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_COLOR;
cf.crTextColor = coloreTesto;
SendMessage(hwnd, EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)&cf);
return(true);
}
Va anche la funzione per il cambio di un font predefinito:
codice:
void cambiaFontTextStd(HWND hwnd)
{
// QUESTA FUNZIONA BENE
CHARFORMAT cf;
memset(&cf,0,sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT); // Initialize RichEdit
cf.dwMask = CFM_COLOR | CFM_FACE | CFM_SIZE; // control structure
cf.crTextColor = 0x0000FF22;
cf.yHeight = 32;
strcpy( cf.szFaceName, "Courier" );
SendMessage(hwnd,EM_SETCHARFORMAT,SCF_SELECTION, (LPARAM)&cf );
}
Mentre la funzione per il cambio di font da dialogo (ChooseFont) non va...
codice:
BOOL cambiaFontText(HWND hwnd)
{
//CHARFORMAT cf;
CHOOSEFONT cf;
LOGFONT lf;
memset(&cf,0,sizeof(CHARFORMAT));
memset(&lf,0,sizeof(LOGFONT));
GetObject(hfFont, sizeof(LOGFONT), &lf);
cf.lStructSize = sizeof(CHOOSEFONT);
cf.Flags = CF_EFFECTS | CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS;
cf.hwndOwner = hwnd;
cf.lpLogFont = &lf;
cf.rgbColors = coloreTesto;
if(!ChooseFont(&cf)) return false;
// HFONT hf = CreateFontIndirect(&lf);
// if(hf)
// {
// hfFont = hf;
// }
// else
// {
// MessageBox(hwnd, "Font creation failed!", "Error", MB_OK | MB_ICONEXCLAMATION);
// }
SendMessage(hwnd,EM_SETCHARFORMAT,SCF_SELECTION, (LPARAM)&cf );
return true;
}
Mi sapreste aiutare?
Grazie!