我知道可以使用
GetDlgItem(IDC_EDIT1)->MoveWindow(10, 10, 100,100);
或GetDlgItem(IDC_EDIT1)->SetWindowPos(&wndTop, 10, 10, 100,100, SWP_SHOWWINDOW); 
来更改控件的坐标及大小但如何获得窗体当前的大小并使用控件随之发生变化呢?
且这个事件应该是在OnSize函数中执行,但我将以上代码放在OnSize为何启动窗体会出错呢。我是新手,请多指教!

解决方案 »

  1.   

    但我将以上代码放在OnSize为何启动窗体会出错呢。
    -------
    在OnSize里面加断点,看那地方出错了
      

  2.   


    GetDlgItem(IDC_EDIT1)->使用前 判断一下指针是否为空。
      

  3.   

    我用了个很笨的方法,达到了效果。
    在对话框类设定一个变量。
        private:
    BOOL AllowReSIZE;
    之后在OnInitDialog中将 AllowReSIZE=FALSE;
    然后在OnSize中加入
    if ( AllowReSIZE == TRUE  )
        GetDlgItem(IDC_EDIT1)->MoveWindow(10, 0, cx-20,cy-50);我是新手,只能用这个办法,我知道一定有不用设置变量的办法,但我现在还不会用.
      

  4.   

    OnSize第一次调用控件还没有创建,所以需要判断有效性。
      

  5.   


    这样没错,能解决问题,但没有理解问题
    在OnSize里面判断一下获取的窗口句柄是否为空即可
      

  6.   


    同意
    如果你在OnInitDialog和OnSize上打断点,你就看得很清楚了,一般的做法就是设置一个布尔变量标记,在OnInitDialog里把标记置为true,在OnSize里判断标记为true再MoveWindow
      

  7.   


    //OnSize()中添加下面句子,再调整大小if(GetDlgItem(IDC_EDIT1)->GetSafeHandle()==NULL)
      return;
      

  8.   

    第一次GetDlgItem也肯定会出错,因为此时的父窗口句柄也为空
    if(this->m_hWnd)
    {
      CWnd *pWnd = GetDlgItem(IDC_XXXXX);
      if(pWnd && pWnd->m_hWnd)
      {
        ::MoveWindow(xxxxxxxx)
      }
    }