问询:win32,TTF字体,文字无法显示的问题。(已解决)

  • 本帖最后由 火样男子 于 2012-8-24 12:42 编辑 *

这是我的Hello World的工程。cocos2d自带,未修改。

CCLabelTTF,绘制1段文字“Hello World”在屏幕上。
结果只显示一片空白区域。(见附件,红圈处)

tests工程也是如此,所有的文字都无法显示。

我用的是win xp系统,工程也是windows的。

希望,大神能帮忙解决。
感谢。

在它1.0的版本时候支持 中文就有点问题,现在居然还有遗留问题,唉。

  • 本帖最后由 火样男子 于 2012-8-24 12:40 编辑 *

好的,找到解决方法了。

修改 win32/ccimage.cpp 文件

m_hBmp = CreateBitmap(nWidth, nHeight, 1, 32, NULL);
改成 :
m_hBmp = CreateCompatibleBitmap(m_hDC, nWidth, nHeight);
填加
bi.bmiHeader.biBitCount = 32;
在下面这句话之前
GetDIBits(dc.getDC(), dc.getBitmap(), 0, m_nHeight, m_pData, (LPBITMAPINFO)&bi, DIB_RGB_COLORS);

如果你有和我一样的问题。
可以尝试1下这个方法。

好运。

额,有没有试过换一种字体啊,控件没问题, 估计是字体或者系统的问题。

我在看 CCLabelTTF 的 win32 代码。

是用 window 的 api 实现的。
先 dc.drawtext() 到 hbitmap,
然后 从 hbitmap 拷贝到 ccimage 的 m_pData 时候,调用了 GetDIBits(),返回值错误。
然后 m_pData 就是一片空的内存区域,显示在屏幕上,就是那样子了。

又看了1下。

hbitmap 由 CreateBitmap 创建,指定32位, drawtext会失败。

hbitmap 由 CreateCompatibleBitmap 创建,就可以 drawtext 成功。
但是,hbitmap 的 bitCount 是 1位。
所以,后面 hbitmap 复制到 CCImage.m_pData 的时候,位数不匹配。