Internet Explorer Pager Control

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

Environment: VC6

Hi, I was 14 years old when I wrote this control (almost when it came up to IE5.5) when I saw it for first time I said to myself: “I will make my own” because:

  1. I like it
  2. I haven’t been able to find it.

That is the story of the control.

How to Use:

1. Projects->Add to Project->Files->SpawnFrameWnd.h/.cpp;IEPagerCtrl.h/.cpp;MenuSpawn.h/.cpp

2. MainFrm.h changes:

#include "IEPagerCtrl.h"
#include "SpawnFrameWnd.h"
----------------------------------------------------
//General message map functions
protected:
//AFX_MSG(CMainFrame)
//add this:
  afx_msg void OnArrow();
-----------------------------------------------------
  • Replace “CFrameWnd” with “CSpawnFrameWnd”
  • Replace “CToolBar m_wndToolBar” with “CIEPagerCtrl m_wndToolBar”

3. View->Resource Symbols->New->Name: ID_ARROW -> OK

4. MainFrm.cpp changes:

BEGIN _MESSAGE_MAP(........)
  ON_COMMAND(ID_ARROW, OnArrow)
  .
  .
  .
  .
  .

5. Replace “CFrameWnd” with “CSpawnFrameWnd”(everywhere, try with
replace action from the edit menu and replace all)

6. Add message handler to WM_SIZE, and add this code to the message.
Replace the OnSize with that:

void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
  if ( nType == SIZE_MINIMIZED )
  {
     cx1 = cx;cy1 = cy;
  }
  else
  if ( nType == SIZE_RESTORED && cx1 != 0 && cy1 != 0)
  {
     m_wndToolBar.SetSize(cx1);
  }

  m_wndToolBar.SetSize(cx);
  Invalidate();
  CSpawnFrameWnd::OnSize(nType, cx, cy);
}

and then add that before it: “int cx1 = 0,cy1 = 0;” as global variables.

7. Add this source code to the MainFrm.cpp

void CMainFrame::OnArrow()
{
  HMENU lMenu;
  CPoint pPoint;
  lMenu = ::CreatePopupMenu();
  if ( lMenu != NULL )
  {
    BUTTONSINFO butInfo[100];
    int nButtons =
          m_wndToolBar.GetHiddenButtonsInfo ( butInfo );
    for ( int i = 0; i < nButtons; i++ )
    {
      if ( butInfo[i].nStyle == TBSTYLE_SEP &&
        i == 0 ) {}
      else
        ::AppendMenu(lMenu, MF_ENABLED | MF_STRING ,
                     butInfo[i].nID,
                     butInfo[i].strToolTip );
    }
    CMenu *pMenu;
    pMenu = pMenu->FromHandle ( lMenu );
    CRect rect;
    m_wndToolBar.GetToolBarCtrl().GetRect(ID_ARROW , &rect);
    m_wndToolBar.ClientToScreen(&rect);
    m_wndToolBar.GetToolBarCtrl().PressButton( ID_ARROW );
    pMenu->TrackPopupMenu ( TPM_LEFTBUTTON,
                            rect.left,
                            rect.bottom,
                            this,
                            NULL );
    m_wndToolBar.GetToolBarCtrl().PressButton( ID_ARROW,
                                               FALSE );
  }
  else
    TRACE0("ERROR: lMenu = NULL");
}

8. Add this source code to the CMainFrame construction:

cSpawn.LoadToolBarResource( IDR_MAINFRAME );

9. Add the bitmaps IDB_ARROW and IDB_MENUCHK

That’s it!!!

Special thanks for the Spawn class – it gives me the ability of settings bitmaps for the Menus!!! I hope you like what I did!

Downloads

Download Demo Project – 59.9 Kb

Download Source Code – 10.5 Kb

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read