1.对话框是切分窗口得到的第一排第2个对话框:
if (!m_MSplitter.CreateStatic(this,1,2))
return FALSE;
m_MSplitter.CreateView(0, 0, RUNTIME_CLASS(CLView), CSize(0,0),pContext);
        m_nViewMain=m_MSplitter.AddView(0, 1, RUNTIME_CLASS(CMainPlay), pContext);
m_MSplitter.SetColumnInfo( 0, 180, 0 );
return TRUE;
2.初始运行最大化:
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd->UpdateWindow();
3.得到 //对话框尺寸
CRect rect;  
GetClientRect(&rect);  
4.相应控件定位:
GetDlgItem(IDC_BUTTON_YUNTAI)->MoveWindow(rect.right-m_btnW,rect.bottom-m_btnH,m_btnW,m_btnH,true);可是这样的操作并不能把控钮定位在对话框的右下角,我觉得是对话框尺寸获取的不正确,是吗?

解决方案 »

  1.   

    你TRACE 一下rect里的值看看
      

  2.   

    + &rect 0x0012f8f4 {top=0 bottom=501 left=0 right=864}
    断点调试得到的,我的电脑分辨率是1440*900
    m_btnW=116,m_btnH=28
    左窗口宽度设的是180
      

  3.   

    是不是放的位置不对呀?是放在对话框的初始化函数中的显示窗口后,再调用一次:
    3.得到 //对话框尺寸 
    CRect rect;  
    GetClientRect(&rect);  
    4.相应控件定位: 
    GetDlgItem(IDC_BUTTON_YUNTAI)->MoveWindow(rect.right-m_btnW,rect.bottom-m_btnH,m_btnW,m_btnH,true);
    就可以得到正确的但是放在OnSize中好像又不行,调试发现OnSize比初始化函数先运行,得不到m_btnW,m_btnH的值,把获取按钮尺寸的代码放在OnSize中又会出错
    CRect rc; //按钮尺寸
    GetDlgItem(IDC_BUTTON_YUNTAI)->GetWindowRect(&rc);
    ScreenToClient(&rc);
    m_btnX=rc.left;
    m_btnY=rc.top;
    m_btnW=rc.right-rc.left;
    m_btnH=rc.bottom-rc.top;
      

  4.   

    主要是这一句错误:GetDlgItem(IDC_BUTTON_YUNTAI)->GetWindowRect(&rc);,应该怎样改了?
      

  5.   


    void CXXXDlg::OnSize(UINT nType, int cx, int cy)
    {
    CDialog::OnSize(nType, cx, cy);
    CWnd* pWnd=GetDlgItem(IDC_BUTTON_YUNTAI);
    if(pWnd)
            {
    CRect rc;
    pWnd->GetClientRect(rc);
    pWnd->MoveWindow(cx-rc.Width(),cy-rc.Height(),rc.Width(),rc.Height());
    }
    // TODO: 在此处添加消息处理程序代码
    }