遗忘河

一个人的烦恼是因为记性太好.

首页 新随笔 联系 管理
  11 Posts :: 4 Stories :: 13 Comments :: 0 Trackbacks

下午开始接手山海繁体版的工作,一堆的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 = 0int(y) < metrics.gmBlackBoxY; y++)
        {
            UINT x;
            
for(x = 0; x < metrics.gmBlackBoxX; x++)
            {
            // 强制去掉字体边缘的阴影.
                c.bitmapData[y 
* c.width + x] = GetBit(src+* stride, x)? 255 : 0;
            }
        }
}
//=============================================================

以上方式的获取就会让轮廓清晰多了.

紧接着来的是关于繁体注音输入法的问题, L D 注音的(我不知道怎么去说繁体注音)的第三个字在IME组字的时候 WPARAM 传来的是 63 ('?') . 百思不得其解.
在WIN32 记事本上却是显示的非常正常.还有"锶"等也是如此...新建一个MFC对话框程序,上面的CEdit控件输入这些字符的时候也是显示的 ? ......
更加迷惑....查遍了论坛,也没有找到解决办法. 正想离开公司的时候突然想到, 记事本用的是RichEdit,而RichEdit 是基于Unicode 字符集的, Edit 则是多字节字符集. 是这个问题麽? 修改工程编译选项,选择字符集为UNICODE.结果,CEdit 果然能正确显示繁体"锶"了,那么接下来的事情就很明了啦.....我又有得忙了.....
回家的路上我正想游到对岸,统一了台湾,统一使用简体中文.
posted on 2007-04-04 22:13 大悟终空 阅读(273) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。