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

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和字体是什么关系?谢谢!
...全文
153 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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 字符即宽字符!
如果这个字串中有英文你调试时看到的就是乱码!
  • 打赏
  • 举报
回复
相关推荐
发帖
进程/线程/DLL
加入

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2006-04-24 10:47
社区公告
暂无公告