分享

VS环境下MFC程序出现的问题

 梦梦de书馆 2014-11-27
1、出现错误:没有与参数列表匹配的 重载函数 "AfxMessageBox" 实例
参数类型为: (const char [17]) d:\VS workspace\visual studio 2012\Projects\...
此时函数AfxMessageBox("加载套接字库失败");修改为AfxMessageBox(_T("加载套接字库失败"));
_T()解释:
我们知道,VC++里面定义字符串的时候,用_T来保证兼容性。VC++支持asciiunicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。

如果将来你不打算升级到unicode,那么也不需要_T。

_T("hello world")
在ansi的环境下,它是ansi的,如果在unicode下,那么它将自动解释为双字节字符串,既unicode编码。 这样做的好处,不管是ansi环境,还是unicode环境,都适用。
那么在VC++中,字符串_T("ABC")和一个普通的字符串"ABC"有什么区别呢?
_T("ABC") 
如果定义了unicode,它将表示为L"ABC",每个字符为16位,宽字符串。 
如果没有定义unicode,它就是ascii的"ABC",每个字符为8位。

 
2、错误提示:ON_MESSAGE类型转换无效
在写程序时遇到错误提示:ON_MESSAGE类型转换无效,上网搜了一下,把问题解决了,具体解决方法是:
afx_msg LRESULT OnRecvData(WPARAM wParam,LPARAM lParam);语句中把void类型改为LRESULT类型

ON_MESSAGE是添加消息响应函数.
 
ON_MESSAGE(WM_message,OnMyMessage);OnMyMessage返回值必须为LRESULT,其形式为:afx_msg LRESULT OnMessage(WPARAM, LPARAM);如果不符合,则有错误提示:error C2440: “static_cast”:无法从“void (__thiscall CMainFrame::* )(void)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”

解决方法如下:

例如:TransparentWnd.cpp中ON_MESSAGE(WM_LIBEN,OnLiben):

第一:把原来的消息函数返回值类型改为LRESULT(找到OnLiben定义,如Viod CTransparentWnd::OnLiben(WPARAM wParam,LPARAM lParam)改成LRESULT CTransparentWnd::OnLiben(WPARAM wParam,LPARAM lParam),声明处也要改,如afx_msg LRESULT OnLiben(WPARAM wParam,LPARAM lParam););

第二:函数内可以随便写个return TRUE;

第三:然后消息函数的参数必须改写成(WPARAM wParam,LPARAM lParam)而不论这两个参数是否用得到;

第四:消息映射如ON_MESSAGE(WM_message,& OnMyMessage)。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多