求问关于MFC 新建窗口中控件moveWindow出现断言错误的问题

lishi_1991 2015-10-21 06:34:47
我在一个窗口A中新建一个窗口B;创建方法如下:
mDlg.Create(IDD_DIALOG_2); 
mDlg.initPlayerDialog();
mDlg.ShowWindow(SW_HIDE);

然后由A窗口的按钮点击事件显示窗口B,触发部分如下:
mDlg.ShowWindow(SW_SHOW);

在B窗口onsize函数如下:
void mDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(mGroup[0].GetSafeHwnd()){
this->GetWindowRect(&mDlgRect);
int dialogWidth = mDlgRect.Width();
int dialogHeight = mDlgRect.Height();
mGroup[0].MoveWindow(5,5,dialogWidth-80,dialogHeight-45,true);
mGroup[0].GetWindowRect(&mGroupRect[0]);
ScreenToClient(mGroupRect[0]);
}
}

现在问题是B窗口能够正常创建和显示,但是一旦B窗口尺寸发生变化触发onSize函数就会发生如下断言错误:
econd Chance Assertion Failed: File f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wingdi.cpp, Line 1119

调试后发现如果 MoveWindow函数改成
mGroup[0].MoveWindow(5,5,dialogWidth-80,dialogHeight-45,false);
,即窗口不重画就不会触发断言,但是这样控件就无法自适应窗口改变了。
想问问各位有没有遇到过这个问题,该怎么解决呢
谢谢大家了
...全文
363 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
图灵转世 2016-03-15
  • 打赏
  • 举报
回复
应该是空句柄导致的。
向立天 2016-03-15
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复多日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
shenyi0106 2015-10-29
  • 打赏
  • 举报
回复
OnSize会在窗口还没有创建成功的时候被调用,所以要在OnSize内判断一下窗口是否有效,在进行move
信阳毛尖 2015-10-29
  • 打赏
  • 举报
回复
把断言的具体代码贴出来看看
kangkun 2015-10-28
  • 打赏
  • 举报
回复
引用 2 楼 pcradio 的回复:
根据wingdi:1119的断言错误判断,是你的mGroup[0]句柄无效导致的,看看你的赋值是否有问题
别人都已经到MOVEWINDOW了……
kangkun 2015-10-28
  • 打赏
  • 举报
回复
是不是用了内存DC什么的,重绘时没有初始化。
draculacsdn 2015-10-22
  • 打赏
  • 举报
回复
轮流注释每一行代码,先确认哪句出问题了; 找到问题代码就可以发现什么原因引起的
阿源是少年 2015-10-22
  • 打赏
  • 举报
回复
根据wingdi:1119的断言错误判断,是你的mGroup[0]句柄无效导致的,看看你的赋值是否有问题
lx624909677 2015-10-21
  • 打赏
  • 举报
回复
输出下OnSize里每次窗口的大小,在函数入口处就输出,然后看下具体是断在了自己代码的哪一行先

15,979

社区成员

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

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