本帖最后由 thisismyway 于 2012-09-03 15:24:38 编辑

解决方案 »

  1.   

    窗口最大化是在CXXApp中的InitInstance中完成的:m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
    但在调用m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED)完成最大化之前,调用了OnCreateClient进行窗口的分割,此时的窗口并不是最大化后的窗口。你分别设一个断点,跟踪一下就知道了。
      

  2.   

    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    if( !CFrameWnd::PreCreateWindow(cs) )
    return FALSE;
    cs.style&=~WS_EX_CLIENTEDGE;
    CRect rect;
    rect.SetRect(0,0,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN));
    AdjustWindowRectEx(&rect, cs.style, TRUE,cs.dwExStyle);
    cs.cx = ::GetSystemMetrics(SM_CXSCREEN);
    cs.cy = ::GetSystemMetrics(SM_CYSCREEN);

    CString cstr;
    cstr.Format("%d,%d,%d,%d\n",cs.cy,cs.cx,cs.y,cs.x);
    TRACE(cstr);//TRACE信息输出
    return TRUE;
    }
    本人在PreCreateWindow中写了上述函数,发现程序运行(以最大化窗口运行)后获取窗口客户区大小为1260*750),略小于本人显示屏的大小(1280*800),但点击还原窗口按钮后,窗口上下已延伸到Window任务栏,窗口大小变为1280*800。上述代码Trace信息输出为800,1280,0,0。求解为何?
      

  3.   

    试试
    #define SM_CXVSCROLL 2
    #define SM_CYHSCROLL 3