C++獲取系統字型MFC
阿新 • • 發佈:2021-10-15
呼叫函式
#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
結果如下