zoukankan      html  css  js  c++  java
  • 文档视图窗口的切换,本人尝试过,有效;

    第一,在每个视图列的构造函属性数改为public,同时头文件加上#include <shlwapi.h>;

    第二:

    在文档的CQiehuanApp里面弄;

    1。

    .h 文件

    private:
    UINT m_nCurView;
    CView *m_pViews[3];//三个视图,其中一个是本工程的视图类,2个是新建的cformview类;

    afx_msg void On32772();//要点击切换视图的操作;

    afx_msg void On32773();////要点击切换视图的操作;
    CView* SwitchView( UINT nIndex );
    void CreateMoreViews();
    BOOL SaveActiveViewsData();

    2. .cpp 文件

    步骤是 创建,保存,切换;

    在初始化函数的最后,也就是return TRUE 的前面创建文档;

    第一步;

    BOOL CQiehuanApp::InitInstance()
    {

    CreateMoreViews();

    return TRUE;

    }

    void CQiehuanApp::CreateMoreViews()
    {
    m_nCurView = 0; // Save index of the currently active view class

    // Keep array of views as member of WinApp

    CView* pActiveView = ((CFrameWnd*) m_pMainWnd)->GetActiveView();

    m_pViews[0] = pActiveView;
    m_pViews[1] = (CView*)(new Cmap );//定义一个screenDefineView对象;
    m_pViews[2] = ( CView * )new PRODATGA ;

    CDocument* pCurrentDoc = ((CFrameWnd*) m_pMainWnd)->GetActiveDocument();

    // Initialize a CCreateContext to point to the active document.
    // With this context, the new view is added to the document
    // when the view is created in CView::OnCreate().
    CCreateContext newContext;
    newContext.m_pNewViewClass = NULL;
    newContext.m_pNewDocTemplate = NULL;
    newContext.m_pLastView = NULL;
    newContext.m_pCurrentFrame = NULL;
    newContext.m_pCurrentDoc = pCurrentDoc;

    // The ID of the initial active view is AFX_IDW_PANE_FIRST.
    // Incrementing this value by one for additional views works
    // in the standard document/view case but the technique cannot
    // be extended for the CSplitterWnd case.
    CRect rect(0, 0, 0, 0); // gets resized later

    // Need to cast pointers to have correct Create functions called
    // CForm2 is CFormView::Create
    for ( int nView=1; nView <3; nView++ )
    {
    // Create the new view. In this example, the view persists for
    // the life of the application. The application automatically
    // deletes the view when the application is closed.
    m_pViews[nView]->Create(NULL, NULL,
    (AFX_WS_DEFAULT_VIEW & ~WS_VISIBLE),
    // views are created with the style of AFX_WS_DEFAULT_VIEW
    // In MFC 4.0, this is (WS_BORDER | WS_VISIBLE | WS_CHILD)
    rect, m_pMainWnd,
    AFX_IDW_PANE_FIRST + nView, &newContext);
    m_pViews[nView]->SendMessage( WM_INITIALUPDATE );
    }

    // When a document template creates a view, the WM_INITIALUPDATE
    // message is sent automatically. However, this code must
    // explicitly send the message, as follows.


    /*** End modification of default InitInstance ***/
    }

    第二部:

    切换,切换函数里面调用保存函数;

    afx_msg void On32772();//要点击切换视图的操作;

    {  

      SwitchView( 2 );//要切换到第二张视图,第0张视图一般是工程的文档类;

    }

    afx_msg void On32773();////要点击切换视图的操作;

    {

      SwitchView( 1 );//要切换到第一张视图,

    }

    **************

    切换功能

    CView* CQiehuanApp::SwitchView( UINT nIndex )
    {
    ASSERT( nIndex >=0 && nIndex < 3 );

    CView* pNewView = m_pViews[nIndex];

    CView* pActiveView =
    ((CFrameWnd*) m_pMainWnd)->GetActiveView();

    if ( !pActiveView ) // No currently active view
    return NULL;

    if ( pNewView == pActiveView ) // Already there
    return pActiveView;

    // Update Doc's data if needed
    // Don't change view if data validation fails
    if ( ! SaveActiveViewsData() )//这里调用了保存的函数;
    {
    return pActiveView;
    }

    m_nCurView = nIndex; // Store the new current view's index

    // exchange view window ID's so RecalcLayout() works
    UINT temp = ::GetWindowLong(pActiveView->m_hWnd, GWL_ID);
    ::SetWindowLong(pActiveView->m_hWnd, GWL_ID,
    ::GetWindowLong(pNewView->m_hWnd, GWL_ID));
    ::SetWindowLong(pNewView->m_hWnd, GWL_ID, temp);

    // Display and update the new current view - hide the old one
    pActiveView->ShowWindow(SW_HIDE);
    pNewView->ShowWindow(SW_SHOW);
    ((CFrameWnd*) m_pMainWnd)->SetActiveView(pNewView);
    ((CFrameWnd*) m_pMainWnd)->RecalcLayout();//将Toolbar、DialogBar等可浮动的东西安排位置、处理和View、Frame之间的位置关系的
    pNewView->Invalidate();
    return pActiveView;
    }

    保存功能

    BOOL CQiehuanApp::SaveActiveViewsData()
    {
    CView* pActiveView =
    ((CFrameWnd*) m_pMainWnd)->GetActiveView();

    if ( !pActiveView )
    return TRUE; // No active view TO save data from, so count as success

    return TRUE; // Not a view with data to save!
    }

  • 相关阅读:
    大数斐波那契数列
    1、硬件IO口配置;
    1通过URL对象的openStream()方法能够得到指定资源的输入流。
    题意:
    一、作用:
    倒是在网上有看到显卡没装风尚导致该问题的,最后换了一个带风扇的显卡就解决的:
    Jeewx 捷微管家操作配置文档(开源版本号)
    工业控制系统USB存储设备可信管理方案的(ICICS2015)论文PPT:TMSUI: A Trust Management Scheme
    java.lang.ArithmeticException: Rounding necessary
    springcloud 熔断处理
  • 原文地址:https://www.cnblogs.com/chenzuoyou/p/3293079.html
Copyright © 2011-2022 走看看