十万火急!!!!关于对话框与CView的问题

ackol_love 2010-09-19 12:47:26
各位路过的大哥,麻烦帮一下我。
我建立了一个SDI程序,又在菜单中增加了两个菜单项,分别用来调出两个对话框。这两个对话框是用来给视图主程序传参用的。判断参数的传递是否成功的代码放在主程序的OnDraw()函数中。这两个对话框的销毁也是放在了主程序的OnDraw()函数中。我还把这两个对话框定义成视图的成员变量。
问题出在,当我点击菜单项,调出对话框时,用鼠标拖动对话框时,就报错,弹出个框说:“0x7c92100b”指令引用的“0x00000034”内存。该内存不能为“read”。
我想问,在什么情况下,在主程序窗口上拖动调出来的对话框会出现问题。有谁遇到过这样的问题的,知道原因在哪里的,请说几句吧。小弟万分感谢!
...全文
287 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjAngle 2010-09-28
  • 打赏
  • 举报
回复
学习一下
ackol_love 2010-09-28
  • 打赏
  • 举报
回复
对不起,最近比较忙。没来得及看帖。那个问题我已经解决了。原来问题不是出在对话框上,在OnDraw()函数中销毁对话框并没有问题。问题是出在那个画图函数上。我用另外一种方式重新实现了那个画图函数。运行程序就没问题了。无论怎么拖动对话框都不再报错了。
xiaohuh421 2010-09-20
  • 打赏
  • 举报
回复
你在OnDraw里面销毁对话框就已经注定了你这种悲惨的结局了.....
在你拖动窗口的时候OnDraw就会执行,这时候会有什么冲突你应该了解了吧
keyayi 2010-09-20
  • 打赏
  • 举报
回复
可以通过出错的内存地址,定位到具体哪一行代码啊。

网上有这种文章,搜
  • 打赏
  • 举报
回复
我碰到内存不能为读的问题,一直未解,期待解决!
ackol_love 2010-09-20
  • 打赏
  • 举报
回复
我对话框的参数是可以正确的传递给主程序的。
我发现如果把画线的函数注释掉,无论我调用多少次对话框,无论如何拖动,都不会报错。整个屏幕一直都处于黑屏。
ackol_love 2010-09-19
  • 打赏
  • 举报
回复
s_dlg 和 d_dlg分别是两个对话框
if(s_dlg->m_hWnd && s_dlg->m_Flag==1)
{
m_zf_struct=s_dlg->m_zf_struct;
m_zfFlag=1;
s_dlg->DestroyWindow();
}
if(d_dlg->m_hWnd && d_dlg->m_Flag==1)
{
m_zf_struct=d_dlg->m_zf_struct;
m_zfFlag=2;
d_dlg->DestroyWindow();
}
Eleven 2010-09-19
  • 打赏
  • 举报
回复
代码贴出来看看
孤客天涯 2010-09-19
  • 打赏
  • 举报
回复
OnDraw()中的代码贴上来
weixing0302 2010-09-19
  • 打赏
  • 举报
回复
你这是视图调用窗口的吧,我说下我的经验,
前几天我也写了一个类似的程序,也出现内存出错问题,断点调试是参数传递不过去,试了很多方法,后来才发现是调用句柄不合适,弄成了窗口调用窗口的句柄了,后来换了下就行了,
工程基类是ListView的,调用窗口传递参数的句柄语句是:nColumnCount=m_ListCtrl.GetHeaderCtrl()->GetItemCount();希望对你有点帮助。我是个新手,不足的请多多指教。
ackol_love 2010-09-19
  • 打赏
  • 举报
回复
我试了一下,只在构造函数中new了一次。但是还是不行。弹出的报错对话框变成:
“0x0040c61d”指令引用的“0xcdcdcdcd”内存。改内存不能为“written”。而且是第一次调用对话框点确定就报错。连图形都没法输出来。
ackol_love 2010-09-19
  • 打赏
  • 举报
回复
m_zf_struct这个结构体的定义我是放在一个Data.h头文件中的。我把所有结构体的定义都放在里面。没有用到.dll文件。
我之前还有一些结构体的定义也用的是CString,但是用的好好的,一直都没出什么问题。我觉得用CString比较方便,所以一直都用的CString。应该不会有问题吧。
gameslq 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ackol_love 的回复:]
第一次调出对话框,无论怎么拖动都不会报错,因为这时主窗口还是黑屏。输入数据点确定后。窗口重绘并显示图形。然后再调出对话框,这时候如果拖动的话就报错了。因为这时候主窗口已经显示图形了。
回复5楼的,因为是从第二次调出对话框时才开始报错,这个怎么跟踪。如果我把断点设在其中一个对话框的获取数据的函数中,在我第一次调出对话框时就已经进去了,但这时是不会报错的。
[/Quote]
多次打开对话框,多次New,能不报错吗
View::CStockView() 函数new 一次 CStockView::OnZfSingle() 又new 一次 第一次建立对话框就new 两次,View::CStockView() 里面new 内存泄露了

ji1bing 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ackol_love 的回复:]

m_zf_struct是一个ZHFU_STRUCT类型的结构体:
typedef struct //用来保存要计算其涨跌幅度的股票信息
{
CString code1; //股票代码1
CString code2; //股票代……
[/Quote]

这个结构是不是放在了DLL中?
如果是放在DLL中的话,那把结构中的CStirng改成TChar,结构中放CString对象很容易出问题的……,建议改成指针或者数组
ackol_love 2010-09-19
  • 打赏
  • 举报
回复
不行啊,我把对话框的销毁改成隐藏,问题还是没变,还是一样拖动就报错。

我之前出现过这样的问题,在我的电脑上去改动ResourceView选项卡中Menu资源的内容,不生效。在别人的电脑上改就生效。
这个会不会跟我的电脑有关系呢?会不会跟时序有关系呢?
VC_ZSY 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 ackol_love 的回复:]
各位路过的大哥,麻烦帮一下我。
我建立了一个SDI程序,又在菜单中增加了两个菜单项,分别用来调出两个对话框。这两个对话框是用来给视图主程序传参用的。判断参数的传递是否成功的代码放在主程序的OnDraw()函数中。这两个对话框的销毁也是放在了主程序的OnDraw()函数中。我还把这两个对话框定义成视图的成员变量。
问题出在,当我点击菜单项,调出对话框时,用鼠标拖动对话框时……
[/Quote]
这个貌似是对话框创建和销毁的问题吧,你在OnDraw里面创建并在里面销毁,你拖动对话框肯定要调用OnDraw的,估计是OnDraw里面处理逻辑问题
傻X 2010-09-19
  • 打赏
  • 举报
回复
我说下我的看法吧,DestoryWindow()本身是非常容易出错的,不是说函数不好,是用的不好,你可以选择则隐藏窗口的方法,要用再显示。
ackol_love 2010-09-19
  • 打赏
  • 举报
回复
大家能不能告诉我,主程序怎样接收对话框的数据是最安全的。不用说得太详细,简单的说一下就行。
ackol_love 2010-09-19
  • 打赏
  • 举报
回复
m_zf_struct是一个ZHFU_STRUCT类型的结构体:
typedef struct //用来保存要计算其涨跌幅度的股票信息
{
CString code1; //股票代码1
CString code2; //股票代码2
CString code3; //股票代码3
CString code4; //股票代码4
CString code5; //股票代码5
CTime time1; //时间点1
CTime time2; //时间点2
CTime time3; //时间点3
}ZHFU_STRUCT;

这个主要是用来保存用户在对话框上输入的数据,当点击对话框的确定按钮后,在主程序的OnDraw()函数中把m_zf_struct结构体的数据赋给主程序的成员变量,在实现画线的函数中根据这个结构体中的数据,读取相应文件的数据并计算,然后输出。问题会不会出在画线的函数中呢?
ackol_love 2010-09-19
  • 打赏
  • 举报
回复
大家能不能告诉我,怎样实现对话框和主窗口的传参可以避免出现上述问题。
加载更多回复(12)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧