界面显示Unicode字符的问题!!!!!!!!!!!!!!!!

illhanlanjian 2008-10-08 08:49:04
我用VS2005建了一个工程,界面上显示的字符是一些Unicode的字符比如Σύνολο χαρακτηριστικών του ποντικιού,首先我用RegisterClassW注册了一个窗口然后CreateWindowW创建这个窗口,当我用TextOutW将这个字符串显示在窗口中时有一些字符是乱码,如果我再用DialogBoxW创建一个对话框然后再对话框中TextOutW字符串的话,字符串显示正常,为什么在我注册的窗口中显示会不正常呢?
...全文
186 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
illhanlanjian 2008-10-08
  • 打赏
  • 举报
回复
不知道为什么主窗口只能显示一个字符SetWindowTextW(hwnd,L"vwvwvwwv");只能显示一个V出来
illhanlanjian 2008-10-08
  • 打赏
  • 举报
回复
不是换不换字体的问题TextOutW 前面加上SelectObject(hdc,hFont);后TextOutW 显示的字符串就正常了,不过主窗口中SetWindowTextW显示的字符串还是乱码
jingtan 2008-10-08
  • 打赏
  • 举报
回复
换一种字体看看.
illhanlanjian 2008-10-08
  • 打赏
  • 举报
回复
主窗口中SetWindowTextW和TextOutW出的字符串始终是乱码
illhanlanjian 2008-10-08
  • 打赏
  • 举报
回复
主窗口中SetWindowTextW和TextOutW出的字符串始终是乱码
illhanlanjian 2008-10-08
  • 打赏
  • 举报
回复
#include <windows.h>
#include "resource.h"

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
BOOL CALLBACK AutoScroll(HWND hdwnd, UINT message, WPARAM wParam, LPARAM lParam);
HINSTANCE hInst;
HWND hWndDlg;
HFONT hFont,hFont1;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
hInst=hInstance;
HWND hwnd ;
MSG msg ;
WNDCLASSW wndclass ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = L"ChosFont" ;
wndclass.lpszClassName = L"ChosFont" ;

if (!RegisterClassW (&wndclass))
{
MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
NULL, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindowW ( L"ChosFont", L"ChooseFont",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;

ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}

LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)
{
;
HDC hdc ;

PAINTSTRUCT ps ;
LOGFONT lf;

switch (message)
{
case WM_CREATE:
memset(&lf, 0, sizeof(lf));
lf.lfHeight = MulDiv(11, ::GetDeviceCaps(GetDC(GetDlgItem(hWndDlg,IDC_ST1)), LOGPIXELSY), 72);
lf.lfWeight = FW_NORMAL;
lf.lfOutPrecision = OUT_TT_ONLY_PRECIS;
// wcscpy(lf.lfFaceName, L"Lucida Sans Unicode");
strcpy(lf.lfFaceName,"Lucida Sans Unicode");
hFont=CreateFontIndirect(&lf); // Get text height
////////////////////////////
SetWindowTextW(hwnd,L"Σύνολο χαρακτηριστικών του ποντικιού");
return 0 ;

case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDM_FONT:
DialogBoxW(hInst, MAKEINTRESOURCEW(IDD_DIALOG1), hwnd, (DLGPROC)AutoScroll);

return 0 ;
}
return 0 ;

case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;

TextOutW(hdc,0,0,L"Σύνολο χαρακτηριστικών του ποντικιού",wcslen(L"Σύνολο χαρακτηριστικών του ποντικιού"));
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
BOOL CALLBACK AutoScroll(HWND hdwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

PAINTSTRUCT ps;
switch(message)
{
case WM_INITDIALOG:
hWndDlg=hdwnd;
SendMessage(GetDlgItem(hdwnd,IDC_ST1),WM_SETFONT,(WPARAM)hFont,MAKELPARAM(true,0));
SetWindowTextW(hdwnd,L"Σύνολο χαρακτηριστικών του ποντικιού");
SetDlgItemTextW(hdwnd,IDC_ST1,L"Σύνολο χαρακτηριστικών του ποντικιού");
break;
case WM_COMMAND:
switch(wParam)
{
case IDOK:
EndDialog(hdwnd, LOWORD(wParam));
break;
}
break;
case WM_PAINT:
HDC hdc;
hdc = BeginPaint(hdwnd, &ps);
TextOutW(hdc,0,0,L"Σύνολο χαρακτηριστικών του ποντικιού",wcslen(L"Σύνολο χαρακτηριστικών του ποντικιού"));
EndPaint(hdwnd, &ps);
break;
default:
break;
}
return 0;
}
代码如上,奇怪的是如果去掉SendMessage(GetDlgItem(hdwnd,IDC_ST1),WM_SETFONT,(WPARAM)hFont,MAKELPARAM(true,0));这句,那么对话框窗口的标题和static空间中显示的也是乱码,如果加上这句后显示的就正常了,但是对话框中TextOutW出的字符串还是乱码
VsirSoft 2008-10-08
  • 打赏
  • 举报
回复
Unicode中其实你不用特意的去加W 那些是可以由编译器自动去完成的 具体我想还是你creatwindow的时候参数的问题.

看看msdn 应该有一个参数是标识unicode编码的
illhanlanjian 2008-10-08
  • 打赏
  • 举报
回复
等会我做个DEMO程序传上来

palmax 2008-10-08
  • 打赏
  • 举报
回复
没遇到过,把相关代码贴出来
ccl3311 2008-10-08
  • 打赏
  • 举报
回复
关注,学习。
顶一下!
苏汉UI界面第二期-EXUI例程 元旦快乐!新年快乐! 新一期UI奉上 动态图预览 UI说明: 1.调用模块【精易模块 】【zyjson】【EXUI模块】【com编码模块】模块下面会打包一起上传 2.【图标列表框ex】活学活用,代码里详细讲解了EXUI图标列表框怎么使用!都有中文注释,应该很好看懂 3.【Unicode支持】支持unicode字符显示啦~包括从直接post的unicode网页数据也能调用,具体方法看源码!不懂再说 4.【图片轮播ui动效】心血来潮搞了个图片滚动特效,因为时间太仓促,代码写的有点长~但是功能没问题的,具体的还是自己看源码吧,不懂回帖问就好了(考虑后期完善一下集成模块!待定) 5.【调用opgg】还好有合作,不会被ban~~~玩LOL的应该都知道opgg,就不多介绍了!主要是采集一些数据方便程序调用,你们调用其他网站的也一样,源码是死的人是活的,看看源码里怎么使用组件的,学会了你也可以自己设计 ---------------------------------------------------------------------------------------------------------------------------------------- 一些感言: 不知不觉2020已经敲响了年尾的钟声,马上就要迎来新的一年了! 又到了回想过往的时候了! 说起来在论坛混迹了好几年,三天打鱼两天晒网的研究下易语言 总觉得自己还像个小白一样,天天一大堆问题顶在脑门上不知道怎么解决 就好比易语言本来不支持韩文,因为开发需求又必须要显示韩文 为了追求完美绞尽脑汁花了大半个月去研究,还算功夫不负有心人,总算有点收获 易语言发展到如今,随着各种支持库的开发和模块的开发 已经极尽完美了!用易语言编程的作者们也越来越多!我很开心!人越多,愿意分享的人肯定也会越多 我不知道有多少人是像我一样一路自学从没有过系统性的学习 往往都是靠参考一些大佬分享的源码去丰富我的知识 所以我也一直觉得,分享真的是件很开心的事情,我分享一点你分享一点,大家才会成长的更快嘛 好了废话也不多说了! 最后!!!! 在这里,祝大家新的一年,每天都能开开心心! 【因为最近比较忙所以界面更新会比较慢,如果有人愿意支持,我一定会努力更新下去】 另外登录界面UI什么的,太多了,不想搞这种了! 如果有需要定制,可以回帖或者私信,我看到了会参考做界面,说不定就有你看中的哦 ================================================== 界面设计不能尽如人意,喜欢的拿走,不喜欢的也请不要喷!有话好好说!谢谢
Product Name : NT Locale Emulator Advance (NT全域通) short for NTLEA Component Description: ntlea.exe - NTLEA GUI shell and shortcut launcher ntleac.exe - NTLEA core launcher ntleah.dll - NTLEA remote injection DLL ntleap.dll - NTLEA helper library neko.dll - NTLEA GUI runtime library Version & Update History : NTLEA Core 0.86 Beta 07.6.13 by LOVEHINA-AVC 增加对GetSystemDefaultUILanguage及GetUserDefaultUILanguage函数的挂钩 改善了Computer-based Training钩子的挂钩方式 修正了其他一些细小的BUG NTLEA Core 0.85 Beta 07.6.9 by LOVEHINA-AVC 增加让NTLEA加载的应用程序不受系统SDB补丁机制影响的功能 修正了其他一些细小的BUG NTLEA Core 0.83 Beta 07.6.8 by LOVEHINA-AVC 修正了之前的版本不能让含有特殊字符路径的应用程序正常工作的问题 修正了其他一些细小的BUG NTLEA GUI Launcher 1.0 Final 07.6.7 by 七夜真神 增加多语系界面支持与对应的区码(目前支持简体中文、繁体中文及英文) NTLEA Core 0.82 Beta 07.6.7 by LOVEHINA-AVC 修正了在一部分程序下执行会发生初始化失败的问题 完善了跨进程跟踪注入的功能 增加直接打开任意扩展名文件的功能(注:若系统中启用了Microsoft Applocale,msi安装程序将无法被NTLEA正确加载) 0.80 beta 07.6.4 中文名称更改为“NT全域通” 修正了对话框处理函数不能被正确挂钩的问题 修正了因错误地址传递导致应用程序启动失败的问题 修正了一部分程序不能使用IME标准输入法的问题 修正了0.72~0.75版不能在Windows 2000及Windows XP SP0 SP1下运行的问题 增加WM_CHAR及WM_IME_CHAR消息的处理模块,修正了输入框文字不能被正确显示及文字不能被正确输入的问题 消除了数个读零地址非法操作的诱发因素 改进了消息钩子的处理方式 增加应用程序参数指定的支持(详见命令行选项说明) 增加重新指定字体大小的功能(详见命令行选项说明) 修正了Core Launcher(NTLEAC)不能引导一部分程序的问题 修正了多个细小的BUG 0.75 beta 07.1.10 修正了0.73版不能支持某些Unicode/ANSI混合型应用程序的问题 ntleac命令行模式“F”选项实装(注:若要强制指定应用程序所使用的字体,则至少需追加“P4”选项) 增加LB_GETTEXTLEN消息的处理模块(感谢Yoxola提供兼容性问题报告) 0.73 beta 06.12.16 修正了一部分程序在通过系统模版创建窗口时无法被正确挂钩的问题 0.72 beta 06.12.4 修正了在Visual C++ MFC框架程序中会产生乱码的兼容性问题 修正了在调用对话框模版函数后程序运行不正常的问题 增加对kernel32!CreateProcessW函数的挂勾 0.70 beta 06.11.30 增加以下针对窗口及消息处理函数的挂钩: user32!SetWindowTextA user32!GetWindowTextA user32!SendMessageA user32!SendMessageTimeoutA user32!SendMessageCallbackA user32!SendNotifyMessageA user32!PostMessageA user32!GetWindowLongA user32!SetWindowLongA user32!DefDlgProcA user32!DefFrameProcA user32!DefMDIChildProcA user32!DialogBoxParamA user32!DialogBoxIndirectParamA user32!CreateDialogParamA user32!CreateDialogIndirectParamA 增加其它的一些函数的挂钩: user32!GetMenuStringA user32!GetMenuItemInfoA user32!SetMenuItemInfoA kernel32!CharPrevA kernel32!CharNextA kernel32!IsDBCSLeadByte gdi32!EnumFontFamiliesExA gdi32!CreateFontIndirectA 增加自定义右键启动菜单的功能 增加指定预设字体的功能 0.52 beta 06.10.14 增加对user32!CreateWindowExA函数的挂钩 增加对user32!DefWindowProcA函数的挂钩 修正了VerQueryValueA挂钩函数在Windows XP SP0及SP1下会导致无效内存访问异常的问题 0.50 beta 06.10.12 增加对kernel32!GetCommandLineA函数的挂钩 修正了ntdll!RtlUnicodeToMultibyteN挂钩函数中一个重大的BUG,解决了大部分程序的兼容性问题 0.20 beta 06.10.9 增加针对特定应用程序的支持选项 重写部分函数,提高了挂勾程序的兼容性 修正数个小BUG 0.17 beta 06.9.30 再次(?)完善了kernel32!CreateProcessA挂钩函数的功能 0.16 beta 06.9.28 修正在目标程序调用version!VerQueryValueA时可能构成死循环的BUG 0.15 beta 06.9.27 增加对kernel32!GetTimeZoneInformation函数的挂钩,新增时区修正参数 增加对version!VerQueryValueA函数的挂勾 增加对Windows XP SP0操作系统的支持 新增一个兼容性选项 去除了不必要的语言ID参数 完善了kernel32!CreateProcessA挂钩函数的功能 0.11 beta 06.9.25 启动程序ntleac.exe与挂钩程序ntleah.dll由ANSI版本转变为Unicode版 注:如果在使用NTLEA外壳时发现程序无法启动,可尝试直接运行ntleac.exe 附:ntleac参数说明(第一个参数必须包含双引号): 1. "x:\xxxxx\xxx.exe" 说明:目标程序路径。该参数必须位于第一项。 2. "Px" 说明:指定兼容性选项。x为描述兼容性开关的数值,每一个位域指定一个选项(注)。例如,当x为1时,第1个兼容性选项将被开启;当x为8时,第4个兼容性选将被开启;当x为7时,前3个兼容性选项均被开启(1 | 2 | 4 = 7)。 注:这里所说的位域是指二进制数的数位,一个整数最多拥有32个位域,第x位域的值等于2的x次方。 3. "Cx" 说明:指定页码。x为页码ID。 4. "Lx" 说明:指定语言。x为语言区域ID。 5. "Tx" 说明:指定时区修正。x为UTC时区修正数值,单位是分钟。 6. "Fxxx" 说明:指定预设字体,xxx为字体名称。 7. "Axxx" 说明:指定将要传给目标应用程序的参数,xxx为参数内容。 8. "Sx" 说明:指定字体的收放比率,x为比值,单位是百分率。 示例: ntleac.exe "d:\test\game.exe" "A-G 123 -B 456" "P0" "C932" "L1041" "T-540" "FMS Gothic" "S200" 执行结果为启动“d:\test\game.exe -G 123 -B 456”,并设置页码为932(日文Shift-JIS),语言区域为日本,字体为“MS Gothic”,以两倍的大小显示,时区为东9区(GMT + 9:00或UTC - 9:00)。 (注:如果参数中包含双引号,则可用单引号来代替。如上例的"A-G 123 -B 456",追加双引号后可书写为"A'-G 123' '-B 456'") 0.10 beta 06.9.25 正式更名为NT Locale Emulator Advance 增加具有图形界面的外壳程序 增加跨进程跟踪功能 0.05 beta 06.9.24 修正了0.04 beta无法在Windows 2000及XP SP1下运行的问题 0.04 beta 06.9.24 增加对kernel32!CompareStringA函数的挂钩 增加对ntdll!RtlUnicodeToMultibyteN函数的挂钩 0.03 beta 06.9.24 增加对kernel32!CreateFileA函数的本地化支持 修正了前一个版本在多处理器系统中可能出现的兼容性问题 0.02 beta 06.9.23 修正了无法在Windows XP SP1下运行的问题 0.01 beta 06.9.22 最初的版本 FAQs Q:这个工具能够做什么? A:区域模拟,以及内码转换。一些应用程序可能无法在其它的区域模拟软件下正常运行,因此我编写了这个工具,以避免手工转换系统语言区域所带来的麻烦。 Q:它的兼容性如何? A:该程序能够在Windows 2000 SP4/XP及2003 SP1下正常工作,但它很可能不支持Windows 2000 SP3及更低的版本。(注意,当前的版本不支持Windows 20003 Gold、即SP0) 目前已测试可以支持的操作系统详细列表: Windows 2000 SP4 Windows XP Windows XP SP1 Windows XP SP2 Windows Server 2003 SP1 Windows XP x64 Edition Windows Vista Q:使用这个工具时需要安装额外的软件吗? A:不需要。同时这个程序也是绿色软件。 Q:我看到了两个可执行文件,应该怎样使用它们? A:直接运行ntleac.exe,或者为它建立一个快捷方式,并在命令行的末尾填上目标程序的全路径名。关于参数的详细说明请参考附录,在新的版本中您还可以使用名为NTLEAGUI的外壳程序。 Q:我可以与他人分享这个软件吗? A:是的,您可以自由转载这个程序,但请务必保持其完整,且不要修改任何内容。
Ollydbg2.01(alpha4)是一个由Oleh Yuschuk发布的32位汇编级调试器,Ollydbg2.01(alpha4)汉化版由正思软件工作室汉化发布。 OllyDbg的是一个32位汇编级Microsoft的Windows的分析调试器。二进制代码分析的重点,特别是在源代码不可用的情况下非常有用。 OLLYDBG v2.01d 汉化版更新内容: 特别亮点: 直观的用户界面,没有隐藏的命令. 代码分析 - 跟踪寄存器,确认过程,循环,API调用,分支,表,常量和字符串 直接运行和调试的DLL 对象文件扫描 - 从对象文件和库位于例程 允许用户定义的标签,备注和功能描述 识别在Borland ®格式的调试信息 会话之间保存的补丁程序,并将其写入可执行文件,并更新链接地址 开放式架构 - 支持许多第三方插件 无需安装 - 没有注册表或系统目录中的垃圾 调试多线程应用程序 附加到正在运行的程序 配置反汇编器,支持MASM的和IDEAL的格式 MMX,3DNOW!和SSE数据类型和说明,包括速龙Athlon扩展 完整的Unicode支持 动态识别ASCII和Unicode字符串 - 在Delphi格式! 识别复杂的代码结构,如呼叫跳转到程序 解码1900多个标准的API和400 C函数调用 提供来自外部的帮助文件的API函数的上下文敏感的帮助 设置条件,日志记录,内存和硬件断点 跟踪程序的执行,记录已知函数的参数 显示调整信息 动态跟踪堆栈帧 搜索不精确的命令和摸糊的二进制序列 搜索整个分配的内存 查找引用常量或地址范围 审查和修改内存,设置断点和暂停运行方案 组装成二进制形式的最短的命令 从软盘启动 很多,很多!

15,979

社区成员

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

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