DevStudio style Dockable Menu Bar (does not require MSIE)


This article was contributed by MB.

Environment: VC5/6 win95/98

I'm looking for Visual C++ 5.0 style menu bar, but most of products require MSIE4 or a new comctrl32.dll(don't encourage me do update) . So I've made a class called CMenuBar which don't use any common controls.

To use CMenuBar in a MFC application, you have to perform the following steps.

1. #include "MenuBar.h" in either StdAfx.h or MainFrm.h

2. Add CMenuBar m_wndMenuBar; to CMainFrame class

3. Add a following code to CMainFrame::OnCreate

    if (!m_wndMenuBar.CreateEx(this, WS_CHILD | WS_VISIBLE | CBRS_TOP
        | CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_RAISEDBORDER) ||
        !m_wndMenuBar.LoadMenuBar(IDR_MAINFRAME))
    {
        TRACE0("Failed to create menubar\n");
        return -1;      // failed to create
    }
4. Add a following code to CMainFrame::OnCreate after CStatusBar::Create and before CToolBar::EnableDocking and any other CMainFrame::EnableDocking.
    m_wndMenuBar.EnableDockingEx(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndMenuBar);
5. Overide PreTranslateMessage in CMainFrame with a following code
    BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
    {
        if (m_wndMenuBar.TranslateFrameMessage(pMsg))
            return TRUE;

        return CFrameWnd::PreTranslateMessage(pMsg);
    }
Update History :
July 01, 1999
    First submitted to CodeGuru.
July 11, 1999
    Posted on CodeGuru site.
    Fatal hanged up problem fixed.
        (I guess CMenuBar::SizeMenuBar had entered endless loop).
    Support a MDI application.
    Crash in debug mode fixed by Mark Gentry.Thanks!
    Gripper graphics changed a little.
    Rewrite most of codes.
    Use the latest CSubclassWnd.
October 06, 1999 version 2.08
    Cope with MFC6.(gripper graphics is changed.)
    Cope with CReBar easily.
    Insist own dock line by CMenuBar::EnableDockingEx.
November 13, 1999 version 2.10
    CMenuDockBar fixed
December 02, 1999 version 2.12
    Support OLE menu

Known Problems :
    Can't determine a direction of popupmenu as MSIE5 can't.
        (please check out _ComputeMenuTrackPoint)
    OLE menu support is not enough, but I can't add 5000 lines for perfect support.

Special Thanks to :
    Paul DiLascia an MSJ columnist
    This article is based on his *PixieLib*.

Downloads

Download demo project - 58 Kb
Download source - 26 Kb