有获取控件字体的软件吗?
c++吧
全部回复
仅看楼主
level 11
gameloftyou 楼主
使用上类似spy++的,没有的话谁写个也行[Love]
另外为什么向非控件窗口发送WM_GETFONT总是返回NULL,具体原因是神马[揉脸]

2012年10月31日 12点10分 1
level 11
gameloftyou 楼主
[拍砖]是获取字体信息。。。
2012年10月31日 12点10分 2
level 11
2012年10月31日 12点10分 3
[KISS]明白了。
2012年10月31日 12点10分
level 11
gameloftyou 楼主

就差个界面了。。。
string GetFontInfo(HFONT hFont)
{
    LOGFONT            logFont;
    ostringstream        ostr;
    GetObject(hFont,
sizeof(LOGFONT),&logFont);
    ostr<<"nHeight: "<<logFont.lfHeight<<"\r\n";
    ostr<<"nWidth: "<<logFont.lfWidth<<"\r\n";
    ostr<<"nEscapement: "<<logFont.lfEscapement<<"\r\n";
    ostr<<"nOrientation: "<<logFont.lfOrientation<<"\r\n";
    
switch(logFont.lfWeight)
    {
    
case 0:
        ostr<<"fnWeight: FW_DONTCARE = 0\r\n";
        
break;
    
case 100:
        ostr<<"fnWeight: FW_THIN = 100\r\n";
        
break;
    
case 200:
        ostr<<"fnWeight: FW_EXTRALIGHT or FW_ULTRALIGHT = 200\r\n";
        
break;
    
case 300:
        ostr<<"fnWeight: FW_LIGHT = 300\r\n";
        
break;
    
case 400:
        ostr<<"fnWeight: FW_NORMAL or FW_REGULAR = 400\r\n";
        
break;
    
case 500:
        ostr<<"fnWeight: FW_MEDIUM = 500\r\n";
        
break;
    
case 600:
        ostr<<"fnWeight: FW_SEMIBOLD or FW_DEMIBOLD = 600\r\n";
        
break;
    
case 700:
        ostr<<"fnWeight: FW_BOLD = 700\r\n";
        
break;
    
case 800:
        ostr<<"fnWeight: FW_EXTRABOLD or FW_ULTRABOLD = 800\r\n";

2012年10月31日 12点10分 10
level 11
gameloftyou 楼主
        
break;
    
case 900:
        ostr<<"fnWeight: FW_HEAVY or FW_BLACK = 900\r\n";
        
break;
    
default:
        ostr<<"fnWeight: unknown\r\n";
    }
    
if(logFont.lfItalic) ostr<<"fdwItalic: 
true\r\n";
    
else ostr<<"fdwItalic: 
false\r\n";
    
if(logFont.lfUnderline) ostr<<"fdwUnderline: 
true\r\n";
    
else ostr<<"fdwUnderline: 
false\r\n";
    
if(logFont.lfStrikeOut) ostr<<"fdwStrikeOut: 
true\r\n";
    
else ostr<<"fdwStrikeOut: 
false\r\n";
    
switch(logFont.lfCharSet)
    {
    
case ANSI_CHARSET:
        ostr<<"fdwCharSet: ANSI_CHARSET = 0\r\n";
        
break;
    
case BALTIC_CHARSET:
        ostr<<"fdwCharSet: BALTIC_CHARSET = 186\r\n";
        
break;
    
case CHINESEBIG5_CHARSET:
        ostr<<"fdwCharSet: CHINESEBIG5_CHARSET = 136\r\n";
        
break;
    
case DEFAULT_CHARSET:
        ostr<<"fdwCharSet: DEFAULT_CHARSET = 1\r\n";
        
break;
    
case EASTEUROPE_CHARSET:
        ostr<<"fdwCharSet: EASTEUROPE_CHARSET = 238\r\n";
        
break;
    
case GB2312_CHARSET:
        ostr<<"fdwCharSet: GB2312_CHARSET = 134\r\n";
        
break;
    
case GREEK_CHARSET:
        ostr<<"fdwCharSet: GREEK_CHARSET = 161\r\n";

2012年10月31日 12点10分 11
level 11
gameloftyou 楼主
        
break;
    
case HANGUL_CHARSET:
        ostr<<"fdwCharSet: HANGUL_CHARSET = 129\r\n";
        
break;
    
case MAC_CHARSET:
        ostr<<"fdwCharSet: MAC_CHARSET = 77\r\n";
        
break;
    
case OEM_CHARSET:
        ostr<<"fdwCharSet: OEM_CHARSET = 255\r\n";
        
break;
    
case RUSSIAN_CHARSET:
        ostr<<"fdwCharSet: RUSSIAN_CHARSET = 204\r\n";
        
break;
    
case SHIFTJIS_CHARSET:
        ostr<<"fdwCharSet: SHIFTJIS_CHARSET = 128\r\n";
        
break;
    
case SYMBOL_CHARSET:
        ostr<<"fdwCharSet: SYMBOL_CHARSET = 2\r\n";
        
break;
    
case TURKISH_CHARSET:
        ostr<<"fdwCharSet: TURKISH_CHARSET = 162\r\n";
        
break;
    
case VIETNAMESE_CHARSET:
        ostr<<"fdwCharSet: VIETNAMESE_CHARSET = 163\r\n";
        
break;
    
case JOHAB_CHARSET:
        ostr<<"fdwCharSet: JOHAB_CHARSET = 130\r\n";
        
break;
    
case ARABIC_CHARSET:
        ostr<<"fdwCharSet: ARABIC_CHARSET = 178\r\n";
        
break;
    
case HEBREW_CHARSET:
        ostr<<"fdwCharSet: HEBREW_CHARSET = 177\r\n";
        
break;
    
case THAI_CHARSET:
        ostr<<"fdwCharSet: THAI_CHARSET = 222\r\n";

2012年10月31日 12点10分 12
level 11
gameloftyou 楼主
        
break;
    
default:
        ostr<<"fdwCharSet: unknown\r\n";
    }
    
switch(logFont.lfOutPrecision)
    {
    
case OUT_CHARACTER_PRECIS:
        ostr<<"fdwOutputPrecision: OUT_CHARACTER_PRECIS = 2\r\n";
        
break;
    
case OUT_DEFAULT_PRECIS:
        ostr<<"fdwOutputPrecision: OUT_DEFAULT_PRECIS = 0\r\n";
        
break;
    
case OUT_DEVICE_PRECIS:
        ostr<<"fdwOutputPrecision: OUT_DEVICE_PRECIS = 5\r\n";
        
break;
    
case OUT_OUTLINE_PRECIS:
        ostr<<"fdwOutputPrecision: OUT_OUTLINE_PRECIS = 8\r\n";
        
break;
    
case OUT_PS_ONLY_PRECIS:
        ostr<<"fdwOutputPrecision: OUT_PS_ONLY_PRECIS = 10\r\n";
        
break;
    
case OUT_RASTER_PRECIS:
        ostr<<"fdwOutputPrecision: OUT_RASTER_PRECIS = 6\r\n";
        
break;
    
case OUT_STRING_PRECIS:
        ostr<<"fdwOutputPrecision: OUT_STRING_PRECIS = 1\r\n";
        
break;
    
case OUT_STROKE_PRECIS:
        ostr<<"fdwOutputPrecision: OUT_STROKE_PRECIS = 3\r\n";
        
break;
    
case OUT_TT_ONLY_PRECIS:
        ostr<<"fdwOutputPrecision: OUT_TT_ONLY_PRECIS = 7\r\n";
        
break;
    
case OUT_TT_PRECIS:
        ostr<<"fdwOutputPrecision: OUT_TT_PRECIS = 4\r\n";
        
break;

2012年10月31日 12点10分 13
level 11
gameloftyou 楼主
    
default:
        ostr<<"fdwOutputPrecision: unknown\r\n";
    }
    
switch(logFont.lfClipPrecision)
    {
    
case CLIP_CHARACTER_PRECIS:
        ostr<<"fdwClipPrecision: CLIP_CHARACTER_PRECIS = 1\r\n";
        
break;
    
case CLIP_DEFAULT_PRECIS:
        ostr<<"fdwClipPrecision: CLIP_DEFAULT_PRECIS = 0\r\n";
        
break;
    
case CLIP_DFA_DISABLE:
        ostr<<"fdwClipPrecision: CLIP_DFA_DISABLE = 4<<4\r\n";
        
break;
    
case CLIP_EMBEDDED:
        ostr<<"fdwClipPrecision: CLIP_EMBEDDED = 8<<4\r\n";
        
break;
    
case CLIP_LH_ANGLES:
        ostr<<"fdwClipPrecision: CLIP_LH_ANGLES = 1<<4\r\n";
        
break;
    
case CLIP_MASK:
        ostr<<"fdwClipPrecision: CLIP_MASK = 0xf\r\n";
        
break;
    
case CLIP_STROKE_PRECIS:
        ostr<<"fdwClipPrecision: CLIP_STROKE_PRECIS = 2\r\n";
        
break;
    
case CLIP_TT_ALWAYS:
        ostr<<"fdwClipPrecision: CLIP_TT_ALWAYS = 2<<4\r\n";
        
break;
    
default:
        ostr<<"fdwClipPrecision: unknown\r\n";
    }
    
switch(logFont.lfQuality)
    {
    
case ANTIALIASED_QUALITY:
        ostr<<"fdwQuality: ANTIALIASED_QUALITY = 4\r\n";
        
break;
    
case CLEARTYPE_QUALITY:

2012年10月31日 12点10分 14
level 11
gameloftyou 楼主
        ostr<<"fdwQuality: CLEARTYPE_QUALITY = 5\r\n";
        
break;
    
case CLEARTYPE_NATURAL_QUALITY:
        ostr<<"fdwQuality: CLEARTYPE_NATURAL_QUALITY = 6\r\n";
        
break;
    
case DEFAULT_QUALITY:
        ostr<<"fdwQuality: DEFAULT_QUALITY = 0\r\n";
        
break;
    
case DRAFT_QUALITY:
        ostr<<"fdwQuality: DRAFT_QUALITY = 1\r\n";
        
break;
    
case NONANTIALIASED_QUALITY:
        ostr<<"fdwQuality: NONANTIALIASED_QUALITY = 3\r\n";
        
break;
    
case PROOF_QUALITY:
        ostr<<"fdwQuality: PROOF_QUALITY = 2\r\n";
        
break;
    
default:
        ostr<<"fdwQuality: unknown\r\n";
    }
    bitset<8> b(logFont.lfPitchAndFamily);
    
switch(logFont.lfPitchAndFamily>>2)
    {
    
case FF_DECORATIVE>>2:
        ostr<<"fdwPitchAndFamily: FF_DECORATIVE | ";
        
if(b.test(0)) ostr<<"FIXED_PICH\r\n";
        
else if(b.test(1)) ostr<<"VARIABLE_PITCH\r\n";
        
else ostr<<"DEFAULT_PITCH\r\n";
        
break;
    
case FF_DONTCARE>>2:
        ostr<<"fdwPitchAndFamily: FF_DONTCARE | ";
        
if(b.test(0)) ostr<<"FIXED_PICH\r\n";
        
else if(b.test(1)) ostr<<"VARIABLE_PITCH\r\n";
        
else ostr<<"DEFAULT_PITCH\r\n";

2012年10月31日 12点10分 15
level 11
gameloftyou 楼主
        
break;
    
case FF_MODERN>>2:
        ostr<<"fdwPitchAndFamily: FF_MODERN | ";
        
if(b.test(0)) ostr<<"FIXED_PICH\r\n";
        
else if(b.test(1)) ostr<<"VARIABLE_PITCH\r\n";
        
else ostr<<"DEFAULT_PITCH\r\n";
        
break;
    
case FF_ROMAN>>2:
        ostr<<"fdwPitchAndFamily: FF_ROMAN | ";
        
if(b.test(0)) ostr<<"FIXED_PICH\r\n";
        
else if(b.test(1)) ostr<<"VARIABLE_PITCH\r\n";
        
else ostr<<"DEFAULT_PITCH\r\n";
        
break;
    
case FF_SCRIPT>>2:
        ostr<<"fdwPitchAndFamily: FF_SCRIPT | ";
        
if(b.test(0)) ostr<<"FIXED_PICH\r\n";
        
else if(b.test(1)) ostr<<"VARIABLE_PITCH\r\n";
        
else ostr<<"DEFAULT_PITCH\r\n";
        
break;
    
case FF_SWISS>>2:
        ostr<<"fdwPitchAndFamily: FF_SWISS | ";
        
if(b.test(0)) ostr<<"FIXED_PICH\r\n";
        
else if(b.test(1)) ostr<<"VARIABLE_PITCH\r\n";
        
else ostr<<"DEFAULT_PITCH\r\n";
        
break;
    
default:
        ostr<<"fdwPitchAndFamily: unknown\r\n";
    }
    ostr<<"lpszFace: "<<logFont.lfFaceName<<"\r\n";
    
    
return ostr.str();
} 
2012年10月31日 12点10分 16
1