$| = 1;
use blib;
use Win32::API;
use Win32::API::Callback;
Win32::API::Struct->typedef( 'LOGFONT', qw(
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement;
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet;
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
TCHAR lfFaceName[32];
));
Win32::API::Struct->typedef( 'NEWTEXTMETRIC', qw(
LONG tmHeight;
LONG tmAscent;
LONG tmDescent;
LONG tmInternalLeading;
LONG tmExternalLeading;
LONG tmAveCharWidth;
LONG tmMaxCharWidth;
LONG tmWeight;
LONG tmOverhang;
LONG tmDigitizedAspectX;
LONG tmDigitizedAspectY;
TCHAR tmFirstChar;
TCHAR tmLastChar;
TCHAR tmDefaultChar;
TCHAR tmBreakChar;
BYTE tmItalic;
BYTE tmUnderlined;
BYTE tmStruckOut;
BYTE tmPitchAndFamily;
BYTE tmCharSet;
DWORD ntmFlags;
UINT ntmSizeEM;
UINT ntmCellHeight;
UINT ntmAvgWidth;
));
Win32::API::Struct->typedef( 'ENUMLOGFONT', qw(
LOGFONT elfLogFont;
BYTE elfFullName[64];
BYTE elfStyle[32];
));
my $sub = sub {
my($lpelf, $lpntm, $FontType, $lparam) = @_;
print "LPELF.lfFaceName = '$lpelf->{elfLogFont}->{lfFaceName}'\n";
return 1;
};
my $EnumFontFamProc = Win32::API::Callback->new($sub, "SSNN", "N");
$EnumFontFamProc->{intypes} = [qw(
ENUMLOGFONT
NEWTEXTMETRIC
DWORD
DWORD
)];
Win32::API->Import("gdi32", "CreateDC", "PPPP", "N");
Win32::API->Import("gdi32", "EnumFontFamilies", "NPKN", "N");
$hdc = CreateDC("DISPLAY", 0, 0, 0);
EnumFontFamilies($hdc, "Arial", $EnumFontFamProc, 42);
print "everything is fine.\n";