When scrolling in a document that consists of quite a lot pages it might be helpful for
the user to get an information which page of the document would be displayed if he/she
would release to slider of the scrollbar at a certain position.
Microsoft Word has such a feature. It's a tooltip-like window that displays
the page number that corresponds to the current position of the slider during scrolling.
I implemented a class named CScrollViewPageCounter that displays such a page number in a window that looks like a tooltip-window. If you have a look at the source code you'll find out that it was quite easy to implement. The code itself is self-explanatory...
1. Add the files ScrollViewPageCounter.h and ScrollViewPageCounter.cpp to your project.
2. Add a new member m_pScrollViewPageCounter to your scroll view class.
CScrollViewPageCounter* m_pScrollViewPageCounter;Of course your have to include the corresponding header file here as well:
#include "ScrollViewPageCounter.h"
3. Create the page counter object in CYourScrollView::OnInitialUpdate()
BOOL CYourScrollView::PreCreateWindow(CREATESTRUCT& cs) { CScrollView::OnInitialUpdate(); // Instantiate the counter object m_pScrollViewPageCounter = new CScrollViewPageCounter( this ); }
4. Add a command handler for the message WM_VSCROLL:
void CYourScrollView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { if ( nSBCode == SB_THUMBTRACK ) { // calculate page number (insert your algorithm here) UINT uiPageNumber = (UINT) (nPos / 10) + 1; // display page number m_pScrollViewPageCounter->DisplayPageNumber( uiPageNumber ); } // when scrolling is finished we have to hide the page counter if ( nSBCode == SB_ENDSCROLL ) m_pScrollViewPageCounter->Reset(); CScrollView::OnVScroll(nSBCode, nPos, pScrollBar); }That's it.
The demo project was created with VC++ 6.0 SP1.
Date Posted: February 1, 1999