PageCounter Object for ScrollViews

Environment: The demo project was created with VC++ 6.0 SP1

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...

HOW TO USE

To use the ScrollViewPageCounter-Object you have to perform the following steps:

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 SBCode, 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.
Now compile and enjoy...

Download demo project - 33 KB

Download source - 3 KB

Date Last Updated: April 16, 1999



Comments

  • nPos only goes up to 32K

    Posted by wadigzon on 03/04/2004 10:00pm

    you've gotta use something like these in order to handle positions beyond 32K at ::OnVScroll(...) function.
    
    SCROLLINFO si;
    ZeroMemory(&si, sizeof(SCROLLINFO));
    si.cbSize = sizeof(SCROLLINFO);
    // Call GetScrollInfo to get current tracking 
    // position in si.nTrackPos
    if (!GetScrollInfo(SB_VERT, &si) )
    {
     return ; // GetScrollInfo failed
    }
    
    // this is the Page number
    UINT uiPageNumber = (UINT)(si.nTrackPos/10)+1;

    Reply
  • Thank you.

    Posted by Legacy on 12/08/2003 12:00am

    Originally posted by: NANA

    Great. This is exactly I was looking for. I had to integrate this to CListCtrl and it works great. Thank you.

    Reply
  • It looks nicer like this:

    Posted by Legacy on 06/21/1999 12:00am

    Originally posted by: Bruno Vais

    I think it looks nicer if the yellow thing moves aside the mouse. So delete the "s_bFirstCallDuringScrolling" member.
    Also, during scrolling the main view loses focus (of course). To avoid showing that dumb grey caption, at the end of your "DisplayPageNumber" function call
    "AfxGetMainWnd()->SendMessage(WM_NCACTIVATE,TRUE,0);".

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • IBM Worklight is a mobile application development platform that lets you extend your business to mobile devices. It is designed to provide an open, comprehensive platform to build, run and manage HTML5, hybrid and native mobile apps.

  • Companies must routinely transfer files and share data to run their business, work with partners, and speed operations. However, many find the traditional approach to file transfer lacks necessary security, is too complex and difficult to manage, does not support the levels of automation needed, and breaks down when addressing the file transfer requirements of new areas like Big Data analytics and mobile applications. This QuinStreet SmartSelect discusses how the changing business environment is making the use …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds