首先建立了一个Dialog,把它映射成CDialogBar的子类,然后在CMainFrame::OnCreate()中,把对话框停靠在最下方。但是发现一个问题,对话框并不能撑满停靠的区域,而且,当整个窗口改变大小时,对话框大小不会改变,很不爽。我调用SetWindowPos设置其大小,不起作用,请问是什么原因? if (!m_dlgBar.Create(this,IDD_DIALOG1, CBRS_BOTTOM|CBRS_GRIPPER, IDD_DIALOG1))
{
TRACE0("Failed to create dialogbar\n");
return -1;
} m_dlgBar.SetBarStyle(m_dlgBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY );
m_dlgBar.EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_dlgBar);//以下代码改变大小
CRect rc;
GetClientRect(&rc);
m_dlgBar.SetWindowPos(NULL ,0,0,rc.right,rc.bottom,SWP_NOMOVE | SWP_NOZORDER);//这段代码并没有起到改变窗口大小的作用,请指教

解决方案 »

  1.   

    MoveWindow也不行,可以移动位置,但是不能改变大小
      

  2.   

    你试一下 m_dlgBar.MoveWindow(rc);
      

  3.   

    当整个窗口改变大小时,对话框大小不会改变处理WM_SIZE
      

  4.   

    我都这样了:
    void CDlgBar::OnSize(UINT nType, int cx, int cy) 
    {
    // TODO: Add your message handler code here CRect rc;
    GetClientRect(&rc); cx = rc.right-rc.left;
    cy = rc.bottom - rc.top;
    this->SetWindowPos(NULL ,0,0,cx,cy,SWP_NOMOVE | SWP_NOZORDER);
    CDialogBar::OnSize(nType, cx, cy);


    }
    还是不行
      

  5.   

    WM_SIZE再相同处理一下窗体里面的控件就ok了
      

  6.   

    那是CDialogBar,是从CControlBar继承的,不是一个对话框,不能用普通的MoveWindow/SetWindowPos来调整大小,而是要重载CalcFixedLayout()成员函数。
      

  7.   

    楼上的兄弟,能不能给个实例代码,急啊,谢谢了
    [email protected]