求教VC打开多个视图时,再单击弹出对话框,不能弹出对话框问题!

yoo_twins 2011-05-05 03:06:54
小弟采用多文档多视图创建的VC程序,具体实现时,采用一个文档对应多个视图,每个视图有不同的Frame,最多有11个视图。在程序运行时,当我打开10或11个视图时,在某个视图上,再单击弹出一个对话框时,程序没有反应,不能弹出对话框。如果打开对话框小于10个,则能弹出此对话框。通过任务管理器发现,此程序运行时占用cpu5%,占用内存不足134MB,机器物理内存3G。不知哪位高手能帮小弟解决此问题!
...全文
145 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoo_bayern 2011-05-22
  • 打赏
  • 举报
回复
可以减少最大视图显示个数。。。
向立天 2011-05-20
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
yoo_twins 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 heksn 的回复:]

你把你的数据处理部分屏蔽掉 然后再试试 如果正常 那就和你的数据处理有关系
[/Quote]
今天调试时发现,我的数据处理函数是每隔250ms处理一次数据,处理完发送::PostMessage((CMainFrame *)(afxGetApp()->m_pMainWnd))->m_hWnd, WM_READDATA_OK_MSG, NULL, NULL );

WM_READDATA_OK_MSG消息的注册方法是WM_READDATA_OK_MSG = RegisterWindowMessage(EADDATA_OK_MSG);

而WM_READDATA_OK_MSG消息的响应函数我放在CMainFrame中OnReadDataOkMsg()函数处理,此函数的作用是当有新的数据到来时,判断当前活动视图,并刷新,否则,不刷新,实现部分如下:
CMainFrame::OnReadDataOkMsg(...)
{
CRect rect;
if ( NULL != m_pYDoc )
{
POSITION pos;
pos = m_pYDoc->GetFirstViewPosition();
CView * pView = m_pYDoc->GetNextView(pos);
// g_Rect1是在相应的View视图的OnDraw()函数中获取的数据变化举行框
pView->InvalidataRect(&g_Rect1);
}
... // 共计有11个视图如上所述的视图刷新判断

return 1;
}
烦请各位大虾不吝赐教!
ps:因为工作机器不能上网,此段代码是手动在上网机器上敲上去的,所以没有写全!
yoo_twins 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wuzongman 的回复:]
重新生成
[/Quote]

这个什么意思?
  • 打赏
  • 举报
回复
你把你的数据处理部分屏蔽掉 然后再试试 如果正常 那就和你的数据处理有关系
izardMan 2011-05-05
  • 打赏
  • 举报
回复
重新生成
yoo_twins 2011-05-05
  • 打赏
  • 举报
回复
上一贴的代码部分应该是:
HANDLE hMemData = ::CreateFileMapping((HANDLE)oxffffffff,0, PAGE_READWRITE,0, 0X10000, "数据1");
DataBuf = (BYTE *) ::MapViewofFile(hMemData, FILE_MAP_WRITE,0,0,0);

HANDLE hTimeData = ::CreateFileMapping((HANDLE)oxffffffff,0, PAGE_READWRITE,0, 0X70000, "数据2");
DataBuf = (BYTE *) ::MapViewofFile(hTimeData, FILE_MAP_WRITE,0,0,0);

HANDLE hByteData = ::CreateFileMapping((HANDLE)oxffffffff,0, PAGE_READWRITE,0, 0X128, "数据3");
DataBuf = (BYTE *) ::MapViewofFile(hByteData, FILE_MAP_WRITE,0,0,0);
yoo_twins 2011-05-05
  • 打赏
  • 举报
回复
zgl7903和xin_9318大虾说是空间不够问题。这个程序A是读取我的另外一个应用程序B的数据,程序B创建一个共享内存空间,并把外部发送的数据写到相应共享内存,程序A从共享内存读取数据,会不会是这个导致的。程序B的创建共享内存方法为:
HANDLE hMemData = ::CreateFileMapping((HANDLE)oxffffffff,0, PAGE_READWRITE,0, 0X10000, "数据");
DataBuf = (BYTE *) ::MapViewofFile(hMemData, FILE_MAP_WRITE,0,0,0);

HANDLE hTimeData = ::CreateFileMapping((HANDLE)oxffffffff,0, PAGE_READWRITE,0, 0X70000, "数据");
DataBuf = (BYTE *) ::MapViewofFile(hTimeData, FILE_MAP_WRITE,0,0,0);

HANDLE hByteData = ::CreateFileMapping((HANDLE)oxffffffff,0, PAGE_READWRITE,0, 0X128, "数据");
DataBuf = (BYTE *) ::MapViewofFile(hByteData, FILE_MAP_WRITE,0,0,0);
不知道会不会跟这段代码有关。
yoo_twins 2011-05-05
  • 打赏
  • 举报
回复
我之前调试时,在nRet = m_DlgAllFrmNo.Domodal()处设置断点,调试进入CDialog的Domodal函数,在VERIFY(RunModalLoop(dwFlags) == m_nModalResult)处不能停止。
xin_9318 2011-05-05
  • 打赏
  • 举报
回复
打个断点,调试一下,很有可能是空间缺乏的问题。
zgl7903 2011-05-05
  • 打赏
  • 举报
回复
在DoModal前设个断点调试下看看,
是不是堆空间 栈空间不够用的
yoo_twins 2011-05-05
  • 打赏
  • 举报
回复
写错了,是10个视图,另外对话框是模态的。
fandh 2011-05-05
  • 打赏
  • 举报
回复
非模态对话框?
如果打开对话框小于10个 这句话没影问题吧 是不是10个视图?
建议贴相关代码!跟踪调试最好!

15,979

社区成员

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

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