·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> PPC汉化 >> PPC字体修改之初步尝试    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

PPC字体修改之初步尝试

作者: 雅枫 来源:雅枫的博客 时间:2005-09-16 点击:13461

现在让我们尝试着修改一个软件的字体,其实PPC的字体函数只有一个(我知道的),就是CreateFontIndirectW函数,虽然MFC中也有个CreateFont,但这只是CreateFontIndirectW的封装而已。Win32中不是还有个GetStockObject吗?可惜现在它只能生成一种字体,就是SYSTEM_FONT,并且显示非常正常所以GetStockObject就不必考虑了。所以似乎字体问题简单了起来……,不过PPC程序有些程序使用了动态的库如MFC库。又没有好用的Debug。所以好多程序的修改难度比较大,我现在也是处于摸索阶段。

现在先介绍一下CreateFontIndirectW这个函数:

HFONT CreateFontIndirect(
  const LOGFONT* lplf
);
Parameters
lplf

[in] Long pointer to a LOGFONT structure that defines the characteristics of the logical font.

Return Values
A handle to a logical font indicates success. NULL indicates failure. To get extended error information, call GetLastError.

上边是PPC2003的sdk里边的介绍,在MSDN里边也有。这个函数只有一个参数,就是Logfont结构体。返回值是一个字体的句柄,如果调用失败则返回NULL。Logfont是一个结构体,是如下定义的:
This structure defines the attributes of a font.
typedef struct tagLOGFONT {
  LONG lfHeight;
  LONG lfWidth;
  LONG lfEscapement;
  LONG lfOrientation;
  LONG lfWeight;
  BYTE lfItalic;
  BYTE lfUnderline;
  BYTE lfStrikeOut;
  BYTE lfCharSet;
  BYTE lfOutPrecision;
  BYTE lfClipPrecision;
  BYTE lfQuality;
  BYTE lfPitchAndFamily;
  TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT;
这些参数不用我介绍了吧?有用的就是第一个即字体的高度。还有就是Charset,这是设置字符集的,不过在PPC下,似乎没啥用处。最后一个则是字体名,如“宋体”,“Tahoma”等。下边尝试着改一下一个软件的字体。
       第一个被动刀子的是大树(谁是大树?当然是风流倜傥,玉树临风的……还是自己到bbs.hanzify.org去问吧:)汉化的FunnySnake TKCreater这是个非常好用的主题编辑软件。这个软件几乎在我的PDA上没有一个标准字体-_-b,当然是先修改标准字体。我发现对话框字体全是Tahoma 8,可能是我PDA的分辨率问题吧。显示效果很差。所以我都改成了Tahoma 9就有些地方显示效果比较好了。但界面还有许多地方字体烂,譬如说主界面:


打开IDA Pro反汇编,搜索Font字串,找到几处:

一共找到7处,先分析第一处:

我们知道CreateFontIndirectW的参数只有一个。前面文章我们分析。前四个参数是通过寄存器传递。所以R0里边就是Logfont的地址了。看看上边图,IDA已经标出来了。R0里边的值是SP+#0xC0+var_BC。第一个参数也就是字体高度了。我们可以往上翻,找到设置字体高度的地方:

MOV    R3, #0xD

STR     R3, [SP,#0xC0+var_BC]

先把0d放入r3,然后把r3,放入SP+#0xC0+var_BC,这个地址。所以字体高度就是0d.我试着改成0e,其他也照样都改成0e.只是最后一个有点麻烦:

 


首先我们看到参数在
R4里边。再看前边:



首先,字体高度是在R7里边,而从上图的第一行来看则是来源于R2。R2又是这个字函数传入的第二个参数,所以改法即有两种:一是把  MOV     R7, R2,改成  MOV     R7, 0x0E,这样不管传入什么参数,得到的都是0x0E的字体,再一种改法便是到函数外边改:



双击图中的黄色部分,就到了调用处



修改这里就可以了。全部修改完后效果如下:



但是……


菜单成了这样字这是真么回事呢?原来是因为本来这地方是两行一样的字体摞起来的。字体改大后由于不一样了就成酱紫了。并且只要这地方改好了,主界面字体就完了,弄了好一阵子才改的像点样子了(这个太麻烦,我就不写了)。可惜最上边一行时间没法弄好了。算一个美中不足吧。还有一处美中不足的地方是关于对话框的那个连接,我也暂时没找到改法。

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): PPC 字体

·上一篇: 论坛精华 - Inno Setup 使用篇问世 ·下一篇: 关于打破 NSIS 的 8192 字节限制的更简单方法

· 版权申明: 本文引自《雅枫的博客》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《雅枫的博客》[ 作者: 雅枫],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号