让程序使用自带的字体2

15 篇文章 3 订阅

转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/45362655


        之前写过一篇博客,说明关于加载自带字体的。http://blog.csdn.net/zhuhongshu/article/details/39396223,不过后来发现使用AddFontResource函数缺点不少。主要是创建的字体不是自己程序私有的,其他程序也可以使用到。而且函数调用后会在程序目录创建一个.FOT格式的文件。后来再次翻阅MSDN时发现了AddFontMemResourceEx函数,这个函数可以从内存缓冲中加载字体,并且创建的字体是私有的,也不会创建FOT文件。所以又封装了一个简单的类来为程序添加自带的字体。


#pragma once
class CAddMemFont
{
public:
	CAddMemFont(void);
	~CAddMemFont(void);	

   /*
    * @param filePath:字体文件相对本程序的路径,不需要加前缀\\,(example:Font\\微软雅黑.ttf)
    */
	bool AddFont(LPCTSTR szfilePath);

private:

	TCHAR		m_szFilePath[MAX_PATH];
	HANDLE		m_hFont;

};



#include "sdtafx.h"

CAddMemFont::CAddMemFont(void)
	: m_hFont( NULL )
{
	ZeroMemory( m_szFilePath, MAX_PATH );
	GetCurrentDirectory(MAX_PATH, m_szFilePath);
	_tcscat_s(m_szFilePath, MAX_PATH, _T("\\"));

}


CAddMemFont::~CAddMemFont(void)
{
	RemoveFontMemResourceEx(m_hFont);
}

bool CAddMemFont::AddFont(LPCTSTR szfilePath)
{
	_tcscat_s(m_szFilePath, MAX_PATH, szfilePath);

	HANDLE hFile = CreateFile( m_szFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if (hFile == INVALID_HANDLE_VALUE)
	{
		return false;
	}

	DWORD dwFileSize	= GetFileSize(hFile, NULL);
	BYTE* lpBuffer		= new BYTE[dwFileSize+1];

	DWORD dwReadSize	= 0;
	if (!ReadFile( hFile, lpBuffer, dwFileSize, &dwReadSize, NULL))
	{
		delete[] lpBuffer;
		CloseHandle(hFile);
		return false;
	}

	lpBuffer[dwReadSize] = '\0';

	DWORD dwFontNumber	= 0;
	m_hFont = AddFontMemResourceEx(lpBuffer, dwReadSize, 0, &dwFontNumber);
	if ( m_hFont == NULL )
	{
		delete[] lpBuffer;
		CloseHandle(hFile);
		return false;
	}

	return true;
}



        使用时,先把字体文件(这里是“DroidSansFallback.ttf")放到自己指定的目录(这里是程序文件夹中的Font文件夹),然后_tWinMain函数中,声明一个CAddMemFont变量。然后调用AddFont方法就可以了(需要注意的就是,应该在窗体创建之前就调用这个方法,因为窗体的创建过程中就会去解析xml并且创建字体对象,如果在窗体创建之后再调用,就已经迟了)


	CAddMemFont font;
	if (!font.AddFont(_T("Font\\DroidSansFallback.ttf")))
	{
		MessageBox( NULL, _T("加载内存字体错误"), _T(""), MB_OK );
	}


       这时就可以直接在编写xml文件时使用这个字体了,效果如下:





Redrain  QQ:491646717  2015.4.29


如果你希望自定义的导航栏标题字体样式与微信小程序自带的一致,首先需要了解微信小程序的内置样式。微信小程序默认采用了一套简洁的设计,导航栏标题通常是黑色或深灰色的文字,大小和样式可能会因版本更新而略有变化。如果你想尽可能接近原生风格,可以参考以下几个关键点: 1. **颜色**: 使用 `color: #333333;` 或 `color: #666666;` 类似的颜色,这通常对应的是黑色或深灰色。你可以查看小程序设计规范获取确切的颜色值。 2. **字体**: 微信小程序一般会使用系统字体,如`Helvetica Neue`, `PingFang SC`, 或 `Microsoft YaHei`,尺寸可能会基于屏幕适配,但大致在 `18px` 到 `24px` 之间。你可以在 CSS 中指定一个类似的基础字体,然后通过 `font-weight` 来调整粗细。 3. **文本样式**: 默认的标题可能有一定的样式,如无装饰性的文本、居中对齐等。确保你的自定义样式保持一致,例如使用 `.title { text-align: center; }` 来实现居中对齐。 4. **间距和布局**: 检查是否有默认的行高、间距或其他布局设置,同样地,你需要在自定义样式中保留这些细节。 示例代码片段: ```css navigation-bar .title { color: #333333; font-size: 18px; font-family: 'Helvetica Neue', sans-serif; /* 使用类似的小程序常用字体 */ line-height: 24px; /* 根据实际需求调整 */ text-align: center; font-weight: normal; /* 类似原生的轻量感 */ } ``` 记得替换上述代码中的颜色值和其他字体属性,以匹配当前小程序环境的实际样式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值