void FontSelectDialog( HWND hwndWnd ) { /* * Bring up the font selection dialog; display only FIXED-pitch fonts! * Save the client window handle in the ulUser field. */ fdFontDlg.hpsScreen = WinGetPS( hwndWnd ); fdFontDlg.cbSize = sizeof( FONTDLG ); fdFontDlg.pszFamilyname = achFamily; fdFontDlg.usFamilyBufLen = sizeof( achFamily ); fdFontDlg.clrFore = CLR_BLACK; fdFontDlg.pszPreview = "AaBb"; fdFontDlg.fl = FNTS_CENTER | FNTS_FIXEDWIDTHONLY | FNTS_INITFROMFATTRS | FNTS_HELPBUTTON | FNTS_RESETBUTTON | FNTS_APPLYBUTTON; fdFontDlg.pfnDlgProc = FontDlgProc; fdFontDlg.ulUser = (ULONG)hwndWnd; WinFontDlg( HWND_DESKTOP, hwndWnd, (PFONTDLG)&fdFontDlg ); WinReleasePS( fdFontDlg.hpsScreen ); /* * If a font was successfully selected, copy its attributes into achFont and * use that to set the default PM font parameter for the client window. */ if ( fdFontDlg.lReturn == DID_OK ) { sprintf( achFont, "%d.%s", FIXEDINT( fdFontDlg.fxPointSize ), fdFontDlg.fAttrs.szFacename ); WinSetPresParam( hwndWnd, PP_FONTNAMESIZE, strlen( achFont ) + 1, achFont ); GetFontMetrics( hwndWnd, FALSE ); UpdateScreenLimits( hwndWnd, TRUE ); } }
static LONG GetFontByDlg(HWND hwndOwner, PPRINTSETUP pPrintSetup, char *pchFont, ULONG idFontDisp) { FONTDLG FontDlg; char pchFamily[FACESIZE+5]=""; long lTemp; FONTMETRICS FontMetrics; HPS hps; hps = WinGetPS(WinWindowFromID(hwndOwner, idFontDisp)); GpiQueryFontMetrics(hps, sizeof(FontMetrics), &FontMetrics); strcpy(pchFamily, FontMetrics.szFamilyname); WinReleasePS(hps); lTemp = strtol(pchFont, NULL, 10); memset(&FontDlg, 0, sizeof(FontDlg)); FontDlg.cbSize = sizeof(FontDlg); FontDlg.hpsPrinter = pPrintSetup->hpsPrinterInfo; FontDlg.pszFamilyname = pchFamily; FontDlg.usFamilyBufLen = sizeof(pchFamily); FontDlg.fxPointSize = MAKEFIXED(lTemp, 0); FontDlg.fl = FNTS_CENTER | FNTS_VECTORONLY; FontDlg.flFlags = FNTF_NOVIEWSCREENFONTS; FontDlg.clrFore = CLR_BLACK; FontDlg.clrBack = CLR_WHITE; WinFontDlg(HWND_DESKTOP, hwndOwner, &FontDlg); if (FontDlg.lReturn == DID_OK) { sprintf(pchFont, "%d.%s", (int) FIXEDINT(FontDlg.fxPointSize), FontDlg.fAttrs.szFacename); } return FontDlg.lReturn; }
int wxFontDialog::ShowModal() { FONTDLG vFontDlg; char zCurrentFont[FACESIZE]; HWND hWndFontDlg; FACENAMEDESC vFn; memset(&vFontDlg, '\0', sizeof(FONTDLG)); zCurrentFont[0] = '\0'; // // Set the fontdlg fields // vFontDlg.cbSize = sizeof(FONTDLG); vFontDlg.hpsScreen = ::WinGetScreenPS(HWND_DESKTOP); vFontDlg.hpsPrinter = NULL; vFontDlg.pszFamilyname = zCurrentFont; vFontDlg.fxPointSize = MAKEFIXED(12,0); vFontDlg.usFamilyBufLen = FACESIZE; vFontDlg.fl = FNTS_CENTER; vFontDlg.clrFore = CLR_BLACK; vFontDlg.clrBack = CLR_WHITE; hWndFontDlg = WinFontDlg( HWND_DESKTOP ,GetParent()->GetHWND() ,&vFontDlg ); if (hWndFontDlg && vFontDlg.lReturn == DID_OK) { wxColour vColour((unsigned long)0x00000000); wxNativeFontInfo vInfo; m_fontData.m_fontColour = vColour; memset(&vFn, '\0', sizeof(FACENAMEDESC)); vFn.usSize = sizeof(FACENAMEDESC); vFn.usWeightClass = vFontDlg.usWeight; vFn.usWidthClass = vFontDlg.usWidth; memset(&vInfo.fa, '\0', sizeof(FATTRS)); memcpy(&vInfo.fn, &vFn, sizeof(FACENAMEDESC)); vInfo.fa.usRecordLength = vFontDlg.fAttrs.usRecordLength; strcpy(vInfo.fa.szFacename, vFontDlg.fAttrs.szFacename); vInfo.fa.lMatch = vFontDlg.fAttrs.lMatch; // // Debugging // wxFont vChosenFont(vInfo); int nPointSize = vFontDlg.fxPointSize >> 16; vChosenFont.SetPointSize(nPointSize); m_fontData.m_chosenFont = vChosenFont; m_fontData.EncodingInfo().facename = (wxChar*)vFontDlg.fAttrs.szFacename; m_fontData.EncodingInfo().charset = vFontDlg.fAttrs.usCodePage; return wxID_OK; }
BOOL APIENTRY WfontDlg(HWND hwnd, PSZ pszTitle, PSZ pszSample, PSZ pszFont, ULONG cbFont, PULONG pfl) { PFONTDLG pfd = NULL; PFONTMETRICS pfm = NULL; PSZ psz; BOOL rc = FALSE; if (!(pfd = (PFONTDLG)malloc(sizeof(FONTDLG)))) goto end; memset((PVOID)pfd, 0, sizeof(FONTDLG)); if (!(pfm = (PFONTMETRICS)malloc(sizeof (FONTMETRICS)))) goto end; memset((PVOID)pfm, 0, sizeof(FONTMETRICS)); pfd->cbSize = sizeof(FONTDLG); pfd->pszFamilyname = psz = pszFont; pfd->usFamilyBufLen = cbFont; pfd->pszTitle = pszTitle; pfd->pszPreview = pszSample; pfd->clrFore = CLR_NEUTRAL; pfd->clrBack = SYSCLR_WINDOW; pfd->hpsScreen = WinGetPS(hwnd); // subclassa la procedura del dialogo solo se *pfl = TRUE pfd->pfnDlgProc = *pfl? NewFontDlgProc: NULL; if (!GpiQueryFontMetrics(pfd->hpsScreen, sizeof(FONTMETRICS), pfm)) goto end; // inizializza la struttura FATTRS di FONTDLG pfd->fAttrs.usRecordLength = sizeof(FATTRS); // inizializza gli attributi del font while (*psz != '.') pfd->ulUser = pfd->ulUser * 10 + *psz++ - '0'; pfd->fxPointSize = pfd->ulUser << 16; while (*psz) { if (!strncmp(psz, ".Italic", 7)) { pfd->fAttrs.fsSelection |= FATTR_SEL_ITALIC; psz += 7; } else if (!strncmp(psz, ".Bold", 5)) { pfd->fAttrs.fsSelection |= FATTR_SEL_BOLD; psz += 5; } else if (!strncmp(psz, ".Underscore", 11)) { pfd->fAttrs.fsSelection |= FATTR_SEL_UNDERSCORE; psz += 11; } else if (!strncmp(psz, ".Outline", 8)) { pfd->fAttrs.fsSelection |= FATTR_SEL_OUTLINE; psz += 8; } else if (!strncmp(psz, ".Strikeout", 10)) { pfd->fAttrs.fsSelection |= FATTR_SEL_STRIKEOUT; psz += 10; } else { psz++; } /* endif */ } /* endwhile */ pfd->fAttrs.lMatch = pfm->lMatch; pfd->fAttrs.idRegistry = pfm->idRegistry; pfd->fAttrs.usCodePage = pfm->usCodePage; if (!(pfm->fsDefn & FM_DEFN_OUTLINE)) { pfd->fAttrs.lMaxBaselineExt = pfm->lMaxBaselineExt; pfd->fAttrs.lAveCharWidth = pfm->lAveCharWidth; } // end if // tipo font pfd->fAttrs.fsType |= pfm->fsType & FM_TYPE_KERNING? FATTR_TYPE_KERNING: 0; pfd->fAttrs.fsType |= pfm->fsType & FM_TYPE_DBCS? FATTR_TYPE_DBCS: 0; pfd->fAttrs.fsType |= pfm->fsType & FM_TYPE_MBCS? FATTR_TYPE_MBCS: 0; strcpy(pfd->fAttrs.szFacename, pfm->szFacename); // the fontdlg style flags pfd->fl = FNTS_CENTER | FNTS_INITFROMFATTRS | FNTS_RESETBUTTON; pfd->usWeight = pfm->usWeightClass; pfd->usWidth = pfm->usWidthClass; if (!WinFontDlg(HWND_DESKTOP, hwnd, pfd)) goto end; if (pfd->lReturn == DID_OK) { *pfl = TRUE; sprintf(pszFont, "%d.%s", FIXEDINT(pfd->fxPointSize), pfd->fAttrs.szFacename); if (pfd->fAttrs.fsSelection & FATTR_SEL_ITALIC) strcat(pszFont, ".Italic"); if (pfd->fAttrs.fsSelection & FATTR_SEL_UNDERSCORE) strcat(pszFont, ".Underscore"); if (pfd->fAttrs.fsSelection & FATTR_SEL_STRIKEOUT) strcat(pszFont, ".Strikeout"); if (pfd->fAttrs.fsSelection&FATTR_SEL_BOLD) strcat(pszFont, ".Bold"); if (pfd->fAttrs.fsSelection&FATTR_SEL_OUTLINE) strcat(pszFont, ".Outline"); } else { *pfl = FALSE; } // end if rc = TRUE; end: if (pfd) { if (pfd->hpsScreen) WinReleasePS(pfd->hpsScreen); free(pfd); free(pfm); } // end if return rc; }