Auto-Panning Windows 2

This code provides a simple way of adding full AutoScroll capability to pretty much any window, I have provided a demo program which also incorporates the all of the code you need. I believe it works the same way as Internet Explorer, that is all of the behaviour I have seen from IE. The cursor changes in every direction just as it does in IE, it uses the pointers and origin bitmaps pretty much the same as IE, these are the cursors and bitmaps supplied with the Intellipoint SDK with slight modificatiosn to the bitmaps.

How to use it

OWnd is a DLL, I did it this way because it seemd the easiest way to use it without having to copy resource fiels etc all over the place, plus it really is a component that is shared amongst projects. Simply include the OWnd DLL project  in as a subproject of yours, include the OWndDLL.h file in your relevant source files and call StartPanning(...) in your OnMButtonDown message handler. That's it really.
Additionally you can respond to the registered message OWND_WINDOW_UPDATE if you want to perform extra scrolling, the registered message  is sent every time a scroll event is issued, your message handler should look something like this:
static const UINT uOriginWindowUpdateMessage = ::RegisterWindowMessage( OWND_WINDOW_UPDATE );

LRESULT CPanningWindowView::OnOriginWindowUpdate(WPARAM , LPARAM lParam) 
//
// Process the update message sent by the origin window.
// You only need to respond to this message if you want to do extra or different scrolling
{
    //
    // psizeDistance will contain the distance the cursor is from the origin. We then use
    // this to calculate the new scroll position and the amount to scroll our window.
    const CSize *psizeDistance = reinterpret_cast<const CSize *>( lParam );
#ifdef _DEBUG
    afxDump<<_T("CPanningWindowView::OnOriginWindowUpdatesize")<<*psizeDistance<<_T("\n");
#endif // _DEBUG
    //
    // Return 1 to signal to COriginWnd that you have handled the scrolling, return 0 if you
    // want COriginWnd to perform the scrolling.
    return 0;
}


The demo project shows all of this behaviour in the source file PanningWindowView.cpp.

This code imroves over the other examples posted to codeguru in the following areas:

  • Much closer emulation of IE behaviour, I have tried to do exactly as IE does.
  • More easily extended and altered, the other examples have way too many hardcoded values scattered throughout the code.
  • Compiles at level four warnings with warnings as errors, it has been linted and it has been built and tested in UNICODE
  • Less code.
Please let me know of any bugs, fixes or modifications.

Download demo project and source code - 42KB

Date Posted: 6/24/98
Posted by: Pat Laplante.



Comments

  • There are no comments yet. Be the first to comment!

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

Top White Papers and Webcasts

  • Live Event Date: December 11, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Market pressures to move more quickly and develop innovative applications are forcing organizations to rethink how they develop and release applications. The combination of public clouds and physical back-end infrastructures are a means to get applications out faster. However, these hybrid solutions complicate DevOps adoption, with application delivery pipelines that span across complex hybrid cloud and non-cloud environments. Check out this …

  • Due to internal controls and regulations, the amount of long term archival data is increasing every year. Since magnetic tape does not need to be periodically operated or connected to a power source, there will be no data loss because of performance degradation due to the drive actuator. Read this white paper to learn about a series of tests that determined magnetic tape is a reliable long-term storage solution for up to 30 years.

Most Popular Programming Stories

More for Developers

RSS Feeds