1. 程式人生 > 其它 >C++獲取系統字型MFC

C++獲取系統字型MFC

呼叫函式

#include <vector>
#include <iostream>
#include <algorithm>
#include <string>
#include <afx.h>
#include <fstream>
using namespace std;
vector<CString> g_vSysFonts;

INT CALLBACK NEnumFontNameProc(LOGFONT* plf, TEXTMETRIC* /*ptm*/, INT /*nFontType*/, LPARAM lParam/**/
) { //同步呼叫的回撥 vector<CString>* sysFonts = (vector<CString>*)lParam; CString strVal(L""); if (sysFonts != NULL) { strVal = plf->lfFaceName; if (strVal.Left(1) != L"@") { sysFonts->push_back(strVal); } } return TRUE; //
EnumFontFamilies 返回值由此回撥返回決定 } void GetSystemFont(HWND& hwnd) { vector<CString> vFont; HDC hdc = ::GetDC(hwnd); // int nRet = ::EnumFontFamilies(hdc, (LPTSTR)NULL, (FONTENUMPROC)NEnumFontNameProc, (LPARAM) & (g_vSysFonts)); int nRet = ::EnumFonts(hdc, (LPTSTR)NULL, (FONTENUMPROC)NEnumFontNameProc, (LPARAM) & (g_vSysFonts)); ::ReleaseDC(hwnd, hdc); }

呼叫方式

std::ofstream out("D://output1.txt", std::ios::app);
HWND m_hWnd = GetActiveWindow();
int i = 0;
GetSystemFont(m_hWnd);
for (vector<CString>::iterator it = g_vSysFonts.begin(); it != g_vSysFonts.end(); it++)
{
    i++;
    CString css = *it;
    CT2CA pszName(css);
    std::string m_NameStd(pszName);
    out << i << ": " << m_NameStd << endl;
}
out.close();

新建個MFC專案 基於對話方塊的 扔進去就ok

結果如下