mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
805 lines
27 KiB
805 lines
27 KiB
|
|
#include <windows.h>
|
|
#include <commdlg.h>
|
|
|
|
#include <malloc.h>
|
|
#include <memory.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
|
|
#include "fonttest.h"
|
|
#include "enum.h"
|
|
|
|
#include "dialogs.h"
|
|
|
|
|
|
typedef struct _VALUETEXT
|
|
{
|
|
int Value;
|
|
char *pszValue;
|
|
} VALUETEXT, *PVALUETEXT, FAR *LPVALUETEXT;
|
|
|
|
|
|
|
|
VALUETEXT aWeights[] =
|
|
{
|
|
{ FW_DONTCARE, "FW_DONTCARE" },
|
|
{ FW_THIN, "FW_THIN" },
|
|
{ FW_EXTRALIGHT, "FW_EXTRALIGHT" },
|
|
{ FW_LIGHT, "FW_LIGHT" },
|
|
{ FW_NORMAL, "FW_NORMAL" },
|
|
{ FW_MEDIUM, "FW_MEDIUM" },
|
|
{ FW_SEMIBOLD, "FW_SEMIBOLD" },
|
|
{ FW_BOLD, "FW_BOLD" },
|
|
{ FW_EXTRABOLD, "FW_EXTRABOLD" },
|
|
{ FW_HEAVY, "FW_HEAVY" },
|
|
{ 0, 0 }
|
|
};
|
|
|
|
VALUETEXT aCharSet[] =
|
|
{
|
|
{ DEFAULT_CHARSET, "DEFAULT_CHARSET" },
|
|
{ ANSI_CHARSET, "ANSI_CHARSET" },
|
|
{ SYMBOL_CHARSET, "SYMBOL_CHARSET" },
|
|
{ SHIFTJIS_CHARSET, "SHIFTJIS_CHARSET" },
|
|
{ OEM_CHARSET, "OEM_CHARSET" },
|
|
{ HANGEUL_CHARSET, "HANGEUL_CHARSET" },
|
|
{ GB2312_CHARSET, "GB2312_CHARSET" },
|
|
{ CHINESEBIG5_CHARSET, "CHINESEBIG5_CHARSET" },
|
|
{ JOHAB_CHARSET, "JOHAB_CHARSET" },
|
|
{ HEBREW_CHARSET, "HEBREW_CHARSET" },
|
|
{ ARABIC_CHARSET, "ARABIC_CHARSET" },
|
|
{ GREEK_CHARSET, "GREEK_CHARSET" },
|
|
{ TURKISH_CHARSET, "TURKISH_CHARSET" },
|
|
{ THAI_CHARSET, "THAI_CHARSET" },
|
|
{ EASTEUROPE_CHARSET, "EASTEUROPE_CHARSET" },
|
|
{ RUSSIAN_CHARSET, "RUSSIAN_CHARSET" },
|
|
{ MAC_CHARSET, "MAC_CHARSET" },
|
|
{ BALTIC_CHARSET, "BALTIC_CHARSET" },
|
|
{ 0, 0 }
|
|
};
|
|
|
|
VALUETEXT aOutPrecision[] =
|
|
{
|
|
{ OUT_DEFAULT_PRECIS, "OUT_DEFAULT_PRECIS" },
|
|
{ OUT_STRING_PRECIS, "OUT_STRING_PRECIS" },
|
|
{ OUT_CHARACTER_PRECIS, "OUT_CHARACTER_PRECIS" },
|
|
{ OUT_STROKE_PRECIS, "OUT_STROKE_PRECIS" },
|
|
{ OUT_TT_PRECIS, "OUT_TT_PRECIS" },
|
|
{ OUT_DEVICE_PRECIS, "OUT_DEVICE_PRECIS" },
|
|
{ OUT_RASTER_PRECIS, "OUT_RASTER_PRECIS" },
|
|
{ OUT_TT_ONLY_PRECIS, "OUT_TT_ONLY_PRECIS" },
|
|
{ OUT_OUTLINE_PRECIS, "OUT_OUTLINE_PRECIS" },
|
|
{ OUT_SCREEN_OUTLINE_PRECIS, "OUT_SCREEN_OUTLINE_PRECIS"},
|
|
{ 0, 0 }
|
|
};
|
|
|
|
VALUETEXT aClipPrecision[] =
|
|
{
|
|
{ CLIP_DEFAULT_PRECIS, "CLIP_DEFAULT_PRECIS" },
|
|
{ CLIP_CHARACTER_PRECIS, "CLIP_CHARACTER_PRECIS" },
|
|
{ CLIP_STROKE_PRECIS, "CLIP_STROKE_PRECIS" },
|
|
// { CLIP_MASK, "CLIP_MASK" },
|
|
// { CLIP_LH_ANGLES, "CLIP_LH_ANGLES" },
|
|
// { CLIP_TT_ALWAYS, "CLIP_TT_ALWAYS" },
|
|
// { CLIP_ENCAPSULATE, "CLIP_ENCAPSULATE" },
|
|
{ 0, 0 }
|
|
};
|
|
|
|
VALUETEXT aQuality[] =
|
|
{
|
|
{ DEFAULT_QUALITY, "DEFAULT_QUALITY" },
|
|
{ DRAFT_QUALITY, "DRAFT_QUALITY" },
|
|
{ PROOF_QUALITY, "PROOF_QUALITY" },
|
|
{ 0, 0 }
|
|
};
|
|
|
|
VALUETEXT aPitch[] =
|
|
{
|
|
{ DEFAULT_PITCH, "DEFAULT_PITCH" },
|
|
{ FIXED_PITCH, "FIXED_PITCH" },
|
|
{ VARIABLE_PITCH, "VARIABLE_PITCH" },
|
|
{ 0, 0 }
|
|
};
|
|
|
|
VALUETEXT aFamily[] =
|
|
{
|
|
{ FF_DONTCARE, "FF_DONTCARE" },
|
|
{ FF_ROMAN, "FF_ROMAN" },
|
|
{ FF_SWISS, "FF_SWISS" },
|
|
{ FF_MODERN, "FF_MODERN" },
|
|
{ FF_SCRIPT, "FF_SCRIPT" },
|
|
{ FF_DECORATIVE, "FF_DECORATIVE" },
|
|
{ 0, 0 }
|
|
};
|
|
|
|
|
|
|
|
|
|
//*****************************************************************************
|
|
//********************* F I L L C O M B O B O X ***********************
|
|
//*****************************************************************************
|
|
|
|
void FillComboBox( HWND hdlg, int id, PVALUETEXT apv, int iSelValue )
|
|
{
|
|
int i, Index;
|
|
char szText[32];
|
|
|
|
|
|
Index = -1;
|
|
for( i = 0; apv[i].pszValue; i++ )
|
|
{
|
|
SendDlgItemMessage( hdlg, id, CB_ADDSTRING, 0, (LONG)(LPSTR)apv[i].pszValue );
|
|
if( apv[i].Value == iSelValue ) Index = i;
|
|
}
|
|
|
|
if( Index != -1 )
|
|
{
|
|
SendDlgItemMessage( hdlg, id, CB_SETCURSEL, (WPARAM)Index, 0);
|
|
}
|
|
else
|
|
{
|
|
wsprintf( szText, "0x%.4X", iSelValue );
|
|
SendDlgItemMessage( hdlg, id, WM_SETTEXT, 0, (LONG)(LPSTR)szText );
|
|
}
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
//************ G E T C O M B O B O X S E L E C T I O N **************
|
|
//*****************************************************************************
|
|
|
|
int GetComboBoxSelection( HWND hdlg, int id, PVALUETEXT apv )
|
|
{
|
|
DWORD dwIndex;
|
|
char szText[32];
|
|
|
|
|
|
|
|
dwIndex = SendDlgItemMessage( hdlg, id, CB_GETCURSEL, 0, 0);
|
|
|
|
if( dwIndex != CB_ERR )
|
|
{
|
|
return apv[dwIndex].Value;
|
|
}
|
|
else
|
|
{
|
|
SendDlgItemMessage( hdlg, id, WM_GETTEXT, sizeof(szText), (LONG)(LPSTR)szText );
|
|
return (int)strtol( szText, NULL, 0 );
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
//******************* G E T E D I T I N T E G E R *********************
|
|
//*****************************************************************************
|
|
|
|
int GetEditInteger( HWND hdlg, int id )
|
|
{
|
|
char szText[32];
|
|
|
|
GetDlgItemText( hdlg, id, (LPSTR)szText, sizeof(szText) );
|
|
return (int)strtol( szText, NULL, 0 );
|
|
}
|
|
|
|
|
|
|
|
//*****************************************************************************
|
|
//*************** C R E A T E F O N T D L G P R O C *****************
|
|
//*****************************************************************************
|
|
|
|
BOOL CALLBACK CreateFontDlgProc( HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
{
|
|
BYTE lfClip, lfPitch, lfFamily;
|
|
|
|
|
|
switch( msg )
|
|
{
|
|
case WM_INITDIALOG:
|
|
SetDlgItemInt( hdlg, IDD_NHEIGHT, lf.lfHeight, TRUE );
|
|
SetDlgItemInt( hdlg, IDD_NWIDTH, lf.lfWidth, TRUE );
|
|
SetDlgItemInt( hdlg, IDD_NESCAPEMENT, lf.lfEscapement, TRUE );
|
|
SetDlgItemInt( hdlg, IDD_NORIENTATION, lf.lfOrientation, TRUE );
|
|
SetDlgItemInt( hdlg, IDD_NWEIGHT, lf.lfWeight, TRUE );
|
|
|
|
SendDlgItemMessage( hdlg, IDD_ITALIC, BM_SETCHECK, lf.lfItalic, 0 );
|
|
SendDlgItemMessage( hdlg, IDD_UNDERLINE, BM_SETCHECK, lf.lfUnderline, 0 );
|
|
SendDlgItemMessage( hdlg, IDD_STRIKEOUT, BM_SETCHECK, lf.lfStrikeOut, 0 );
|
|
|
|
FillComboBox( hdlg, IDD_NWEIGHT, aWeights, (WORD)lf.lfWeight );
|
|
|
|
FillComboBox( hdlg, IDD_CHARSET, aCharSet, (WORD)lf.lfCharSet );
|
|
FillComboBox( hdlg, IDD_OUTPUTPRECISION, aOutPrecision, (WORD)lf.lfOutPrecision );
|
|
|
|
lfClip = lf.lfClipPrecision;
|
|
FillComboBox( hdlg, IDD_CLIPPRECISION, aClipPrecision, (WORD)(lfClip & CLIP_MASK) );
|
|
CheckDlgButton( hdlg, IDD_CLIP_ENCAPSULATE, lfClip & CLIP_EMBEDDED );
|
|
CheckDlgButton( hdlg, IDD_CLIP_LH_ANGLES, lfClip & CLIP_LH_ANGLES );
|
|
CheckDlgButton( hdlg, IDD_CLIP_TT_ALWAYS, lfClip & CLIP_TT_ALWAYS );
|
|
|
|
|
|
FillComboBox( hdlg, IDD_QUALITY, aQuality, (WORD)lf.lfQuality );
|
|
|
|
lfPitch = lf.lfPitchAndFamily & (BYTE)0x0F;
|
|
FillComboBox( hdlg, IDD_PITCH, aPitch, (WORD)(lfPitch & 0x03) );
|
|
CheckDlgButton( hdlg, IDD_PITCH_TT, lfPitch & 0x04 );
|
|
|
|
lfFamily = lf.lfPitchAndFamily & (BYTE)0xF0;
|
|
FillComboBox( hdlg, IDD_FAMILY, aFamily, (WORD)lfFamily );
|
|
|
|
SetDlgItemText( hdlg, IDD_LPFAMILY, lf.lfFaceName );
|
|
|
|
return TRUE;
|
|
|
|
|
|
case WM_COMMAND:
|
|
switch( LOWORD(wParam ) )
|
|
{
|
|
case IDD_OK:
|
|
lf.lfHeight = GetEditInteger( hdlg, IDD_NHEIGHT );
|
|
lf.lfWidth = GetEditInteger( hdlg, IDD_NWIDTH );
|
|
lf.lfEscapement = GetEditInteger( hdlg, IDD_NESCAPEMENT );
|
|
lf.lfOrientation = GetEditInteger( hdlg, IDD_NORIENTATION );
|
|
|
|
lf.lfWeight = GetComboBoxSelection( hdlg, IDD_NWEIGHT, aWeights );
|
|
|
|
lf.lfItalic = (BYTE)SendDlgItemMessage( hdlg, IDD_ITALIC, BM_GETCHECK, 0, 0 );
|
|
lf.lfUnderline = (BYTE)SendDlgItemMessage( hdlg, IDD_UNDERLINE, BM_GETCHECK, 0, 0 );
|
|
lf.lfStrikeOut = (BYTE)SendDlgItemMessage( hdlg, IDD_STRIKEOUT, BM_GETCHECK, 0, 0 );
|
|
|
|
lf.lfCharSet = (BYTE)GetComboBoxSelection( hdlg, IDD_CHARSET, aCharSet );
|
|
lf.lfOutPrecision = (BYTE)GetComboBoxSelection( hdlg, IDD_OUTPUTPRECISION, aOutPrecision );
|
|
|
|
lfClip = (BYTE)GetComboBoxSelection( hdlg, IDD_CLIPPRECISION, aClipPrecision );
|
|
lfClip |= (IsDlgButtonChecked(hdlg, IDD_CLIP_ENCAPSULATE) ? CLIP_EMBEDDED : 0);
|
|
lfClip |= (IsDlgButtonChecked(hdlg, IDD_CLIP_LH_ANGLES) ? CLIP_LH_ANGLES : 0);
|
|
lfClip |= (IsDlgButtonChecked(hdlg, IDD_CLIP_TT_ALWAYS) ? CLIP_TT_ALWAYS : 0);
|
|
lf.lfClipPrecision = lfClip;
|
|
|
|
lf.lfQuality = (BYTE)GetComboBoxSelection( hdlg, IDD_QUALITY, aQuality );
|
|
|
|
lfPitch = (BYTE)GetComboBoxSelection( hdlg, IDD_PITCH, aPitch );
|
|
lfPitch |= (IsDlgButtonChecked(hdlg, IDD_PITCH_TT) ? 0x04 : 0);
|
|
|
|
lfFamily = (BYTE)GetComboBoxSelection( hdlg, IDD_FAMILY, aFamily );
|
|
|
|
lf.lfPitchAndFamily = lfPitch | lfFamily;
|
|
|
|
GetDlgItemText( hdlg, IDD_LPFAMILY, lf.lfFaceName, sizeof(lf.lfFaceName ) );
|
|
|
|
EndDialog( hdlg, TRUE );
|
|
return TRUE;
|
|
|
|
case IDCANCEL:
|
|
case IDD_CANCEL:
|
|
EndDialog( hdlg, FALSE );
|
|
return TRUE;
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
case WM_CLOSE:
|
|
EndDialog( hdlg, FALSE );
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
//******************** E N U M F O N T S P R O C **********************
|
|
//*****************************************************************************
|
|
|
|
#define MAX_FONTS 100
|
|
|
|
|
|
char *pszWeights[] =
|
|
{
|
|
"Regular ",
|
|
"Thin ",
|
|
"Extra Light ",
|
|
"Light ",
|
|
"Regular ",
|
|
"Medium ",
|
|
"SemiBold ",
|
|
"Bold ",
|
|
"ExtraBold ",
|
|
"Heavy "
|
|
};
|
|
|
|
|
|
|
|
BOOL bUseEnumFontFamilies;
|
|
BOOL bUseEnumFontFamiliesEx;
|
|
|
|
HWND hdlgEnum;
|
|
|
|
int nFonts;
|
|
|
|
short anFontType[MAX_FONTS];
|
|
ENUMLOGFONTEX *alpLogFont[MAX_FONTS];
|
|
NEWTEXTMETRICEX *alpTextMetric[MAX_FONTS];
|
|
|
|
|
|
int DlgEnumFontsProc( LPLOGFONT lplf, LPTEXTMETRIC lptm, short sFontType, LPSTR lpstr )
|
|
{
|
|
static char szName[128];
|
|
|
|
if( nFonts >= MAX_FONTS )
|
|
{
|
|
dprintf( "Too many fonts enumerated (>%d), choke...", MAX_FONTS );
|
|
return 0;
|
|
}
|
|
|
|
anFontType[nFonts] = sFontType;
|
|
alpLogFont[nFonts] = (ENUMLOGFONTEX*)malloc( sizeof(ENUMLOGFONTEX) );
|
|
alpTextMetric[nFonts] = (NEWTEXTMETRICEX*)malloc( sizeof(NEWTEXTMETRICEX) );
|
|
|
|
if( bUseEnumFontFamiliesEx )
|
|
{
|
|
ENUMLOGFONTEX* lpelfe;
|
|
|
|
lpelfe = (ENUMLOGFONTEX*) lplf;
|
|
memcpy( alpLogFont[nFonts], lpelfe, sizeof(ENUMLOGFONTEX) );
|
|
lstrcpy( szName, lpelfe->elfFullName );
|
|
|
|
if( sFontType == TRUETYPE_FONTTYPE )
|
|
{
|
|
NEWTEXTMETRICEX* lpntme;
|
|
|
|
lpntme = (NEWTEXTMETRICEX*) lptm;
|
|
memcpy( alpTextMetric[nFonts], lpntme, sizeof(NEWTEXTMETRICEX) );
|
|
}
|
|
else
|
|
memcpy( alpTextMetric[nFonts], lptm, sizeof(TEXTMETRIC) );
|
|
}
|
|
else if( bUseEnumFontFamilies )
|
|
{
|
|
ENUMLOGFONT* lpelf;
|
|
|
|
lpelf = (ENUMLOGFONT*) lplf;
|
|
memcpy( alpLogFont[nFonts], lpelf, sizeof(ENUMLOGFONT) );
|
|
lstrcpy( szName, lpelf->elfFullName );
|
|
|
|
if( sFontType == TRUETYPE_FONTTYPE )
|
|
{
|
|
NEWTEXTMETRIC* lpntm;
|
|
|
|
lpntm = (NEWTEXTMETRIC*) lptm;
|
|
memcpy( alpTextMetric[nFonts], lpntm, sizeof(NEWTEXTMETRIC) );
|
|
}
|
|
else
|
|
memcpy( alpTextMetric[nFonts], lptm, sizeof(TEXTMETRIC) );
|
|
}
|
|
else
|
|
{
|
|
memcpy( alpLogFont[nFonts], lplf, sizeof(LOGFONT) );
|
|
memcpy( alpTextMetric[nFonts], lptm, sizeof(TEXTMETRIC) );
|
|
lstrcpy( szName, lplf->lfFaceName );
|
|
lstrcat( szName, " " );
|
|
lstrcat( szName, pszWeights[lplf->lfWeight/100] );
|
|
if( lplf->lfItalic ) lstrcat( szName, "Italic " );
|
|
szName[lstrlen(szName)-1] = 0;
|
|
}
|
|
|
|
SendDlgItemMessage( hdlgEnum, IDD_FONTS, LB_ADDSTRING, 0, (LONG)(LPSTR)szName );
|
|
|
|
nFonts++;
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
//******************** F R E E E N U M I N F O ************************
|
|
//*****************************************************************************
|
|
|
|
void FreeEnumInfo( void )
|
|
{
|
|
int i;
|
|
|
|
|
|
nFonts = 0;
|
|
|
|
for( i = 0; i < MAX_FONTS; i++ )
|
|
{
|
|
anFontType[i] = 0;
|
|
|
|
if( alpLogFont[i] )
|
|
{
|
|
free( alpLogFont[i] );
|
|
alpLogFont[i] = NULL;
|
|
}
|
|
|
|
if( alpTextMetric[i] )
|
|
{
|
|
free( alpTextMetric[i] );
|
|
alpTextMetric[i] = NULL;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
//********************** F I L L M E T R I C S **************************
|
|
//*****************************************************************************
|
|
|
|
LOGFONT lfDud; // Sleazy, but works perfectly
|
|
TEXTMETRIC tmDud;
|
|
|
|
|
|
void FillMetrics( HWND hdlg, WORD wSel )
|
|
{
|
|
LPLOGFONT lplf;
|
|
LPTEXTMETRIC lptm;
|
|
char szText[128];
|
|
|
|
|
|
lplf = (LPLOGFONT)alpLogFont[wSel]; if( !lplf ) lplf = (LPLOGFONT)&lfDud;
|
|
lptm = (LPTEXTMETRIC)alpTextMetric[wSel]; if( !lptm ) lptm = (LPTEXTMETRIC)&tmDud;
|
|
|
|
sprintf( szText, "%d", anFontType[wSel] );
|
|
SetDlgItemText( hdlg, IDD_NFONTTYPE, szText );
|
|
|
|
//--------------------- Fill In LOGFONT Information -------------------------
|
|
|
|
sprintf( szText, "%d", lplf->lfHeight );
|
|
SetDlgItemText( hdlg, IDD_LFHEIGHT, szText );
|
|
|
|
sprintf( szText, "%d", lplf->lfWidth );
|
|
SetDlgItemText( hdlg, IDD_LFWIDTH, szText );
|
|
|
|
sprintf( szText, "%d", lplf->lfEscapement );
|
|
SetDlgItemText( hdlg, IDD_LFESCAPEMENT, szText );
|
|
|
|
sprintf( szText, "%d", lplf->lfOrientation );
|
|
SetDlgItemText( hdlg, IDD_LFORIENTATION, szText );
|
|
|
|
sprintf( szText, "%d", lplf->lfWeight );
|
|
SetDlgItemText( hdlg, IDD_LFWEIGHT, szText );
|
|
|
|
sprintf( szText, "%d", lplf->lfItalic );
|
|
SetDlgItemText( hdlg, IDD_LFITALIC, szText );
|
|
|
|
sprintf( szText, "%d", lplf->lfUnderline );
|
|
SetDlgItemText( hdlg, IDD_LFUNDERLINE, szText );
|
|
|
|
sprintf( szText, "%d", lplf->lfStrikeOut );
|
|
SetDlgItemText( hdlg, IDD_LFSTRIKEOUT, szText );
|
|
|
|
sprintf( szText, "%d", lplf->lfCharSet );
|
|
SetDlgItemText( hdlg, IDD_LFCHARSET, szText );
|
|
|
|
sprintf( szText, "%d", lplf->lfOutPrecision );
|
|
SetDlgItemText( hdlg, IDD_LFOUTPRECISION, szText );
|
|
|
|
sprintf( szText, "%d", lplf->lfClipPrecision );
|
|
SetDlgItemText( hdlg, IDD_LFCLIPPRECISION, szText );
|
|
|
|
sprintf( szText, "%d", lplf->lfQuality );
|
|
SetDlgItemText( hdlg, IDD_LFQUALITY, szText );
|
|
|
|
sprintf( szText, "0x%.2X", lplf->lfPitchAndFamily );
|
|
SetDlgItemText( hdlg, IDD_LFPITCHANDFAMILY, szText );
|
|
|
|
SetDlgItemText( hdlg, IDD_LFFACENAME, lplf->lfFaceName );
|
|
|
|
if( alpLogFont[wSel] && (bUseEnumFontFamilies || bUseEnumFontFamiliesEx))
|
|
{
|
|
SetDlgItemText( hdlg, IDD_ELFFULLNAME, alpLogFont[wSel]->elfFullName );
|
|
SetDlgItemText( hdlg, IDD_ELFSTYLE, alpLogFont[wSel]->elfStyle );
|
|
}
|
|
else
|
|
{
|
|
SetDlgItemText( hdlg, IDD_ELFFULLNAME, "n/a");
|
|
SetDlgItemText( hdlg, IDD_ELFSTYLE, "n/a");
|
|
}
|
|
|
|
if( alpLogFont[wSel] && bUseEnumFontFamiliesEx )
|
|
SetDlgItemText( hdlg, IDD_ELFSCRIPT, alpLogFont[wSel]->elfScript );
|
|
else
|
|
SetDlgItemText( hdlg, IDD_ELFSCRIPT, "n/a");
|
|
|
|
//-------------------- Fill In TEXTMETRIC Information -----------------------
|
|
|
|
sprintf( szText, "%d", lptm->tmHeight );
|
|
SetDlgItemText( hdlg, IDD_TMHEIGHT, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmAscent );
|
|
SetDlgItemText( hdlg, IDD_TMASCENT, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmDescent );
|
|
SetDlgItemText( hdlg, IDD_TMDESCENT, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmInternalLeading );
|
|
SetDlgItemText( hdlg, IDD_TMINTERNALLEADING, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmExternalLeading );
|
|
SetDlgItemText( hdlg, IDD_TMEXTERNALLEADING, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmAveCharWidth );
|
|
SetDlgItemText( hdlg, IDD_TMAVECHARWIDTH, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmMaxCharWidth );
|
|
SetDlgItemText( hdlg, IDD_TMMAXCHARWIDTH, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmWeight );
|
|
SetDlgItemText( hdlg, IDD_TMWEIGHT, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmItalic );
|
|
SetDlgItemText( hdlg, IDD_TMITALIC, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmUnderlined );
|
|
SetDlgItemText( hdlg, IDD_TMUNDERLINED, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmStruckOut );
|
|
SetDlgItemText( hdlg, IDD_TMSTRUCKOUT, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmFirstChar );
|
|
SetDlgItemText( hdlg, IDD_TMFIRSTCHAR, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmLastChar );
|
|
SetDlgItemText( hdlg, IDD_TMLASTCHAR, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmDefaultChar );
|
|
SetDlgItemText( hdlg, IDD_TMDEFAULTCHAR, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmBreakChar );
|
|
SetDlgItemText( hdlg, IDD_TMBREAKCHAR, szText );
|
|
|
|
sprintf( szText, "0x%.2X", lptm->tmPitchAndFamily );
|
|
SetDlgItemText( hdlg, IDD_TMPITCHANDFAMILY, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmCharSet );
|
|
SetDlgItemText( hdlg, IDD_TMCHARSET, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmOverhang );
|
|
SetDlgItemText( hdlg, IDD_TMOVERHANG, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmDigitizedAspectX );
|
|
SetDlgItemText( hdlg, IDD_TMDIGITIZEDASPECTX, szText );
|
|
|
|
sprintf( szText, "%d", lptm->tmDigitizedAspectY );
|
|
SetDlgItemText( hdlg, IDD_TMDIGITIZEDASPECTY, szText );
|
|
|
|
if( alpLogFont[wSel] && bUseEnumFontFamiliesEx && (anFontType[wSel]==TRUETYPE_FONTTYPE) )
|
|
{
|
|
SetDlgItemInt( hdlg, IDD_NTMFLAGS, alpTextMetric[wSel]->ntmTm.ntmFlags, FALSE);
|
|
SetDlgItemInt( hdlg, IDD_NTMSIZEEM, alpTextMetric[wSel]->ntmTm.ntmSizeEM, FALSE);
|
|
SetDlgItemInt( hdlg, IDD_NTMCELLHEIGHT, alpTextMetric[wSel]->ntmTm.ntmCellHeight, FALSE);
|
|
SetDlgItemInt( hdlg, IDD_NTMAVGWIDTH, alpTextMetric[wSel]->ntmTm.ntmAvgWidth, FALSE);
|
|
|
|
sprintf(szText, "0x%lx", alpTextMetric[wSel]->ntmFontSig.fsUsb[0]);
|
|
SetDlgItemText( hdlg, IDD_USB0, szText);
|
|
sprintf(szText, "0x%lx", alpTextMetric[wSel]->ntmFontSig.fsUsb[1]);
|
|
SetDlgItemText( hdlg, IDD_USB1, szText);
|
|
sprintf(szText, "0x%lx", alpTextMetric[wSel]->ntmFontSig.fsUsb[2]);
|
|
SetDlgItemText( hdlg, IDD_USB2, szText);
|
|
sprintf(szText, "0x%lx", alpTextMetric[wSel]->ntmFontSig.fsUsb[3]);
|
|
SetDlgItemText( hdlg, IDD_USB3, szText);
|
|
sprintf(szText, "0x%lx", alpTextMetric[wSel]->ntmFontSig.fsCsb[0]);
|
|
SetDlgItemText( hdlg, IDD_CSB0, szText);
|
|
sprintf(szText, "0x%lx", alpTextMetric[wSel]->ntmFontSig.fsCsb[1]);
|
|
SetDlgItemText( hdlg, IDD_CSB1, szText);
|
|
|
|
}
|
|
else if( alpLogFont[wSel] && bUseEnumFontFamilies && (anFontType[wSel]==TRUETYPE_FONTTYPE) )
|
|
{
|
|
NEWTEXTMETRIC* lpntm;
|
|
|
|
lpntm = (NEWTEXTMETRIC*) alpTextMetric[wSel];
|
|
SetDlgItemInt( hdlg, IDD_NTMFLAGS, lpntm->ntmFlags, FALSE);
|
|
SetDlgItemInt( hdlg, IDD_NTMSIZEEM, lpntm->ntmSizeEM, FALSE);
|
|
SetDlgItemInt( hdlg, IDD_NTMCELLHEIGHT, lpntm->ntmCellHeight, FALSE);
|
|
SetDlgItemInt( hdlg, IDD_NTMAVGWIDTH, lpntm->ntmAvgWidth, FALSE);
|
|
|
|
SetDlgItemText( hdlg, IDD_USB0, "n/a");
|
|
SetDlgItemText( hdlg, IDD_USB1, "n/a");
|
|
SetDlgItemText( hdlg, IDD_USB2, "n/a");
|
|
SetDlgItemText( hdlg, IDD_USB3, "n/a");
|
|
SetDlgItemText( hdlg, IDD_CSB0, "n/a");
|
|
SetDlgItemText( hdlg, IDD_CSB1, "n/a");
|
|
}
|
|
else
|
|
{
|
|
SetDlgItemText( hdlg, IDD_NTMFLAGS, "n/a");
|
|
SetDlgItemText( hdlg, IDD_NTMSIZEEM, "n/a");
|
|
SetDlgItemText( hdlg, IDD_NTMCELLHEIGHT, "n/a");
|
|
SetDlgItemText( hdlg, IDD_NTMAVGWIDTH, "n/a");
|
|
|
|
SetDlgItemText( hdlg, IDD_USB0, "n/a");
|
|
SetDlgItemText( hdlg, IDD_USB1, "n/a");
|
|
SetDlgItemText( hdlg, IDD_USB2, "n/a");
|
|
SetDlgItemText( hdlg, IDD_USB3, "n/a");
|
|
SetDlgItemText( hdlg, IDD_CSB0, "n/a");
|
|
SetDlgItemText( hdlg, IDD_CSB1, "n/a");
|
|
}
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
//**************** S H O W E N U M F O N T S D L G ******************
|
|
//*****************************************************************************
|
|
|
|
char szFaceName[128];
|
|
|
|
BOOL CALLBACK EnumFontsDlgProc( HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
{
|
|
HDC hdc;
|
|
FARPROC lpEnumProc;
|
|
LPSTR lpsz;
|
|
int rc;
|
|
WORD wSel;
|
|
CHAR lpszEnumFontFam[] = "EnumFontFamilies";
|
|
CHAR lpszEnumFontFamEx[] = "EnumFontFamiliesEx";
|
|
LPLOGFONT lplf;
|
|
|
|
switch( msg )
|
|
{
|
|
case WM_INITDIALOG:
|
|
if( bUseEnumFontFamilies)
|
|
SendMessage( hdlg, WM_SETTEXT, 0, (LPARAM)lpszEnumFontFam);
|
|
else if(bUseEnumFontFamiliesEx)
|
|
SendMessage( hdlg, WM_SETTEXT, 0, (LPARAM)lpszEnumFontFamEx);
|
|
|
|
SetDlgItemText( hdlg, IDD_LPSZFACENAME, szFaceName );
|
|
|
|
FillMetrics( hdlg, 0 );
|
|
|
|
PostMessage( hdlg, WM_COMMAND, IDD_SCREENDC, 0);
|
|
|
|
return TRUE;
|
|
|
|
|
|
case WM_COMMAND:
|
|
switch( LOWORD(wParam) )
|
|
{
|
|
case IDD_SCREENDC:
|
|
case IDD_PRINTERDC:
|
|
case IDD_ENUMERATE:
|
|
GetDlgItemText( hdlg, IDD_LPSZFACENAME, szFaceName, sizeof(szFaceName) );
|
|
SendDlgItemMessage( hdlg, IDD_FONTS, LB_RESETCONTENT, 0, 0 );
|
|
|
|
FreeEnumInfo();
|
|
|
|
hdlgEnum = hdlg;
|
|
|
|
if( SendDlgItemMessage( hdlg, IDD_SCREENDC, BM_GETCHECK, 0, 0 ) )
|
|
hdc = CreateDC( "DISPLAY", NULL, NULL, NULL );
|
|
else if( SendDlgItemMessage( hdlg, IDD_PRINTERDC, BM_GETCHECK, 0, 0 ) )
|
|
hdc = CreatePrinterDC();
|
|
else
|
|
hdc = CreateDC( "DISPLAY", NULL, NULL, NULL );
|
|
|
|
lpEnumProc = (FARPROC) MakeProcInstance( DlgEnumFontsProc, hInst );
|
|
|
|
dprintf( "Calling EnumFonts( '%s' )", szFaceName );
|
|
|
|
if( lstrlen(szFaceName) == 0 )
|
|
lpsz = NULL;
|
|
else
|
|
lpsz = szFaceName;
|
|
|
|
if( bUseEnumFontFamiliesEx )
|
|
{
|
|
BOOL bTanslated;
|
|
|
|
lplf = (LPLOGFONT)malloc( sizeof(LOGFONT) );
|
|
lplf->lfCharSet = GetDlgItemInt( hdlg, IDE_CHARSET, &bTanslated, FALSE);
|
|
if( !bTanslated )
|
|
SetDlgItemInt( hdlg, IDE_CHARSET, DEFAULT_CHARSET, FALSE);
|
|
if(!lpsz) lplf->lfFaceName[0] = '\0';
|
|
else lstrcpy(lplf->lfFaceName, lpsz);
|
|
lplf->lfPitchAndFamily = 0;
|
|
rc = lpfnEnumFontFamiliesEx( hdc, lplf, (FONTENUMPROC) lpEnumProc, NULL, 0 );
|
|
}
|
|
else if( bUseEnumFontFamilies )
|
|
rc = lpfnEnumFontFamilies( hdc, lpsz, (FONTENUMPROC) lpEnumProc, NULL );
|
|
else
|
|
rc = EnumFonts( hdc, lpsz, (FONTENUMPROC) lpEnumProc, 0 );
|
|
|
|
dprintf( " rc = %d", rc );
|
|
|
|
FreeProcInstance( lpEnumProc );
|
|
if(hdc != hdcCachedPrinter) DeleteDC( hdc );
|
|
|
|
FillMetrics( hdlg, 0 );
|
|
SendDlgItemMessage( hdlg, IDD_FONTS, LB_SETCURSEL, 0, 0 );
|
|
|
|
SetFocus( GetDlgItem( hdlg, IDD_FONTS ) );
|
|
|
|
return TRUE;
|
|
|
|
|
|
case IDD_FONTS:
|
|
if( HIWORD(wParam) == LBN_SELCHANGE )
|
|
{
|
|
wSel = (WORD)SendDlgItemMessage( hdlg, IDD_FONTS, LB_GETCURSEL, 0, 0 );
|
|
if( wSel == 0xFFFF ) return TRUE;
|
|
|
|
FillMetrics( hdlg, wSel );
|
|
}
|
|
else if( HIWORD(wParam) == LBN_DBLCLK )
|
|
{
|
|
wSel = (WORD)SendDlgItemMessage( hdlg, IDD_FONTS, LB_GETCURSEL, 0, 0 );
|
|
if( wSel == 0xFFFF ) return TRUE;
|
|
|
|
SetDlgItemText( hdlg, IDD_LPSZFACENAME, alpLogFont[wSel]->elfLogFont.lfFaceName );
|
|
PostMessage( hdlg, WM_COMMAND, IDD_ENUMERATE, 0 );
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
|
|
case IDD_CREATEFONT:
|
|
wSel = (WORD)SendDlgItemMessage( hdlg, IDD_FONTS, LB_GETCURSEL, 0, 0 );
|
|
if( wSel == 0xFFFF ) wSel = 0;;
|
|
|
|
memcpy( &lf, alpLogFont[wSel], sizeof(LOGFONT) );
|
|
|
|
EndDialog( hdlg, TRUE );
|
|
return TRUE;
|
|
|
|
|
|
case IDCANCEL:
|
|
case IDD_CANCEL:
|
|
FreeEnumInfo();
|
|
EndDialog( hdlg, FALSE );
|
|
return TRUE;
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
case WM_CLOSE:
|
|
FreeEnumInfo();
|
|
EndDialog( hdlg, FALSE );
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
//******************** S H O W E N U M F O N T S **********************
|
|
//*****************************************************************************
|
|
|
|
void ShowEnumFonts( HWND hwnd )
|
|
{
|
|
bUseEnumFontFamilies = FALSE;
|
|
bUseEnumFontFamiliesEx = FALSE;
|
|
ShowDialogBox( EnumFontsDlgProc, IDB_ENUMFONTS, NULL );
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
//************ S H O W E N U M F O N T F A M I L I E S **************
|
|
//*****************************************************************************
|
|
|
|
void ShowEnumFontFamilies( HWND hwnd )
|
|
{
|
|
bUseEnumFontFamilies = TRUE;
|
|
bUseEnumFontFamiliesEx = FALSE;
|
|
ShowDialogBox( EnumFontsDlgProc, IDB_ENUMFONTS, NULL );
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
//************ S H O W E N U M F O N T F A M I L I E S E X ************
|
|
//*****************************************************************************
|
|
|
|
void ShowEnumFontFamiliesEx( HWND hwnd )
|
|
{
|
|
bUseEnumFontFamilies = FALSE;
|
|
bUseEnumFontFamiliesEx = TRUE;
|
|
ShowDialogBox( EnumFontsDlgProc, IDB_ENUMFONTS, NULL );
|
|
}
|