出错弹出提示 : 0x78aab8ec (mfc90ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突调用堆栈的显示 :>
 
mfc90ud.dll!CWnd::MoveWindow(int x=0x000000c6, int y=0x00000124, int nWidth=0x0000000e, int nHeight=0x00000019, int bRepaint=0x00000001)  行307 + 0x3 字节 C++

mfc90ud.dll!CWnd::MoveWindow(const tagRECT * lpRect=0x0127fbec, int bRepaint=0x00000001)  行101 + 0x32 字节 C++这个错误时有时无,不加GetDlgItem(IDC_BUTTON)->MoveWindow(&temp) (线程中用this调用主函数);就没出现过,不知道是怎么回事

解决方案 »

  1.   

    GetDlgItem(IDC_BUTTON)估计有时候获取控件失败了,造成后面MoveWindow出错
      

  2.   

    GetDlgItem(IDC_BUTTON)返回的对象CWnd是临时的,重要的一点时,假如你的线程
    启动比主界面早,GetDlgItem(IDC_BUTTON)返回的CWnd是不可预知的,会产生此类错误。
      

  3.   

    线程里调用this的话,必须确保线程在类初始化后启动和类结束前停止
      

  4.   

    还是你在MoveWindow之前,一定要判断是否有效。
      

  5.   

    我是根据线程中获取的数据改变BUTTON控件的位置,用this调用主窗口中的函数如下,在ONDESTROY中进行销毁线程,
             CRect temp;
            ...
    if(::IsWindow(m_hWnd))
    {
    GetDlgItem(IDC_BUTTON)->MoveWindow(&temp);
    }
    有时还是会出错
    mfc90ud.dll!CWnd::MoveWindow(const tagRECT * lpRect=0x0127fbec  ,是这里的CONST问题吗
      

  6.   

    解决了,原来是BUTTON我是直接从其他按钮复制过来的,把复制的按钮都删掉再从工具栏添加就好了。