关于窗口最大化后自动调整控件大小和位置的,我参考了http://community.csdn.net/Expert/topic/3554/3554001.xml?temp=.1476404
结果执行以下代码时就非法报错,请问时怎么回事啊??谢谢CRect lpRect;
    GetWindowRect(&lpRect);
    CSize szMWD = lpRect.Size();
    int a = szMWD.cx;
    int b = szMWD.cy;         
    GetDlgItem(IDC_LIST1)->MoveWindow( (1024 - a)/2, (768 - b)/2,a , b ,TRUE);

解决方案 »

  1.   

    http://search.csdn.net/Expert/topic/2549/2549129.xml?temp=.6776697
      

  2.   

    在对话框刚开始时会有一次WM_SIZE事件,这时控件还未生成,所以会有错误,你在程序里加一个BOOL的成员变量,初值为TRUE,
    if(m_bFirst)
    {
       m_bFirst = FALSE;
    }
    else
    {
       //修改控件大小
    }
      

  3.   

    添加WM_SIZE的处理函数
    CRect l_rect,l_clrect;
    //GetWindowRect(l_clrect);//视大小
    GetClientRect(l_rect);
    nWidth=l_rect.Width();
    nHeight=l_rect.Height();
       
    int l_x,l_y,l_wdt,l_hgt;
    if(m_list.GetSafeHwnd())
    {
    m_list.GetWindowRect(l_clrect);
    l_x=l_rect.left+nWidth*5/1000;
    l_y=l_rect.top+nHeight*5/1000;
    l_wdt=nWidth*138/1000;
    l_hgt=nHeight*505/1000;
    m_list.SetWindowPos(this,l_x,l_y,l_wdt,l_hgt,SWP_SHOWWINDOW|SWP_NOZORDER);
    }
      

  4.   

    添加WM_SIZE消息函数
    然后用MoveWindow来成比例的调整控件的大小和位置
      

  5.   

    GetDlgItem(IDC_LIST1)->MoveWindow( (1024 - a)/2, (768 - b)/2,a , b ,TRUE);
    这个是居中,我想自动调整每个控件的大小,而不是居中,比例很难调整啊好像
      

  6.   

    在OnSize里面写呀。用pWnd->SetWindowPos(..);
    其中,你要获取当前屏幕的Rect,用getClientRect,就这样,挺容易。
      

  7.   

    CRect lpRect;
        GetWindowRect(&lpRect);
        CSize szMWD = lpRect.Size();
        int a = szMWD.cx;
        int b = szMWD.cy;         
       CWnd *wnd= GetDlgItem(IDC_LIST1);
    if(wnd->m_hwnd!=NULL)
    wnd->MoveWindow( (1024 - a)/2, (768 - b)/2,a , b ,TRUE);
    第一次执行时控件还没初始化,所以不能使用,等到控件初始化后,再次出现此消息时执行改变大小.
      

  8.   

    不能自动处理
    在vc中只有手工调整控件位置
    MoveWindow或者SetWindowPos