首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC界面程序OnSize函数修改控件位置调试出现 mfc80ud.dll未处理的错误

2012-08-11 
MFC界面程序OnSize函数修改控件位置调试出现 mfc80ud.dll未处理的异常我在做MFC界面调整的时候,以前的东西

MFC界面程序OnSize函数修改控件位置调试出现 mfc80ud.dll未处理的异常
我在做MFC界面调整的时候,以前的东西能运行,换机器后出现调试出现中断,提示为:
MFC.exe 中的 0x7833d38a (mfc80ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突
代码如下:

C/C++ code
void MFC::OnSize(UINT nType, int cx, int cy){     if (Change_Flag)     {    //!<    调整数据列表以下控件的位置        ControlMove(IDC_BUTTON_ARRANGE);        ControlMove(IDC_BUTTON_PATCH);        ControlMove(IDC_STATIC_COORDINATE);        ControlMove(IDC_EDIT_STAT);        ControlMove(IDC_STATIC_STAT);        ControlMove(IDC_BUTTON_STAT);        m_multiple_Width=float(1)/float(m_multiple_Width);        m_multiple_Height=float(1)/float(m_multiple_Height);    //    GetClientRect(&rectDlg);     }}void MFC::ControlMove(int nID){    CRect rect;    GetDlgItem(nID)->GetWindowRect(rect);    ScreenToClient(rect);    CPoint TLPoint,BRPoint;    if (nID==1000)//IDC_BUTTON_ARRANGE的ID    {        TLPoint.x=rectDlg.TopLeft().x+21;        TLPoint.y=rectDlg.BottomRight().y-40;        BRPoint.x=TLPoint.x+55;        BRPoint.y=TLPoint.y+22;    }    if (nID==1001))//IDC_BUTTON_PATCH的ID    {        TLPoint.x=rectDlg.TopLeft().x+84;        TLPoint.y=rectDlg.BottomRight().y-40;        BRPoint.x=TLPoint.x+55;        BRPoint.y=TLPoint.y+22;    }    if (nID==1024)))//IDC_STATIC_COORDINATE的ID    {        TLPoint.x=rectDlg.TopLeft().x+150;        TLPoint.y=rectDlg.BottomRight().y-40;        BRPoint.x=TLPoint.x+55;        BRPoint.y=TLPoint.y+22;    }    if (nID==1022)))//IDC_EDIT_STAT的ID    {        TLPoint.x=rectDlg.TopLeft().x+25;        TLPoint.y=rectDlg.BottomRight().y-60;        BRPoint.x=TLPoint.x+300;        BRPoint.y=TLPoint.y+20;    }    if (nID==1014)))//IDC_STATIC_STAT的ID    {        TLPoint.x=rectDlg.TopLeft().x+28;        TLPoint.y=rectDlg.BottomRight().y-85;        BRPoint.x=TLPoint.x+300;        BRPoint.y=TLPoint.y+20;    }    if (nID==1020)))//IDC_BUTTON_STAT的ID    {        TLPoint.x=rectDlg.TopLeft().x+21;        TLPoint.y=rectDlg.BottomRight().y-110;        BRPoint.x=TLPoint.x+300;        BRPoint.y=TLPoint.y+20;    }    rect.SetRect(TLPoint,BRPoint);    GetDlgItem(nID)->MoveWindow(rect);}


如果把OnSize中的代码注释掉就能调试,不注释的话就直接中断,进不了界面,这些ID在resource.h中全部都有,坐等高手解释

[解决办法]
OnSize会调用多次,在窗口没创建之前就调用了,因此Move时报错,可以在OnSize()中加上以下语句:

if (m_hWnd == NULL)
return;
[解决办法]
OnSize你MoveWindow之前,先判断一下窗口句柄HWND是否有效
[解决办法]
在Init完成之前调用OnSize就会发生错误,可自定义一个bInit, 在CDialog::OnInitDialog或CFormView::OnInitialUpdate中置成TRUE

热点排行