2008-10-14 11 views
1

VS2008 (더하기 기능 팩)의 응용 프로그램 마법사를 사용하여 "Visual Studio"스타일로 MDI 응용 프로그램을 만들 때 CMainFrame 클래스는 메서드 CreateDockingWindows()을 가져옵니다.CMainFrame 대신 CView 도킹 창 만들기

모든 창을 항상 볼 수는 있지만 활성 문서의 유형에 따라 표시하고 싶지 않기 때문에이 창을 내보기 구성원에게 보냈고 창을 OnInitialUpdate()으로 옮겼습니다. 메인 프레임을 부모 창으로 설정하는 것을 포함하여 CMainFrame에 의해 수행 된 것과 같은 방법으로 창을 생성합니다.

도킹 창의 위치는 레지스트리에 자동으로 저장되지만 프레임이 초기화 될 때 도킹 창이 아직 존재하지 않기 때문에 복원되지 않습니다.

보기가있는 도킹 윈도우를 만드는 것이 좋을까요? 아니면 더 많은 문제가 예상 되나요? 내가 원하는 것을 성취 할 수있는 더 좋은 방법이 있습니까?

미리 감사드립니다.

답변

1

다음 해결책은 나를 위해 꽤 잘 작동하는 것으로 나타났습니다.

MainFrame은 여전히 ​​모든 창을 소유하므로 모든 기존 프레임 워크 기능을 유지합니다.

/** 
* \brief Mimics some of the behavior of a CView 
* 
* CDockablePane derived class which stores a pointer to the document and offers 
* a behavior similar to CView classes. 
* 
* Since the docking panes are child windows of the main frame, 
* they have a longer live time than a view. Thus the (de-)initialization code 
* cannot reside in the CTor/DTor. 
*/ 
class CPseudoViewPane : 
    public CDockablePane, 
{ 
    DECLARE_DYNAMIC(CPseudoViewPane) 

public: 
    /// Initializes the pane with the specified document 
    void Initialize(CMyDoc* pDoc); 

    void DeInitialize(); 

    /// Checks if window is valid and then forwards call to pure virtual OnUpdate() method. 
    void Update(const LPARAM lHint); 

protected: 
    CPseudoViewPane(); 
    virtual ~CPseudoViewPane(); 


    CMyDoc* GetDocument() const { ASSERT(NULL != m_pDocument); return m_pDocument; } 

    CMainFrame* GetMainFrame() const; 

    /** 
    * This method is called after a document pointer has been set with #Initialize(). 
    * Override this in derived classes to mimic a view's "OnInitialUpdate()-behavior". 
    */ 
    virtual void OnInitialUpdate() = 0; 

    /** 
    * Called by #Update(). Overrider to mimic a view's "OnUpdate()-behavior". 
    * This method has a simplified parameter list. Enhance this if necessary. 
    */ 
    virtual void OnUpdate(const LPARAM lHint) = 0; 

    DECLARE_MESSAGE_MAP() 

private: 
    CMyDoc* m_pDocument; 
}; 
:

는 내가 필요로하는 "를 CView 같은"동작을 구현하는 클래스에서 창을 유도