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:
- I like it
- 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