客户区窗口切分不平均有关问题

客户区窗口切分不平均问题
C/C++ code
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
    CRect cr;
    BOOL flag;
    GetClientRect(&cr);
    /*
    CString cstr;
    cstr.Format("客户区Width=%d,Height=%d",cr.Width(),cr.Height());
    AfxMessageBox(cstr);
    */
    //CSize cSz1(cr.Width()/3,cr.Height());
    //CSize cSz2(cr.Width()/3,cr.Height());
    CSize cSz1(cr.Width()*4/9,cr.Height());
    CSize cSz2(cr.Width()*4/9,cr.Height());
    CSize cSz3(cr.Width()/3,cr.Height());


    CString cstr;
    cstr.Format("客户区Width=%d,Height=%d\n",cr.Width(),cr.Height());
    AfxMessageBox(cstr);
    TRACE(cstr);//跟踪错误




    m_wndsplitter.CreateStatic(this,1,3);//切分窗口为1行3列

    pContext->m_pCurrentFrame = this;//主框架窗口
    pContext->m_pNewViewClass = RUNTIME_CLASS(CSeesawView);//视图类

    flag = m_wndsplitter.CreateView(0 ,0 ,pContext->m_pNewViewClass ,cSz1 ,pContext) ;
    if (!flag)
    {
        TRACE(_T("创建第一视图失败!"));//跟踪错误
        return flag ;
    }
    flag = m_wndsplitter.CreateView(0 ,1 ,pContext->m_pNewViewClass ,cSz2 ,pContext) ;
    if (!flag)
    {
        TRACE(_T("创建第二视图失败!"));//跟踪错误
        return flag ;
    }
    m_initFrm = true ;
    flag = m_wndsplitter.CreateView(0 ,2 ,pContext->m_pNewViewClass ,cSz3 ,pContext) ;
    if (!flag)
    {
        TRACE(_T("创建第三视图失败!"));//跟踪错误
    }
    return flag ;
    return CFrameWnd::OnCreateClient(lpcs, pContext);
}

切分客户区为1行3列,程序加载后以最大化窗口运行,但如果cSz1,cSz2,cSz3均按照cr.Width()/3来分,最终得到的3个子视图窗体不一样宽,非得把cSz1和cSz2按照cr.Width()*4/9方可平均。
我特意搞个AfxMessageBox来输出客户区大小,结果发现客户区大小为:
width=948,height=510。但实际本人电脑显示器大小为1280*800,前者输出的客户区大小我怀疑实为正常(最大化还原)窗口的客户区大小。
求解为何如此?难道Windows程序默认最大化窗体与还原后正常窗体大小存在某种比例关系?若是如此,如果改变程序加载后初始客户区大小?

------解决方案--------------------
窗口最大化是在CXXApp中的InitInstance中完成的:m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
但在调用m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED)完成最大化之前,调用了OnCreateClient进行窗口的分割,此时的窗口并不是最大化后的窗口。你分别设一个断点,跟踪一下就知道了。
------解决方案--------------------
”最大化“的尺寸从系统参数中可以知道。