初学MFC,有些专业用词可能不太准确,
看别人的代码,有一个类定义如下:class CMeasureView : public CFormView, 此类对应对话IDD_MEASUREVIEW2,
当点击此窗口的"x"关闭时,会产生什么消息?由哪个函数响应?类CMeasureView 的定义中并没发现OnClose()这样的函数

解决方案 »

  1.   

    会产生WM_CLOSE消息,一般由默认的DefWindowProc处理时会产生WM_DESTROY消息。
      

  2.   

    依次为
    WM_CLOSE OnClose();
    DestoryWindow();
    WM_DESTORY OnDestory();
    WM_NCDESTORY OnNcDestory();
    不知道有没有笔误
      

  3.   

    类CMeasureView 的定义中并没发现OnClose()这样的函数
    添加WM_CLOSE的响应函数
    vc6以上在,CMeasureView属性->消息 里面找到WM_CLOSE,添加就有了
    WM_DESTORY WM_NCDESTORY 同上DestoryWindow(), CMeasureView属性->重写 里面找到WM_DestoryWindow,添加就有了
      

  4.   

    DestoryWindow(), CMeasureView属性->重写 里面找到DestoryWindow,添加就有了
      

  5.   

    多谢回复,可是我用的是vc++6.0,你说的那种方法不适用,
    还有,我问的不是如何添加,代码是已经能完整编译并可以运行了的,点击x号按钮关闭窗口,会调用哪个函数来处理 ?
    代码贴在这了BEGIN_MESSAGE_MAP(CMeasureView, CFormView)
    //{{AFX_MSG_MAP(CMeasureView)
    ON_WM_SIZE()
    ON_NOTIFY(TCN_SELCHANGE, IDC_VIEWTAB, OnSelchangeViewtab)
    ON_BN_CLICKED(IDC_MEASURE, OnMeasure)
    ON_BN_CLICKED(IDC_CLOSEWZ, OnClosewz)
    ON_BN_CLICKED(IDC_INTERRUPT, OnInterrupt)
    ON_WM_TIMER()
    ON_BN_CLICKED(IDC_PRINTLASTRESULT, OnPrintlastresult)
    ON_BN_CLICKED(IDC_EXITTEST, OnExittest)
    ON_EN_CHANGE(IDC_SAMPLEID, OnChangeSampleid)
    ON_BN_CLICKED(IDC_PROPORTION, OnProportion)
    ON_BN_CLICKED(IDC_CURSPECTRUM, OnCurspectrum)
    ON_BN_CLICKED(IDC_MIXCAL, OnMixcal)
    ON_BN_CLICKED(IDC_SENDCOM, OnSendCom)
    ON_BN_CLICKED(IDC_SENDTCP, OnSendTcp)
    ON_WM_SIZE()
    ON_EN_CHANGE(IDC_SAMPLEIDSURFIX, OnChangeSampleidsurfix)
    ON_MESSAGE(NETWORK_EVET,OnNetEvent)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
      

  6.   

    多谢回复,可是我用的是vc++6.0,你说的那种方法不适用,
    还有,我问的不是如何添加,代码是已经能完整编译并可以运行了的,点击x号按钮关闭窗口,会调用哪个函数来处理 ?
    代码贴在这了
    ==========
    对于WM_CLOSE这种消息来说,是默认的一些消息,有一些默认动作是不会出现在消息映射里的。
      

  7.   

    比如说。如果我想在关闭这个窗口的时候收回一些资源,析构掉一些东西,这些语句应该加在哪里呢?现在在调试一个程序,发现点击此窗口的"x"关闭时,会出现内存不能读写的错误,所以想测试这个错误是不是发生在DestoryWindow()内,这个思路正确吗?
      

  8.   

    可以处理WM_DESTROY, WM_NCDESTROY消息。
    当点击X时,窗口过程首先接收到WM_NCLBUTTONDOWN, WM_SYSCOMMAND等消息,通常交给默认处理程序::DefWindowProc处理。它向窗口过程发送WM_CLOSE消息,窗口过程如果不处理继续交给DefWindowProc处理,它会调用::DestroyWindow会做从屏幕上移除窗口等操作,然后依次向窗口及其子窗口/拥有窗口发送WM_DESTROY消息,然后再向窗口发送WM_NCDESTROY消息。
    大致是这样一个过程。
      

  9.   

    应该是处理WM_CLOSE消息,DestroryWindow这个是系统API,一般是不会出错的。而WM_DESTROY消息其实是窗口已经销毁之后才发出的,它的目的是通知进程,窗口已经销毁,让进程调用PostQuitMessage而退出进程。