QT从字体名获取字库文件路径(从宋体获取到simsun.ttc) |
您所在的位置:网站首页 › windowsttf字体库 › QT从字体名获取字库文件路径(从宋体获取到simsun.ttc) |
MFC版本的从字体名获取字库文件路径点击此处 MFC/QT利用COM组件接口从字体名称、粗体、斜体获取到字体文件路径的方法-CSDN博客 最近弄的一份项目需要裁剪ttf字库,故需要用到此功能! 用了几年QT,个人感觉类库是非常强大的! QT相比VS的话亮点在开源的类库非常的丰富,几乎无所不能的覆盖到位,以及在大型项目中能轻松实现多语言功能! 唯一美中不足的就是他的gcc开发包非常蛋疼,一旦遇到崩溃闪退bug非常难找,有些根本断不到点,甚至切换成QT+VS+DMP都无法定位的! ------------------------------------------------------------------------------------------------------------ 从VC6或VS目录拷贝一份user32.lib与gdi32.lib 在pro文件加两行 LIBS += user32.lib LIBS += gdi32.lib #include #include #include #include #include #include #include #include #include #include #include #include #include // Get system font file path std::string GetSystemFontFile(const std::string &faceName) { static const LPWSTR fontRegistryPath = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"; HKEY hKey; LONG result; std::wstring wsFaceName(faceName.begin(), faceName.end()); // Open Windows font registry key result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, fontRegistryPath, 0, KEY_READ, &hKey); if (result != ERROR_SUCCESS) { return ""; } DWORD maxValueNameSize, maxValueDataSize; result = RegQueryInfoKey(hKey, 0, 0, 0, 0, 0, 0, 0, &maxValueNameSize, &maxValueDataSize, 0, 0); if (result != ERROR_SUCCESS) { return ""; } DWORD valueIndex = 0; LPWSTR valueName = new WCHAR[maxValueNameSize]; LPBYTE valueData = new BYTE[maxValueDataSize]; DWORD valueNameSize, valueDataSize, valueType; std::wstring wsFontFile; // Look for a matching font name do { wsFontFile.clear(); valueDataSize = maxValueDataSize; valueNameSize = maxValueNameSize; result = RegEnumValue(hKey, valueIndex, valueName, &valueNameSize, 0, &valueType, valueData, &valueDataSize); valueIndex++; if (result != ERROR_SUCCESS || valueType != REG_SZ) { continue; } std::wstring wsValueName(valueName, valueNameSize); // Found a match if (_wcsnicmp(wsFaceName.c_str(), wsValueName.c_str(), wsFaceName.length()) == 0) { wsFontFile.assign((LPWSTR)valueData, valueDataSize); break; } } while (result != ERROR_NO_MORE_ITEMS); delete[] valueName; delete[] valueData; RegCloseKey(hKey); if (wsFontFile.empty()) { return ""; } // Build full font file path WCHAR winDir[MAX_PATH]; GetWindowsDirectory(winDir, MAX_PATH); std::wstringstream ss; ss |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |