// ClearTypeTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<Windows.h>
#include <ios>
#pragma comment(lib,"USER32.lib")
#pragma comment(lib,"Gdi32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
/*
fuction:
OutPut: _ibuffer, FE_FONTSMOOTHINGSTANDARD=1,标准模式, FE_FONTSMOOTHINGCLEARTYPE=2,ClearType模式
return: _fResult, 成功!=0,失败=0
BOOL SystemParametersInfoA(
UINT uiAction,
UINT uiParam,
PVOID pvParam,
UINT fWinIni
);
*/
setlocale( LC_ALL, "CHS" );//解决 UNICODE 控制台 程序,无法显示汉字的问题
UINT _iBuffer=-1;
BOOL _fResult;
// 确定是否启用ClearType
_fResult=SystemParametersInfo(SPI_GETCLEARTYPE,0,&_iBuffer,SPIF_UPDATEINIFILE|SPIF_SENDCHANGE);
_tprintf_s(_T("SPI_GETCLEARTYPE=1为启用ClearType:\t%d\n\n"),_iBuffer);
// 确定是否启用字体平滑功能
_fResult=SystemParametersInfo(SPI_GETFONTSMOOTHING,0,&_iBuffer,SPIF_UPDATEINIFILE|SPIF_SENDCHANGE);
_tprintf_s(_T("SPI_GETFONTSMOOTHING=1为启用字体平滑功能:\t%d\n\n"),_iBuffer);
// 确定启用字体平滑功能类型
_fResult=SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE,0,&_iBuffer,SPIF_UPDATEINIFILE|SPIF_SENDCHANGE);
_tprintf_s(_T("SPI_GETFONTSMOOTHINGTYPE=2为启用字体平滑模式ClearType:\t%d\n\n"),_iBuffer);
// 检索ClearType平滑中使用的对比度值。该pvParam参数必须指向一个UINT接收信息。有效对比度值为1000到2200.默认值为1400。
_fResult=SystemParametersInfo(SPI_GETFONTSMOOTHINGCONTRAST,0,&_iBuffer,SPIF_UPDATEINIFILE|SPIF_SENDCHANGE);
_tprintf_s(_T("SPI_GETFONTSMOOTHINGCONTRAST=ClearType平滑中使用的对比度值:\t%d\n\n"),_iBuffer);
// 检索字体平滑方向。该pvParam参数必须指向一个UINT接收信息。可能的值为FE_FONTSMOOTHINGORIENTATIONBGR(蓝绿红)和FE_FONTSMOOTHINGORIENTATIONRGB(红绿蓝)。
_fResult=SystemParametersInfo(SPI_GETFONTSMOOTHINGORIENTATION,0,&_iBuffer,SPIF_UPDATEINIFILE|SPIF_SENDCHANGE);
_tprintf_s(_T("SPI_GETFONTSMOOTHINGORIENTATION=1为字体平滑方向红绿蓝RGB:\t%d\n\n"),_iBuffer);
//SystemParametersInfo(SPI_SETFONTSMOOTHINGTYPE,0,(PVOID)FE_FONTSMOOTHINGCLEARTYPE,SPIF_UPDATEINIFILE|SPIF_SENDCHANGE);
// 当前系统所用字体,SimSun=宋体
HFONT _hfont=(HFONT)GetStockObject(DEFAULT_GUI_FONT);
if (_hfont!=NULL)
{
LOGFONT _LogFont={0};
::GetObject(_hfont, sizeof(LOGFONT), &_LogFont);
TCHAR _fontName[255] = { NULL } ;
_tcscpy_s(_fontName,_LogFont.lfFaceName);
_tprintf_s(_T("当前系统所使用的字体:\t%s\n\n"),_fontName);
::DeleteObject(_hfont);
}
system("pause");
return 0;
}
2、ClearType说明
这里平滑字体边缘相当于平滑功能,它能控制字体clearType开关,这里关闭的情况下,检测ClearType无效的。所以程序流程应该是 先检测平滑功能是否打开,再检测平滑模式是否是ClearType
MSDN关于ClearType的概述:ClearType概述 ,ClearType抗锯齿
C#检测ClearType方法:https://stackoverflow.com/questions/14253249/how-to-check-if-cleartype-is-enabled-in-windows/14253437#14253437