您的位置:首页 > 其它

为何一个MFC程序会有时能正常运行,有时却不能正常运行呢? (内容是来自我的一个帖子)

2013-04-05 19:53 387 查看
PS:这是来自我的一个帖子 linkTo: http://bbs.csdn.net/topics/390415152?page=1#post-394121704
这是正常运行时的界面:



这是出现未响应的界面:



下面的内容也是我的回复我的帖子的::

嗯,这个建议我已经尝试了,后来发现不了自己的操作问题,而是发现MFC向导生成给我的代码有问题(究竟是

不是MFC的问题,我还不确定,但我现在是这样认为的).

至于我为什么这样认为的?先看看MFC向导生成的代码:

h文件:(ps:里面没有CMainFrame对象喔)

// MFCtest1.h : MFCtest1 应用程序的主头文件
//
#pragma once

#ifndef __AFXWIN_H__
#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
#endif

#include "resource.h"       // 主符号

// CMFCtest1App:
// 有关此类的实现,请参阅 MFCtest1.cpp
//

class CMFCtest1App : public CWinApp
{
public:
CMFCtest1App();

// 重写
public:
virtual BOOL InitInstance();
virtual int ExitInstance();

// 实现

public:
afx_msg void OnAppAbout();
DECLARE_MESSAGE_MAP()
};

extern CMFCtest1App theApp;


而是在其重写的虚函数CMFCtest1App::InitInstance里面有这几行代码:

// 若要创建主窗口,此代码将创建新的框架窗口
// 对象,然后将其设置为应用程序的主窗口对象
CMainFrame* pFrame = new CMainFrame;
if (!pFrame)
return FALSE;
m_pMainWnd = pFrame;
// 创建并加载框架及其资源
pFrame->LoadFrame(IDR_MAINFRAME,
WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,
NULL);


发现有一个CMainFrame类的对象指针pFrame,然后生成一个CMainFrame对象,等等.

以小生的理解,当程序退出后,即CWinApp子类CMFCtest1App退出时,没有把CMainFrame对象指针delete掉???

所以,对指针的使用机会不多的我,只好把它改成CMFCtest1App的数据成员了:

public:
CMainFrame* pFrame;//或者是:CMainFrame pFrame;也可以的吧


在cpp文件中:

//在构造函数里初始化
pFrame=new CMainFrame;
BOOL CDSApp::InitInstance()
{
//......
if (!pFrame)
return FALSE;
m_pMainWnd = pFrame;
// 创建并加载框架及其资源
pFrame->LoadFrame(IDR_MAINFRAME,
WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,
NULL);
//......
return TRUE;
}


之后编译,生成exe文件.执行,执行,再执行,没有碰见上面的问题了喔!

这是小生的肤浅之见.虽然C指针的作用很强大,但对初学者来说,难免有点什么了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐