我在对话框内创建了一个编辑框控件和一个picture控件,希望通过读取编辑框控件内的代码来在图片控件中画图。
  目前存在的问题是我第一遍输入代码后图像能正确画出来,但是我重新输入代码再点确定按钮就会报错,断点停留在wincore.cpp中的ASSERT(pWnd->m_hWnd == NULL);   // only do once
  我在网上查了一下,应该是我第1次获得窗口资源时没释放,第2次无法Create,相关代码如下:
 void CEditDlg::OnBnClickedOk(){CDC*dc=m_pic.GetWindowDC(); 
    CRect rect;
dc->GetWindow()->GetClientRect(&rect);
m_Gis2.Create(dc->GetWindow(),rect);//m_Gis2是CGisInterface类的一个对象,用来调用CGisInterface类中的画图函数
          ...//后面是画图的一些代码,在此省略
}
//Create函数如下
BOOL CGisInterface::Create(CWnd* lParent,const RECT& rect  ,DWORD dwStyle )
{
CString wndcls=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,0,
(HBRUSH)GetStockObject(WHITE_BRUSH),LoadIcon(NULL,IDI_APPLICATION));
    BOOL re = CWnd::Create(wndcls,"波形图",dwStyle,rect,lParent,600);//这句应该就是错误所在
ModifyStyleEx(0, WS_EX_CLIENTEDGE);
return re;
}
我想问一下如何释放第1次创建的窗口资源,具体代码应该写在何处?

解决方案 »

  1.   

    这样就只需要Create一次即可。 
      

  2.   

    在你的Create调用之前,你先判断一下不就完了,如果已经Create了,即你的窗口句柄m_hWnd已经不为NULL,就先Destroy掉,然后再Create。不过效率不高因为这样的话就反复的Create,Destroy,Create了
      

  3.   

    要重绘,你把需要显示的数据设置好之后。让那个Picture控件无效就可以了。
    就是调用那个Picture控件的invalidate
      

  4.   

    可以把m_Gis2的定义放在OnBnClickedOk()函数中。