一个SDI在创建的时候,就选择了"最大化"。
运行程序,可以看到整个框架打开后一下子撑满整个屏幕。然后对这个SDI进行了个静态的切分,想要得到左右大小相等的
两个部分:
所以添加有函数:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
    CRect rc;
    GetClientRect(&rc);    CSize PaneSize(rc.Width()/2,rc.Height());    m_wndSplitter.CreateStatic(this,1,2);    m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(MyLeftView),PaneSize,pContext);
    m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(MyRightView),PaneSize,pContext);

    return TRUE;
}可是运行后发现,并不是左右大小相等的2个部分,左边小,右边大,左边仅有40%左右的宽度?这个为何?思量来,觉得可能是    CRect rc;    GetClientRect(&rc);
的这个rc有问题,它可能刚一打开时的大小,所以才造成左边的小。可我的程序是在创建的时候就定义了最大化了,为什么rc不是取得全屏幕呢?要怎么改才行?

解决方案 »

  1.   

    一个SDI在创建的时候,就选择了"最大化"。
    运行程序,可以看到整个框架打开后一下子撑满整个屏幕。然后对这个SDI进行了个静态的切分,想要得到左右大小相等的
    两个部分:
    所以添加有函数:
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
    {
        CRect rc;
        GetClientRect(&rc);    CSize PaneSize(rc.Width()/2,rc.Height());    m_wndSplitter.CreateStatic(this,1,2);    m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(MyLeftView),PaneSize,pContext);
        m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(MyRightView),PaneSize,pContext);

        return TRUE;
    }可是运行后发现,并不是左右大小相等的2个部分,左边小,右边大,左边仅有40%左右的宽度?这个为何?思量来,觉得可能是    CRect rc;    GetClientRect(&rc);
    的这个rc有问题,它可能刚一打开时的大小,所以才造成左边的小。可我的程序是在创建的时候就定义了最大化了,为什么rc不是取得全屏幕呢?要怎么改才行?
      

  2.   

    因为在执行
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
    函数时还没有最大化。使用GetSystemMetrics(SM_CXSCREEN);获得屏幕大小来计算就准确些。
      

  3.   

    to hnyyy(前进) 
    你说用:GetSystemMetrics(SM_CXSCREEN);
    可它的返回值是BOOL值,又不是全屏的大小,我该怎么使用呢?
    请指教。谢谢。
      

  4.   

    人家不都说了:GetSystemMetrics(SM_CXSCREEN)吗?    CRect rc(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));    CSize PaneSize(rc.Width()/2,rc.Height());CRect 的对像可有的参数个数有很多种,你看看MSDN就行。
      

  5.   

    int GetSystemMetrics(SM_CXSCREEN);
    明明返回int型呀?你怎么就是返回BOOL了?