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:
Va anche la funzione per il cambio di un font predefinito: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); }
Mentre la funzione per il cambio di font da dialogo (ChooseFont) non va...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 ); }![]()
Mi sapreste aiutare?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; }
Grazie!


Rispondi quotando