关于一些转换的问题

伤心鼠标 2013-08-29 10:12:04
程序如下:
#include <windows.h>
#include <stdio.h>
。。。
。。。
。。。
{
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,L"char is %d",wParam);
MessageBox(hwnd,szChar,L"liupeng",MB_YESNO);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,L"mouse clcik",L"liupeng",0);
HDC hDc;
hDc=GetDC(hwnd);
TextOut(hDc,0,50,L"小练习一下",strlen("小练习一下"));
ReleaseDC(hwnd,hDc);
break;
case WM_PAINT:
break;
case WM_CLOSE:
if (IDYES==MessageBox(hwnd,L"是否真的结束",L"liupeng",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);

}
return 0;
}
报错:“sprintf”: 不能将参数 2 从“const wchar_t [11]”转换为“const char *”
“MessageBoxW”: 不能将参数 2 从“char [20]”转换为“LPCWSTR”
我用的是VS2005,为什么szChar不能用L强制转换过来。
而且这样的程序别人编号了的话,直接拷到你这边确又能用,而且都不用L强制转换。
...全文
136 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2013-08-30
  • 打赏
  • 举报
回复
unicode(宽字符)和其他编码要做转换的哥哥.
图灵狗 2013-08-30
  • 打赏
  • 举报
回复
工程配置为多字节试试看。
引用 楼主 lp21490 的回复:
程序如下: #include <windows.h> #include <stdio.h> 。。。 。。。 。。。 { switch(uMsg) { case WM_CHAR: char szChar[20]; sprintf(szChar,L"char is %d",wParam); MessageBox(hwnd,szChar,L"liupeng",MB_YESNO); break; case WM_LBUTTONDOWN: MessageBox(hwnd,L"mouse clcik",L"liupeng",0); HDC hDc; hDc=GetDC(hwnd); TextOut(hDc,0,50,L"小练习一下",strlen("小练习一下")); ReleaseDC(hwnd,hDc); break; case WM_PAINT: break; case WM_CLOSE: if (IDYES==MessageBox(hwnd,L"是否真的结束",L"liupeng",MB_YESNO)) { DestroyWindow(hwnd); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); } return 0; } 报错:“sprintf”: 不能将参数 2 从“const wchar_t [11]”转换为“const char *” “MessageBoxW”: 不能将参数 2 从“char [20]”转换为“LPCWSTR” 我用的是VS2005,为什么szChar不能用L强制转换过来。 而且这样的程序别人编号了的话,直接拷到你这边确又能用,而且都不用L强制转换。
赵4老师 2013-08-30
  • 打赏
  • 举报
回复
char → TCHAR
sprintf → _stprintf
L"..." → _T("...")
strlen("...") → _tcslen(_T("..."));
onlyhuiyi 2013-08-30
  • 打赏
  • 举报
回复
sprintf(szChar,"char is %d",wParam); sprintf要接收的 char型的字符串 L的话就是转化成宽字符了 改成这样 wchar_t *wszchar = Conver::ctow(szChar)

wchar_t* Convert::ctow(char* c )
{
    size_t nu = strlen(c);
    size_t len = MultiByteToWideChar(CP_ACP, 0, c, int(nu), NULL, 0);  
    wchar_t* m_wchar = new wchar_t[len + 1];  
    MultiByteToWideChar(CP_ACP, 0, c, int(nu), m_wchar, int(len));
    m_wchar[len] = '\0';  
    return m_wchar; 
}
然后这样调用 MessageBox(hwnd,wszChar,L"liupeng",MB_YESNO);
伤心鼠标 2013-08-30
  • 打赏
  • 举报
回复
引用 3 楼 qq120848369 的回复:
unicode(宽字符)和其他编码要做转换的哥哥.
嗯,这个我知道,但是具体应该怎么做呢?就比如这个程序应该改哪里呢?
turing-complete 2013-08-29
  • 打赏
  • 举报
回复
佛门中人。。。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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