Click here to Skip to main content
Licence 
First Posted 16 Jan 2000
Views 146,895
Bookmarked 63 times

Insert your Logo between caption bar and menu bar

By | 16 Jan 2000 | Article
Give your apps a unique look by adding a logo to your menu.

Introduction

The Real-Player program inserts its logo between the caption bar and menu bar. If you ever wanted to do this, then just follow me. :)

  1. Create a dialog based project ( need not care whether SDI or MDI )

    Project name : Fake Real Player.

  2. Insert your Logo bitmap file in your project.

    Logo name : IDB_LOGO

  3. To make room for drawing your logo, insert a temporary menu item in your default menu resource like 'menu for Image' at the first position.

    resource ID : IDM_IMAGE, no popup menu)

  4. Enlarge your IDM_IMAGE menu width to make room for logo in the OnMeasureItem() method:
    void CFakeRealDlg::OnMeasureItem(int nIDCtl, 
           LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
    {
        if (lpMeasureItemStruct->CtlType == ODT_MENU)
        {
            if (lpMeasureItemStruct->itemID == IDM_IMAGE)
                lpMeasureItemStruct->itemWidth = 
                                  m_rectLogo.Width() + 5;
        }
        
        CDialog::OnMeasureItem(nIDCtl, 
                             lpMeasureItemStruct);
    }
  5. Load your Logo bitmap file in your OnInitDialog() method.
    m_hBmp = (HBITMAP)LoadImage(AfxGetInstanceHandle(), 
               MAKEINTRESOURCE(IDB_LOGO), IMAGE_BITMAP, 
               0, 0, LR_CREATEDIBSECTION);
    BITMAP bm;
    GetObject(m_hBmp, sizeof(bm), &bm);    
    
    m_rectLogo.left = 15;
    m_rectLogo.right = 15 + bm.bmWidth;
    m_rectLogo.top = 2 ;
    m_rectLogo.bottom = 2 + bm.bmHeight;
  6. Make a DrawLogo() method to paint your Logo Bitmap.
    void CFakeRealDlg::DrawLogo()
    {
        CDC* pdc= GetWindowDC();
    
        CDC memdc;    
        memdc.CreateCompatibleDC(pdc);    
        memdc.SelectObject(m_hBmp);    
        pdc->BitBlt(15, 2, 
            m_rectLogo.Width(), 
            m_rectLogo.Height(), 
            &memdc, 0, 0, SRCCOPY);    
    
        ReleaseDC(pdc);    
    }
  7. Override your OnInitMenu() method and OnSystemMenu() to protect Window draw line between the caption bar and the menu bar.
    void CFakeRealDlg::OnInitMenu(CMenu* pMenu) 
    {
        CDialog::OnInitMenu(pMenu);
    
        // Important!!    
        DrawLogo();
    }
    
    void CFakeRealDlg::OnSysCommand(UINT nID, 
                                 LPARAM lParam)
    {
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
            CAboutDlg dlgAbout;
            dlgAbout.DoModal();
        }
        else
        {
            // Important!!!
            DrawLogo();
    
            CDialog::OnSysCommand(nID, lParam);
        }
    }
  8. Override your OnNcPaint() to paint your Logo whenever FakeReal is shown.
    void CRealDlg::OnNcPaint() 
    {
        // Default is equal 
        // 'CDialog::OnNcPaint()' .. :)
        Default();
    
        // Important!!!
        DrawLogo();
    }

Steps 1~8 show you what you must do, but you may want to perfect this sample. For example, you may want to add an owner-draw caption to hide the system icon. If you upgrade this sample, I'll be very happy. Have a nice day!!!

Member of Ajou University Computer Club - C.C.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Wooseok Seo

Software Developer (Senior)

Korea (Republic Of) Korea (Republic Of)

Member

Woo Seok Seo have been a Microsoft MVP for 7 years and have translated several books into Korean. Author of C# Programming for Beginner (DevPress, 2001), he is interested in Debugging techniques and .NET technology. Get in touch with Woo Seok Seo at wooseok.seo@gmail.com

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralWindows VISTA 64 bit issue PinmemberNeptunex0:03 10 Jun '07  
GeneralRe: Windows VISTA 64 bit issue PinmemberThe Dogcow Farmer11:42 2 Oct '08  
GeneralOn the other hand.... PinmemberGuyLeckyT3:58 10 Jun '05  
GeneralSDI Pinmemberfouadfana2:41 21 Apr '04  
Generallogo doesn't always appear Pinsussseeking answer19:08 7 Sep '03  
GeneralDC not Delete In DrawLogo() PinmemberAnonymous15:48 19 Mar '02  
GeneralPut the icon in a different place PinmemberThe Eclypse8:28 21 Oct '01  
Generalthe line between titlebar and menubar in SDI after modifying SysMenu Pinmemberrk323:52 18 Jun '01  
GeneralAdding A bitmap to a popup menu Pinsussguy4:59 24 Aug '00  
Generalyou can find resource at PinsussSmile Seo13:30 24 Aug '00  
GeneralRe: you can find resource at Pinsussguy22:13 28 Aug '00  
GeneralRe: you can find resource at PinsussSmoogle16:49 28 Oct '00  
GeneralGreat, but... PinsussAlan16:26 17 Jul '00  
Generalvery easy, make it on SDI and MDI project!!! PinsussElton LAU16:47 10 Jul '00  
GeneralThanks.. PinsussSmile Seo18:06 10 Jul '00  
GeneralRe: very easy, make it on SDI and MDI project!!! PinmemberMatt Philmon8:53 9 Nov '00  
GeneralI have succeeded to make this work on a SDI Project PinsussAdun5:40 4 Jul '00  
GeneralThanks Adun.. PinsussSmile Seo7:52 4 Jul '00  
GeneralRe: I have succeeded to make this work on a SDI Project Pinmemberangel_20:55 10 Jan '02  
GeneralRe: I have succeeded to make this work on a SDI Project PinmemberJanapriya5:00 28 Mar '04  
QuestionI can't get the project to work for an SDI application? PinsussErich J. Ruth12:22 8 Jun '00  
GeneralSDI Menu, not dialog based. PinsussMark Janveaux8:37 11 Feb '00  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120517.1 | Last Updated 17 Jan 2000
Article Copyright 2000 by Wooseok Seo
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid