mxh0506的笔记 https://passport2.21ic.com/?128800 [收藏] [复制] [RSS]

日志

CRenderTarget::DrawTextA()中的BUG

已有 915 次阅读2015-4-17 12:07 |个人分类:编程技巧|系统分类:芝麻流水帐| MFC, D2D, CRenderTarget, DrawTextA, BUG

最近在尝试MFC中的D2D支持,用UNICODE还算顺利。不过用多字节编码就不太容易了(虽然在新版Visual Studio中越来越难用到多字节编码了)。
在使用多字节编码的MFC程序中,会遇到这个问题。
CRenderTarget::DrawTextA()内部使用T2CW()将多字节字串转换到UNICODE,然后调用ID2D1HwndRenderTarget.DrawText()绘制:

m_pRenderTarget->DrawText(T2CW(strText), strText.GetLength(), textFormat->m_pTextFormat, &rect, 
                                            *pForegroundBrush, options, measuringMode);

问题出在传递进去的字串长度参数上:它用strText.GetLength()代替了wcslen(),而strText是多字节字串,得到的是按字节计的字串总长。这样做的结果是对于全是单字节的纯西文字串结果正确,而对于像中文这样的多字节编码字串,会越过结尾,继续绘制出许多乱码。


 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)