下午开始接手山海繁体版的工作,一堆的BUG和需求...但愿是个特例,今天在繁体WINXP上忙了一下,感觉整个显示屏像蒙了一层纱布,很影响视觉,字体的轮廓丑陋得让我想起linux. 像山海那样从TureType字体构建位图字体的方式,对我们非常清晰的中文字体也会带来模糊,也怪不得台湾那边的玩家抱怨了.
inline bool GetBit(BYTE* pSrc, int nBit)
{
return (pSrc[nBit/8])&(1 <<(7 -(nBit%8)));
}
//=======================================================
if(GetGlyphOutlineW(
hFontDC, // 设备环境
wChar, // 要获取轮廓的字符
GGO_BITMAP, // 要获取的数据类型.GGO_GRAY8_BITMAP
&metrics, // 字符的信息
sizeof(scratchPad), // 要返回数据内存的大小
scratchPad, // 接收返回数据的内存地址
&matrix) != GDI_ERROR) // 字符渲染时候的变换矩阵
{
glyphCount++;
UINT rowStride = (metrics.gmBlackBoxX + 3) & ~3; // DWORD aligned
UINT size = rowStride * metrics.gmBlackBoxY;
rowStride = rowStride/8 +((rowStride%8)&&8);
rowStride = (rowStride+3) & ~3;
for(UINT y = 0; int(y) < metrics.gmBlackBoxY; y++)
{
UINT x;
for(x = 0; x < metrics.gmBlackBoxX; x++)
{
// 强制去掉字体边缘的阴影.
c.bitmapData[y * c.width + x] = GetBit(src+y * stride, x)? 255 : 0;
}
}
}
//=============================================================
以上方式的获取就会让轮廓清晰多了.
紧接着来的是关于繁体注音输入法的问题, L D 注音的(我不知道怎么去说繁体注音)的第三个字在IME组字的时候 WPARAM 传来的是 63 ('?') . 百思不得其解.
在WIN32 记事本上却是显示的非常正常.还有"锶"等也是如此...新建一个MFC对话框程序,上面的CEdit控件输入这些字符的时候也是显示的 ? ......
更加迷惑....查遍了论坛,也没有找到解决办法. 正想离开公司的时候突然想到, 记事本用的是RichEdit,而RichEdit 是基于Unicode 字符集的, Edit 则是多字节字符集. 是这个问题麽? 修改工程编译选项,选择字符集为UNICODE.结果,CEdit 果然能正确显示繁体"锶"了,那么接下来的事情就很明了啦.....我又有得忙了.....
回家的路上我正想游到对岸,统一了台湾,统一使用简体中文.