作者:朱金灿
来源:http://blog.csdn.net/clever101
同事在使用BCG库图表组件(BCG库的版本为BCGCBPRO1510)时遇到一个问题,就是图表标题总是出现乱码,具体如下图:
我查看了一下BCG库的源码,发现BCG库的绘制接口是采用D2D的接口。D2D是微软推出的一个二维绘制的com组件,只支持unicode字符,非unicode字符需要转换为unicode字符。其中绘制标题字符的代码如下:
USES_CONVERSION; CStringW wStr = T2CW(strText); // strText为图表标题 m_pRenderTarget->DrawText(wStr,strText.GetLength(),pWriteTextFormat, &rectD2D, pD2DBrush, options);
这段代码是有问题的,问题在于strText转化为unicode字符wStr后,strText的长度并不等于wStr,因此DrawText绘制wStr使用的却是strText的长度,这样是明显不对的,会出现读取内存越界从而读到的是乱码。还有一个隐含的错误是假如strText本身就是unicode字符,那么它就不需要转换的。因此需要把这句代码作如下修改:
#ifndef UNICODE USES_CONVERSION; CStringW wStr = T2CW(strText); m_pRenderTarget->DrawText(wStr,wStr.GetLength(),pWriteTextFormat, &rectD2D, pD2DBrush, options); #else m_pRenderTarget->DrawText(strText,strText.GetLength(),pWriteTextFormat, &rectD2D, pD2DBrush, options); #endif