コード例 #1
0
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 );
   }
}
コード例 #2
0
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;
}
コード例 #3
0
ファイル: fontdlg.cpp プロジェクト: esrrhs/fuck-music-player
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;
    }
コード例 #4
0
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;
}