[高分征解] 关于字体,一个很奇怪的问题

Genghiskhan 2006-04-24 10:47:13
在中文2000 Professional下,用API hook了TextOutA、TextOutW、ExtTextOutA、ExtTextOutW等函数后,发现一个很奇怪的问题。比如,我自己编写的函数是
HookExtTextOutW(HDC hdc,
int X,
int Y,
UINT fuOptions,
CONST RECT *lprc,
LPCWSTR lpString,
INT cbCount,
CONST INT *lpDx)

该函数用来取代GDI32中的ExtTextOutW,当为桌面设置Terminal或者System字体时,lpString中存放的是实际桌面上的字符串,可是当把桌面字体设置为Tahoma或者宋体时,lpString中得到的却是乱码,请问lpString和字体是什么关系?谢谢!
...全文
173 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lisypro 2006-04-26
  • 打赏
  • 举报
回复
char szBuff[MAX_TEXTBUFFER_LEN*2];
支持宽字符么
Genghiskhan 2006-04-25
  • 打赏
  • 举报
回复
我觉得不是Unicode的问题,Unicode我已经处理过了,代码如下:

int cbLen;
char szBuff[MAX_TEXTBUFFER_LEN*2];
int nIndex;
int nOldLen, nNewLen, nNewChars;
DWORD dwRet;


cbLen = WideCharToMultiByte(GetACP(), 0,
lpString , cbCount,
szBuff, MAX_TEXTBUFFER_LEN*2, NULL, NULL);
szBuff[cbLen] = 0x00;

打印szBuff里的内容,得到的是乱码,但是乱码只出现在资源管理器的右侧窗口中,而且只有在选择“图标”或者“缩略图”查看方式时才有乱码,设置“列表”和“详细资料”查看方式时也是好的。而且还有一个特征,当为桌面设置Terminal或者System字体时,szBuff中无乱码,打印出的内容是正常的,可是当把桌面字体设置为Tahoma或者宋体时,szBuff中得到的却是乱码
laofang 2006-04-24
  • 打赏
  • 举报
回复
use unicode
fairyprince 2006-04-24
  • 打赏
  • 举报
回复
因为 U 和 A 的高低位互反,而中文又占两个字节所以……
fairyprince 2006-04-24
  • 打赏
  • 举报
回复
HookExtTextOutW
W 带表宽字符
lpString 返回的是 unicode 字符即宽字符!
如果这个字串中有英文你调试时看到的就是乱码!

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧