小妹编了一个程序,创建的是非模式对话框,程序中需要这个对话框动态改变大小,并且其中的控件也相应的改变。
    起先,我在Dialog类的OnSize()函数中直接添加改变控件的代码,编译通过,但运行出错。然后,我把改变控件大小的代码单独成为一个子函数,在OnSize()中调用,结果同上。然后我在OnSize()函数中发送自定义消息:
void CResultSimple::OnSize(UINT nType, int cx, int cy) 
{
CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
PostMessage(WM_WINDOW_SIZE);
}
响应函数为:
void CResultSimple::OnDialogSize()
{
CRect rect;
GetClientRect(&rect);
rect.top+=100;
rect.left-=2;
rect.right+=1;
rect.bottom+=2;
m_List_Result_Simp.MoveWindow(&rect); CRect btnRect;
int width=rect.right-rect.left;
width=width/18;
btnRect.top=72;
btnRect.bottom=95; btnRect.left=7*width;
btnRect.right=btnRect.left+width*2;
m_btnInsert.MoveWindow(&btnRect); btnRect.left=11*width;
btnRect.right=btnRect.left+width*2;
m_btnModify.MoveWindow(&btnRect); btnRect.left=15*width;
btnRect.right=btnRect.left+width*2;
m_btnDelete.MoveWindow(&btnRect);
}
编译通过,运行正常。但是,当我生成Release版的时候,编译通过,但是运行出错。
说是WINOCC.CPP 279行出错。还有,我的程序的Debug版在我自己的电脑上运行没有问题,当那到别人的电脑上运行时(装有vc),报告同样的错误:WINOCC.CPP 279行出错。课程设计,快要交了,急急急……帮帮我……

解决方案 »

  1.   

    在你的主窗口还没有完全成生的时候就会收到 WM_SIZE 消息,使运行出错
    类似加入:if(!m_StdTree.m_hWnd)
    return;
    if(!m_StdDataList.m_hWnd)
    return;
    if(!m_wndVSplitterBar.m_hWnd)
    return;先看一看窗口句柄是不是存在
      

  2.   

    THAT'S EASY!在wm_size第一次被触发的时候,窗口上的控件还没有生成,而你对不存在的窗口进行MoveWindow当然出错
    解决方法就是先判断控件的句柄是否有效。。
    if(m_btnInsert.GetSafeHwnd())m_btnInsert.MoveWindow(&btnRect);
      

  3.   

    void CWnd::MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint)
    {
    ASSERT(::IsWindow(m_hWnd));------------------->  这是 279 行内容
             窗口还没有生成,也就是说你的要更改大小的对象控件还没有生成
             故,这个工作因自己完成,如果不是可用窗口,则不响应 ONSIZE 不修改大小就可以了 if (m_pCtrlSite == NULL)
    ::MoveWindow(m_hWnd, x, y, nWidth, nHeight, bRepaint);
    else
    m_pCtrlSite->MoveWindow(x, y, nWidth, nHeight, bRepaint);
    }
      

  4.   

    末班车都搭不上!最好把 windows sdk 编程的消息映射看看!
      

  5.   

    晚了 完了  看来我得不到分了  
    同意 Saimen(单身情人)与 kingcom_xu(刀是用来杀人的!) 所说的
    不知这样回答能不能得到分
      

  6.   

    还是不行啊
    说是内存不能为read555
      

  7.   

    BOOL CResultSimple::OnInitDialog()
    {
    CDialog::OnInitDialog();
              OnDialogSize();         return TRUE;
    }
      

  8.   

    BOOL CResultSimple::OnInitDialog()
    {
    CDialog::OnInitDialog();
              OnDialogSize();         return TRUE;
    }void CResultSimple::OnSize(UINT nType, int cx, int cy) 
    {
    CDialog::OnSize(nType, cx, cy);
             if(m_List_Result_Simp.GetSafeHwnd())
                 OnDialogSize();
    }
      

  9.   

    谢谢大家thanks very much