addfont

RemoveFontResource(L"C:\\Windows\\Fonts\\simfang.ttf");
AddFontResource(L"C:\\Windows\\Fonts\\simfang.ttf");

 

int r = AddFontResource(TEXT("C:\\WINDOWS\\FONTS\\simfang.ttf"));
PostMessage(HWND_BROADCAST, WM_FONTCHANGE, NULL, NULL);
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, NULL, NULL);

???

// flush.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <stdlib.h>
#include <string>
using namespace std;

int initLogFont( LOGFONT& lf ,const wchar_t * familyName, int fontSize ) {
 
	lf.lfHeight = fontSize;
	lf.lfWidth = 0;
	lf.lfEscapement = 0;
	lf.lfOrientation = 0;
	lf.lfWeight = 0;
	lf.lfItalic = 0;
	lf.lfUnderline = 0;
	lf.lfStrikeOut = 0;
	lf.lfCharSet = 1;
	lf.lfOutPrecision = 0;
	lf.lfClipPrecision = 0;
	lf.lfQuality = 0;
	lf.lfPitchAndFamily = 0;
	wcscpy( lf.lfFaceName, familyName );
	return 0;
}


void loadBinaryFile( std::vector<char>& vec, std::string filePath ){
	std::ifstream file( filePath, std::ifstream::binary );
	if( !file.eof() && !file.fail() ) {
		file.seekg( 0, std::ios_base::end );
		std::streampos fileSize = file.tellg();
		vec.resize( fileSize );

		file.seekg( 0, std::ios_base::beg );
		file.read( &vec[0], fileSize );
	}
}
 
int _tmain(int argc, _TCHAR* argv[])
{

	std::vector<char> fontData;
	loadBinaryFile( fontData, "C:\\Windows\\Fonts\\simfang.ttf");

	//Add font to the system (so 'CreateFontIndirect' is aware of the font)
	DWORD count = 0;
	HANDLE fontHandle = AddFontMemResourceEx( ( void * )fontData.data(), fontData.size(), 0,
		&count );

	if( !fontHandle ) {
		std::cout << "Failed 'AddFontMemResourceEx' operation" << std::endl;
		return 0;
	}

	LOGFONT lf;
 	initLogFont( lf, L"FangSong",  10000000 );

	//ask windows for font
	HFONT hfont = CreateFontIndirect( &lf );
	if( !hfont ) {
		std::cout << "Failed 'CreateFontIndirect' operation" << std::endl;
		return 0;
	}
	//initialise DC
	HDC displayDC = GetDC( 0 );
	HDC hdc = CreateCompatibleDC( displayDC );
	HGDIOBJ oldobj = SelectObject( hdc, hfont );

	//ask DC for metrics
	TEXTMETRIC textMetrics;
	bool res = GetTextMetrics( hdc, &textMetrics );

	if( !res ) {
		std::cout << "Failed 'GetTextMetrics' operation" << std::endl;
		return 0;
	}
	std::cout << "textMetrics.tmHeight : " << textMetrics.tmHeight << std::endl;
	std::cout << "textMetrics.tmDescent : " << textMetrics.tmDescent << std::endl;
	std::cout << "textMetrics.tmAscent : " << textMetrics.tmAscent << std::endl;
	system("PAUSE");
	return 0;
}

  

posted on 2020-06-24 20:07  lydstory  阅读(430)  评论(0)    收藏  举报

导航