您的位置:首页 > 其它

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

2011-03-26 11:06 399 查看
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(); .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息