|  | ||
|  |  |  | 
|  | ||
|  |  | 
  |  |  | 
| 
 |  | Docking views (2)by M.Shams Mukhtar (XperSoft). Step 1Add a function like this to your FormView Class: 
 
/** Note: pParent and pContext is a must in CreateView for doc/view ok */
BOOL CMyFormView::CreateView(CWnd* pParent, CCreateContext* pContext)
{
    DWORD dwStyle = AFX_WS_DEFAULT_VIEW;
    // dwStyle &= ~WS_BORDER;
    // Create with the right size (wrong position)
    CRect rect(0,0,300,300);
    /** Note:> Upon this Create(...) WM_CREATE message is sent
        so OnCreate(..) will be called
        pContext != NULL then this will be added or registered
        to the document i.e. pContext->m_pCurrentDoc->AddView(this);
        this attaches this view to the current document
        this function also sets the view's document pointer
        to this document.
    */
    if (!Create(NULL, NULL, dwStyle,
        rect, pParent, AFX_IDW_PANE_FIRST, pContext))
    {
        TRACE0("Warning: couldn't create treeview pane!. \n");
        return FALSE;
    }
    return TRUE;
}
Step 2Add these two protected member pointer to your control bar class: 
class CMyBar : public CSizingControlBar
{
protected:
      CMyFormView* m_pFormView;
      CCreateContext* m_pContext;
//...
public:
      CMyBar(CCreateContext* pContext =NULL);
//...
};
Step 3Use this constructor for your control bar: 
CMyBar::CMyBar(CCreateContext* pContext /* =NULL*/ )
{
    m_pContext = pContext;
    CRuntimeClass* pFactory = RUNTIME_CLASS(CMyFormView);
    m_pFormView = (CMyFormView *)(pFactory->CreateObject() );
}
Step 4Add a  
BEGIN_MESSAGE_MAP(CMyBar, CControlBar)
    //{{AFX_MSG_MAP(CMyBar)
    ON_WM_CREATE()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
Step 5Add  
//////////////////////////////////////////////////////////////////////
// CMyBar message handlers
int CMyBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (baseCMyBar::OnCreate(lpCreateStruct) == -1)
        return -1;
   if (m_pFormView )
   {
        m_pFormView->CreateView(this, m_pContext);
   }
   return 0;
}
Step 6Finally in your frame window or your child frame window (if MDI) override the OnCreateClient(...) like this: 
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext*
pContext)
{
    // .....
    // Now create Control windows
    if(!CreateControlBars(pContext))
        return -1;      // fail to create
    return CMDIChildWnd::OnCreateClient(lpcs, pContext);
}
BOOL CChildFrame::CreateControlBars(CCreateContext* pContext)
{
    m_pwndDockBar = new CMyBar(pContext);
    if (!m_pwndDockBar->Create(_T("Resources"), this, CSize(80, 80),
        TRUE, 123))
    {
        TRACE0("Failed to create mybar\n");
        return FALSE;      // fail to create
    }
    return TRUE;
}
So that's it, it works and worked fine :) Copyright © 1998-2019 DataMekanix. All rights reserved.
 |  |  | 
|  |  |  | |