CodeGuru
Earthweb Search
Forums Wireless Jars Gamelan Developer.com
CodeGuru Navigation
Member Sign In
User ID:
Password:
Remember Me:
Forgot Password?
Not a member?
Click here for more information and to register.

Become a Marketplace Partner

jobs.internet.com

internet.commerce
Partners & Affiliates
















RSS Feeds

RSSAll

RSSVC++/C++

RSS.NET/C#

RSSVB

See more EarthWeb Network feeds

Home >> Visual C++ / C++ >> Miscellaneous >> Miscellaneous >> Titlebar


Insert your Logo between TitleBar and MenuBar (ala Real-Player)
Rating: none

Smile Seo (view profile)
February 1, 2000


(continued)



The Real-Player application inserts it's own Logo between the TitleBar and MenuBar (see image bove).
It was cool (now it's not that I know how to do it ). Do you want to insert your Logo like Real-Player does?
Then, Just follow me. :)

Here's how to create this very cool effect.

  1. Create Dialog-based Project (can be either SDI or MDI, but we're using a dialog-based app for this demo).
  2. Insert your Logo bitmap file to your project.
  3. To make room for drawing your Logo, insert a dummy menu item into your menu resource like 'menu for Image' at the first position on the menu.
  4. Implement the OnMeasureItem() method so that you can modify the menu width to make room for the Logo on the menu.
    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. Modify the OnInitDialog (assuming a dialog-based app here) to load your Logo bitmap file.
    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. Define a DrawLogo() method to paint the Logo as follows.
    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 the OnInitMenu() method and OnSystemMenu() method to protect Window draw line between TitleBar and MenuBar.
    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);
     }
    }
    
  6. Override the OnNcPaint() to paint your Logo
    void CRealDlg::OnNcPaint()
    {
     // Default is equal 'CDialog::OnNcPaint()' .. :)
     Default();
    
     // Important!!!
     DrawLogo();
    }
    

    The 8 steps shown here are all you need to do to achieve this very cool look! However, you might want to take this even further. For example, you might want to hide system icon. I would welcome anyone wanting to amend my article with that enhancement.
    Member of Ajou University Computer Club -
    C.C.

    Downloads

    Download demo project - 48 Kb

    Tools:
    Add www.codeguru.com to your favorites
    Add www.codeguru.com to your browser search box
    IE 7 | Firefox 2.0 | Firefox 1.5.x
    Receive news via our XML/RSS feed







RATE THIS ARTICLE:   Excellent  Very Good  Average  Below Average  Poor  

(You must be signed in to rank an article. Not a member? Click here to register)

Latest Comments:
Solution to task bar button problem - Legacy CodeGuru (04/28/2001)
Cool!!! - Legacy CodeGuru (12/23/2000)
Cool stuff - Legacy CodeGuru (12/01/2000)
I like it, but the application's button on the task bar doesn't display properly. - Legacy CodeGuru (02/08/2000)

View All Comments
Add a Comment:
Title:
Comment:
Pre-Formatted: Check this if you want the text to display with the formatting as typed (good for source code)



(You must be signed in to comment on an article. Not a member? Click here to register)


JupiterOnlineMedia

internet.comearthweb.comDevx.commediabistro.comGraphics.com

Search:

Jupitermedia Corporation has two divisions: Jupiterimages and JupiterOnlineMedia

Jupitermedia Corporate Info


Legal Notices, Licensing, Reprints, & Permissions, Privacy Policy.

Advertise | Newsletters | Tech Jobs | Shopping | E-mail Offers