void CWorkSpaceBar2::OnSize(UINT nType, int cx, int cy) 
{
CBCGPDockingControlBar::OnSize(nType, cx, cy); // Tab control should cover a whole client area:
m_wndTree.SetWindowPos (NULL, nBorderSize, nBorderSize, 
cx - 2 * nBorderSize, cy - 2 * nBorderSize,
SWP_NOACTIVATE | SWP_NOZORDER);
}
这是BCG中的代码,跟mfc差不多。在线等,哪位高人帮解决下?

解决方案 »

  1.   

    从你贴出的程序来看,可能情况如下:1.问题在nBorderSize的取值上,令其为0,窗口客户区位置在左面左上角;
    2.窗口刷新问题:采用invalidate()激发onpaint()/ondraw()消息.
      

  2.   

    还有一种办法,不要使用传入的cx,cy。直接GetWindowRect,用得到矩形,修改一下参数就可以了
      

  3.   

    上面兄弟说的不管用啊。还是不变。下面这段代码是在MAINFORM.cpp中创建一个窗口的。
    if (!m_wndWorkSpace2.Create (_T("计算机列表"), this, CRect (0, 0, 200, 200),
    TRUE, ID_VIEW_WORKSPACE2,
     WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
    {
    TRACE0("Failed to create Workspace bar 2\n");
    return FALSE;      // fail to create
    }将窗口移到文档区,就是正中间。
    m_wndWorkSpace2.ConvertToTabbedDocument();下面是m_wndWorkSpace2.cpp中。m_wndTree是CLISTTREE变量。
    nt CWorkSpaceBar2::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CBCGPDockingControlBar::OnCreate(lpCreateStruct) == -1)
    return -1;

    CRect rectDummy;
    rectDummy.SetRectEmpty ();
    // Create tree windows.
    // TODO: create your own tab windows here:
    const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE |  TVS_HASLINES | 
    TVS_LINESATROOT | TVS_HASBUTTONS;

    if (!m_wndTree.Create (dwViewStyle, rectDummy, this, 1))
    {
    TRACE0("Failed to create workspace view\n");
    return -1;      // fail to create
    } // Setup trees content:
    HTREEITEM hRoot1 = m_wndTree.InsertItem (_T("Root 2"));
    m_wndTree.InsertItem (_T("Item 1"), hRoot1);
    m_wndTree.InsertItem (_T("Item 2"), hRoot1); return 0;
    }void CWorkSpaceBar2::OnSize(UINT nType, int cx, int cy) 
    {
    CBCGPDockingControlBar::OnSize(nType, cx, cy); // Tab control should cover a whole client area:
    m_wndTree.SetWindowPos (NULL, nBorderSize, nBorderSize, 
    cx - 2 * nBorderSize, cy - 2 * nBorderSize,
    SWP_NOACTIVATE | SWP_NOZORDER);
    }void CWorkSpaceBar2::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting

    CRect rectTree;
    m_wndTree.GetWindowRect (rectTree);
    ScreenToClient (rectTree); rectTree.InflateRect (nBorderSize, nBorderSize);
    dc.Draw3dRect (rectTree, ::GetSysColor (COLOR_3DSHADOW), 
    ::GetSysColor (COLOR_3DSHADOW));
    }问题就是在正中间的窗口只显示一半,要手动放最大。
    哪位高手帮解决下。谁帮我解决另加100分。
      

  4.   

    用下面的代码试一下
    void CWorkSpaceBar2::OnSize(UINT nType, int cx, int cy) 

    CBCGPDockingControlBar::OnSize(nType, cx, cy); 
    CRect rect;
    GetWindowRect(&rect);
    ScreenToClient(rect);
    rect.DeflateRect(nBorderSize, nBorderSize);
    rect.right = rect.left + rect.Width() / 2;
    rect.bottom = rect.top + rect.Height() / 2;
    m_wndTree.MoveWindow(rect);