VOID RtfWindowUpdateFont(VOID) { CHARFORMAT cf; RegistryReadFont(&cf); SendMessage(hWndRtf, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cf); }
VOID InitOptionsFont(HWND hDlg) { // load up the list of fonts HDC hDC = GetDC(hDlg); CHARFORMAT cf; LOGFONT lf; SendDlgItemMessage(hDlg, IDC_SpnFontSize, UDM_SETRANGE, 0, MAKELONG(72, 6)); lf.lfCharSet = DEFAULT_CHARSET; lf.lfFaceName[0] = TEXT('\0');; lf.lfPitchAndFamily = 0; EnumFontFamiliesEx(hDC, &lf, ListAllFonts, (LPARAM) GetDlgItem(hDlg, IDC_LstFontFace), 0); ReleaseDC(hDlg, hDC); SetDlgItemText(hDlg, IDC_RtfPreview, TEXT("Text Preview ABC abc 123")); // setup the config options RegistryReadFont(&cf); SetDlgItemText(hDlg, IDC_LstFontFace, cf.szFaceName); SetDlgItemBool(hDlg, IDC_ChkFontBold, cf.dwEffects & CFE_BOLD); SetDlgItemBool(hDlg, IDC_ChkFontItalic, cf.dwEffects & CFE_ITALIC); SetDlgItemInt(hDlg, IDC_TxtFontSize, TwipToPoint(cf.yHeight), FALSE); SetDlgItemBool(hDlg, IDC_ChkRevertCAFs, GHCi_Flag_RevertCAFs); SetDlgItemBool(hDlg, IDC_ChkPrintStats, GHCi_Flag_PrintStats); SetDlgItemBool(hDlg, IDC_ChkPrintTypes, GHCi_Flag_PrintTypes); UpdateFontPreview(hDlg); }
INT_PTR CALLBACK OptsDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: CenterDialogInParent(hDlg); InitOptionsFont(hDlg); ComboInitDialog(hDlg,GHCi_Combo_Editor); ComboInitDialog(hDlg,GHCi_Combo_Startup); ComboInitDialog(hDlg,GHCi_Combo_Prompt); break; case WM_COMMAND: { INT Code = HIWORD(wParam); INT Ctrl = LOWORD(wParam); if ((Ctrl == IDC_ChkFontBold && Code == BN_CLICKED) || (Ctrl == IDC_ChkFontItalic && Code == BN_CLICKED) || (Ctrl == IDC_TxtFontSize && Code == EN_CHANGE) || (Ctrl == IDC_LstFontFace && (Code == CBN_EDITCHANGE || Code == CBN_SELCHANGE)) ) UpdateFontPreview(hDlg); switch (LOWORD(wParam)) { case IDOK: { CHARFORMAT cf, prevCf; RegistryReadFont(&prevCf); CalculateFont(hDlg, &cf); if( (StringCmp(cf.szFaceName,prevCf.szFaceName)) || (cf.yHeight != prevCf.yHeight) || (cf.dwEffects != prevCf.dwEffects)) { RegistryWriteFont(&cf); RtfWindowUpdateFont(); } UpdateOptions(hDlg) ; EndDialog(hDlg, TRUE); return (INT_PTR)TRUE; } case IDCANCEL: EndDialog(hDlg, TRUE); return (INT_PTR)TRUE; } } break; } return (INT_PTR)FALSE; }
VOID CalculateFont(HWND hDlg, CHARFORMAT* cf) { BOOL ValidSize; INT NewSize; INT CurSel; HWND hFace = GetDlgItem(hDlg, IDC_LstFontFace); RegistryReadFont(cf); CurSel = (INT) SendMessage(hFace, CB_GETCURSEL, 0, 0); if (CurSel == CB_ERR) GetWindowText(hFace, cf->szFaceName, 32); else SendMessage(hFace, CB_GETLBTEXT, CurSel, (LPARAM) cf->szFaceName); cf->dwEffects = 0; cf->dwEffects |= (GetDlgItemBool(hDlg, IDC_ChkFontBold) ? CFE_BOLD : 0); cf->dwEffects |= (GetDlgItemBool(hDlg, IDC_ChkFontItalic) ? CFE_ITALIC : 0); // check the size NewSize = GetDlgItemInt(hDlg, IDC_TxtFontSize, &ValidSize, FALSE); if (ValidSize) cf->yHeight = PointToTwip(NewSize); }