在基于对话框的程序中,为了在自定义的类(这个类本身在其他类中被创建)中对主对话框中控件MSFlexGrid的操作,我将主对话框作为全局变量,(即将CMyWinDlg dlg;放在CMyWinApp theApp;下面),编译时没有问题,可执行时出现debug assertion failed信息,但在按“重试”或“忽略”可继续执行。花了很多时间一直没有搞明白,所以各位指点。

解决方案 »

  1.   

    略贴出代码。这样做是太奇怪了,不像是MFC的做法。
      

  2.   

    是这样的,自定义一个coblist做为数据源(由类manage管理),在对话框上有一个edit控件和一个mygrid控件(延生于msflexgrid),当在edit中输入内容时,按不同键将内容存储至coblist中对应的记录中,同时由manage类发出setchange信息(自定义)通知handlecontrol类(自定义)修改mygrid控件中对应的单元格内容;同样当在mygird中修改时也要对coblist进行修改,并对对话框上另一控件内容进行修改;所以现在关键是如何将对话框上的mygrid控件传给handlecontrol类,一开始我将mygrid的句柄传给它,但到最后没有办法引用的它的属性及事件,所以只能将对话框做为全局变量了,编译是通过的,但出现的情况就如上所说的,搞不懂了啊,请各位指点啊。
      

  3.   

    CMyWinApp theApp;
    CMyWinDlg dlg;执行出错:afxwin1.inl
              line:22
    但按“重试”或“忽略”可继续。
      

  4.   

    to:zhaolaoxin这句出错 { ASSERT(afxCurrentResourceHandle != NULL);
      

  5.   

    class CSaleManage  : public CObject
    {
    public:
    CSaleManage();
    virtual ~CSaleManage();//Attributes
    private:
    CHandleControl* pGoodsSaleGrid;public:
    CTypedPtrList<CObList,CSaleRecord*> m_RecordList;
    UINT m_nCurrentRecordNumber;//Operations
    public:
    BOOL IsCompleted(UINT nSerialNumber); //判断记录是否完成必要内容
    UINT GetRecordCount();
    POSITION FindRecordBySN(UINT nSerialNumber);
    CSaleRecord* FindRecord(UINT nSerialNumber);
    CSaleRecord* NewRecord(); void UpdateRecord(CSaleRecord* pRecord);
    void AddLest(CHandleControl* pHandleControl);
    void SetChange(int nRow,int nCol);
    };
      

  6.   

    class CHandleControl : public CObject
    {
    public:
    CHandleControl();
    virtual ~CHandleControl();public:
    CHandleControl(CMyWndDlg* pwnd);
    void ChangeData(int nRow,int nCol,CString str);private: 
    CMyWndDlg* m_pwnd;
    };
      

  7.   

    程序在执行时首先初始化全局变量,这个时候资源文件还没有被加载。
    CMyWinDlg是一个对话框类,你定义它的一个对象时,需要执行它的构造函数,在此需要连接资源文件,所以会出现你说的那个错误。你的正确做法应该是定义一个全局指针CMyWinDlg* g_pWinDlg,然后在程序中
    CMyWinDlg dlg;
    g_pWinDlg = &dlg;
      

  8.   

    不过我还想请教各位啊,我这种设计思想不知是否符合MFC的规则,谢谢啊
    因为我一直做c的,所以这种思想还没有形成。还要向各位多学习啊。