初学Windows和MFC编程,试着写了一个程序,但是出First-chance Exception异常,不知道是怎么回事,各位能否帮忙分析下?
代码如下:#include <afxwin.h>
//由CFrameWnd派生的CMyWnd类
class CMyWnd:public CFrameWnd
{
private:
char *showtext;
public:
LPPOINT lppPoint;
public:
afx_msg void OnPaint();
afx_msg void OnLButtonDown();
DECLARE_MESSAGE_MAP(); //声明消息映射
};
//消息映射的实现
BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
//WM_PAINT消息处理函数的实现
void CMyWnd::OnPaint()
{
CPaintDC dc(this);
dc.TextOut(lppPoint->x,lppPoint->y,showtext);
}
void CMyWnd::OnLButtonDown()
{
showtext="Program with Message_Map!";
GetCursorPos(lppPoint);
ScreenToClient(lppPoint);
InvalidateRect(NULL,TRUE);
}
//程序员由CWinApp派生的应用程序类
class CMyApp:public CWinApp
{
public:
BOOL InitInstance();
CMyWnd *pMainWnd;
//~CMyApp(){delete pMainWnd->lppPoint;delete pMainWnd;} 顺便问问这里需要delete吗?加上会出错……
};
BOOL CMyApp::InitInstance()
{
pMainWnd=new CMyWnd;
pMainWnd->lppPoint=new tagPOINT;
pMainWnd->lppPoint->x=0;
pMainWnd->lppPoint->y=0;
pMainWnd->Create(0,"MFC");
pMainWnd->ShowWindow(m_nCmdShow);
pMainWnd->UpdateWindow();//First-chance Exception! why? 单步调试,这里出现FC Exception……
m_pMainWnd=pMainWnd;
return TRUE;
}
//定义CMyApp的对象MyApp
CMyApp MyApp;

解决方案 »

  1.   

    这里不需要delete,MFC会帮你delete的。你再delete就是两次delete一块内存了。另外一个错误,我没有见过。
      

  2.   

    //~CMyApp(){delete pMainWnd->lppPoint;delete pMainWnd;} 顺便问问这里需要delete吗?加上会出错…… 不需要
    因为CMyWnd 类自身带会delete
    CMyWnd结束时,自身也会调用自己的析构函数delete内存
      

  3.   

    不要自己delete,框架会为你做这些的。
      

  4.   

    不要直接delete,可以不管,或者DestroyWindow来关闭pMainWnd
      

  5.   

    请关注下First-chance Exception的问题,这个才是重点……
      

  6.   

    你创建完对话框,怎么后面就直接返回了,return TRUE; 
    这样你程序就退出了..
      

  7.   

    http://www.builder.com.cn/2007/0924/521687.shtml
      

  8.   

    CFrameWnd不能像上面那样简单的Create,应该像下面这样:
    CRect rcClient;
    GetClientRect(&rcClient);
    CRuntimeClass* pRtCls = RUNTIME_CLASS(CProcFrame); // CProcFrame派生于CFrameWnd
    m_pFrame = (CProcFrame*)pRtCls->CreateObject();
    m_pFrame->Create(NULL,NULL,WS_CHILD|WS_VISIBLE,rcClient,this);
            //...
      

  9.   


    顶。估计楼主是看基于Dialog的Application太多老的缘故,所以写出了那样的代码
      

  10.   

    return TRUE是对InitInstance()的返回值,这个函数只是初始化一下窗口对象,然后把这个窗口的指针付给了WinApp中的窗口指针,就返回了!其他的工作应该都在WinApp的线程中进行,也就是负责消息的处理,所以这里应该不是问题吧?