eVC++就是eVC++啊

在VC++6.0正常的一段代码:

None.gif void  CMessageboxView::OnLButtonDown(UINT nFlags, CPoint point) 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    MessageBox(
"LButtonDown");
InBlock.gif    
// TODO: Add your message handler code here and/or call default
InBlock.gif
    CView::OnLButtonDown(nFlags, point);
ExpandedBlockEnd.gif}

在eVC++4.0中编译错误:
None.gif error C2664: 'MessageBoxW' : cannot convert parameter 1 from 'char [4]' to 'const unsigned short *'
None.gif        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
None.gifError executing cl.exe.

 于是进行显式类型转换,改为MessageBox((LPCTSTR)"LButtonDown");
成功地弹出了消息框,但是里面地文字是乱码.但是这段代码在VC++6.0中是完全正常的.
如图:

于是改用如下代码:
None.gif void  CMessageboxView::OnLButtonDown(UINT nFlags, CPoint point) 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    CString myStr
="LButtonDown";
InBlock.gif    MessageBox((LPCTSTR)myStr);
InBlock.gif    
// TODO: Add your message handler code here and/or call default
InBlock.gif
    CView::OnLButtonDown(nFlags, point);
ExpandedBlockEnd.gif}
乱码没有了:


问了一下wangxz,他说应该用MessageBox(_T("LBUTTONDOWN")); ,即加入一个_T宏,用来把ANSI字符串转换为 UniCode.因为Wince只支持UNICODE,因此调用API时要使用宽字符串。(LPCTSTR)"LBUTTONDOWN"中字符串本身仍然是ANSI字符串,前面加强制转换并没有解决问题。_T是在TCHAR.H中定义的一个宏,它会根据你编译环境中UNICODE宏的设置来确定是将后面的字符串编译成ANSI的还是UNICODE的
在VC下,由于PC上的Windows系统同时支持ANSI和UNICODE,所以可以用,但如果你在编译环境中定义了UNICODE宏,也会出现问题。
而定义一个CString中间变量的办法之所以可以用是因为CString重载了(LPCTSTR)这个强制转换运算符,这样就由CString完成了从ANSI字符串向UNICODE字符串的转换。

转载于:https://www.cnblogs.com/blaze/archive/2006/06/23/433846.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值