MFC项目开发中常见错误10条

MFC项目开发中常见错误10条

 

这是我第一份CSND博客.

 

在过去的两个月中,我跟老师一起做了一个"挑战杯"比赛的项目,当时我仅仅只有2个星期的MFC学习经历,对于多文档程序尤其感到头疼,这期间犯了很多错误,在此总结了10条错误供大家参考,其实我犯了的错误远远不止这些,好多都没有及时总结下来。如果您在编程开发中犯了一些错误,我建议你也及时记录下来,以备日后学习参考。

 

1.foepn()函数中文件名存贮单元越界易产生错误(尤其是存贮绝对地址的文件名时) 建议使用 CString  不要用strcpy()到 char .


2.平常在调试程序的时候应该尽量关闭 try...catch 以免错误发生了但是被异常处理接受而不能暴露错误;
而在程序发行时则应该使用异常处理 .


3.对于较大点的程序 应该一个一个类或者cpp文件的编译 不应该一次性全部编译 这样容易造成死机.


4.一个很无奈的错误 如果 你没有选择UpdateData();那么很多控件工作起来都是隐蔽的错误 令你伤透脑筋


5.missing storage-class or type specifiers 通常是由于没有包含头文件或者头文件 类名拼写错误造成的
在出错的地方检查


6.如果手动建立一个CFormView 的话,对话框的样式一定要正确设置 否则可引起程序不正常 正常样式为:
样式:下层 边框:无  无标题

这些问题就和用CTabCtrl建立属性页时要求一样

新建的用于选项卡中显示的对话框应设置为没有标题栏、Child风格、无边框的、非模式的。


7.当提示错误 error C2039: 'classCMyTestDlg' : is not a member of 'CMyTestDlg'
这种错误 查看后发现 根本没有错误  其实错在 宏定义上
在使用CoolBar 创建控制条项目时 需要宏定义:
例如CVCKBASEDlg类,在VCKBASEDlg.h中添加 DECLARE_DYNCREATE(CVCKBASEDlg)
在.CPP中增加 IMPLEMENT_DYNCREATE(CVCKBASEDlg, CDialog)

这些问题 就像串行化时 一样要注意.



8.如果在执行case语句时,你发现某几个的执行结果总是相同(预期是不同执行结果的话)那么你可能掉了某个break语句了。


9.出现了这种错误:
需要的头文件都添加了  每个文件单独编译都通过了 但是提示如下错误:
unsolved external
symbol_playsound@12  ...
怎么调也出不来 这时你应该看看是否包含了Lib文件  事实上利用msdn查看需要条件如下:
Requirements
  Windows NT/2000: Requires Windows NT 3.1 or later.
  Windows 95/98: Requires Windows 95 or later.
  Header: Declared in Mmsystem.h.
  Library: Use Winmm.lib.
  Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000.
而我的错误恰恰是没有引用Winmm.lib 。这一点可以留着以后做参看 不仅仅是包含头文件 还需要看看其他要求
就像是 AnimateWindow 函数一样需要在stdAfx.h文件中添加一些版本的宏定义如下:
#undef WINVER
#define WINVER 0X500


10 获得活动视图 要严格区别 SDI程序与MDI程序
否则可能产生奇怪的错误
 诸如First-chance   exception   in   ***.exe:   0xC0000005:   Access   Violation. 的错误.
多文档的情况:
对于MDI程序,由于子窗口才是文档框窗,因此首先要用GetActiveFrame()取得活动子框架窗口,然后通过该子窗口获取活动视图和文档.
方法一:
CMDIChildWnd* pChild=(CMDIChildWnd*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveFrame();
取得活动视图:
CMyView *pView=(CMyView*)pChild->GetActiveView();
取得活动文档:
CMyDocument* pDoc=pChild->GetActiveDocument();
单文档情况:
对于SDI程序,主框架窗口就是文档框窗.
得到视图类的指针.
可以 先得到框架指针,然后调用 GetActiveView 函数指向当前活动视.
 CMyView *pView;
 pView=(CMyView*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView(); .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值