我建立了一个单文档的MFC程序,文档的内容是一个FormView。
无论是FormView还是MainFrame我都没有设滚动条,但程序编译出来却有一组滚动条在FormView周围,请问怎么去掉。
附:
MainFrame的StyleBOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: 在此处通过修改
//  CREATESTRUCT cs 来修改窗口类或样式 cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
 | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU; return TRUE;
}FormView的InitialUpdate方法:void CMyToolView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();;
}将FormView加入主窗体的方法:pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMyToolDoc),
RUNTIME_CLASS(CMainFrame),       // 主 SDI 框架窗口
RUNTIME_CLASS(CMyToolView));

解决方案 »

  1.   

    CFormView是以资源文件中对应的那个对话框的大小设定滚动范围的。只要对话框的大小超过了当前视图的范围,则就会出现滚动条,所以只要在对话框资源里边将对话设置的足够小,就不会出现滚动条,然后在OnSize(UINT nType, int cx, int cy)处改动所有控件到你想要的样子
      

  2.   


    如何获得当前视图的范围?
    OnSize写在哪里?
      

  3.   

    void CXXView::OnInitialUpdate()
    {
    CFormView::OnInitialUpdate(); CSize sizeTotal; 
    sizeTotal.cx = 0; 
    sizeTotal.cy = 0; 
    SetScrollSizes(MM_TEXT, sizeTotal); 
    GetParentFrame()->RecalcLayout(); 
    }
      

  4.   

    在类向导中添加WM_SIZE消息的响应
      

  5.   

    派生自CFormView类的view类的OnInitialUpdate函数中
      

  6.   

    厄好像不是这的问题,刚发现MainFrame的OnCreateClient函数是这样写的,把文档区分成2*2了,可我改成1*1会报错,怎么办啊……BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
    {
    return m_wndSplitter.Create(this,
    2, 2,               // TODO: 调整行数和列数
    CSize(10, 10),      // TODO: 调整最小窗格大小
    pContext);
    }
      

  7.   

    把OnSize的功能重写.直接返回return ;
      

  8.   

    嗯,可能是创建工程的时候选错了,我想把这个Splitter去掉
      

  9.   

    谢谢大家,问题解决了,因为我在创建项目的时候选择了窗体分栏,然后FormView::OnInitialUpdate()
    中又用ResizeParentToFit();将窗体设定成一个FormView的大小,所以那个滚动条实际是那个CSplitterWnd加上的。修改MainFrame的代码将CSpliterWnd的声明和重写的OnCreateClient方法去掉后就正常了,谢谢大家,散分结题。