dcsimg

Intellimouse panning 2 (A universal Auto-Panning solution)

WEBINAR:
On-Demand

Desktop-as-a-Service Designed for Any Cloud ? Nutanix Frame


This article improves on the code submitted by Umut Alev, Auto-Panning Windows.
This article also uses some code submitted by Lutz Kretzschmar, Intellimouse panning.
This article integrates some code submitted by Russel Freeman, Auto-Panning Windows 2.

How it looks like

Improvements made to original version

  • Modified behavior and look to match IE4.
  • Added continous subpixel scrolling adapted from Lutz.
  • Modified the speed calculation to use a faster acceleration when more than 42 pixel away from start region.
  • Added support for lots of Controls and Views
  • Added style flags to customize behavior
    • MFX_WHEELWNDSTYLE_ONEDIRECTION
      No diagonal panning.
    • MFX_WHEELWNDSTYLE_UPDOWNONLY/MFX_WHEELWNDSTYLE_LEFTRIGHTONLY
      Limit panning to either UP/DOWN or LEFT/RIGHT.
    • MFX_WHEELWNDSTYLE_NOSUBPIXELSCROLLING
      No continous subpixel scrolling.
  • Moved the Resources to a RecourceTemplate for a better handling.
  • Nearly every parameter is customizable through "CAutoPanParameters"-classes.
    • Provide a own Origin-Bitmap
    • Use your own Cursors
    • Directly scroll the window with your own functions
    • Or just replace the width of one scrolling-step...
  • Of course the code does compile without any Level 4 warning.

Currently supportet Views and Controls

  • CEditView
  • CFormView
  • CListView (all modes)
  • CRichEditView
  • CScrollView
  • CTreeView
  • ComboBox (different look&feel)
  • Edit
  • ListBox
  • ListCtrl (all modes)
  • SpinButton (different look&feel)
  • TreeCtrl

Using in a View - with macros


	void CAutoPanView::OnMButtonDown(UINT nFlags, CPoint point) 
	{
		CWheelWnd_OnMButtonDown(CScrollView);
	}
 

Using in a View - without macros


	void CAutoPanView::OnMButtonDown(UINT nFlags, CPoint point) 
	{
		BOOL bCtl = GetKeyState(VK_CONTROL) & 0x8000;
		if(!bCtl && nFlags == MK_MBUTTON)
		{
			MfxTrackAutoPan(this);
		}
		else
		{
			CScrollView::OnMButtonDown(nFlags, point);
		}
	}
 

Using in a CDialog - with macros


	void CAutopanDialog::OnMButtonDown(UINT nFlags, CPoint point) 
	{
		CWheelWnd_OnMButtonDown(CDialog);
	}

	BOOL CAutopanDialog::PreTranslateMessage(MSG* pMsg) 
	{
		CWheelWnd_PreTranslateMessage(CDialog);
	}
 

Using in a CDialog - without macros


	void CAutopanDialog::OnMButtonDown(UINT nFlags, CPoint point) 
	{
		BOOL bCtl = GetKeyState(VK_CONTROL) & 0x8000;
		if(!bCtl && nFlags == MK_MBUTTON)
		{
			CWnd* pWnd = WindowFromPoint(point);
			if (pWnd) MfxTrackAutoPan(pWnd);
			else CDialog::OnMButtonDown(nFlags, point);
		}
		else
		{
			CDialog::OnMButtonDown(nFlags, point);
		}
	}

	BOOL CAutopanDialog::PreTranslateMessage(MSG* pMsg) 
	{
		if (pMsg && pMsg->message==WM_MBUTTONDOWN)
		{
			OnMButtonDown(pMsg->wParam, CPoint(pMsg->pt));
			return TRUE;
		}
		else
		{
	 		return CDialog::PreTranslateMessage(pMsg);
		}
	}
 

Download source - 12KB

Download the three source files mfxWhlPan.h, mfxWhlPan.c and mfxWhlPan.inl and the new cursors in this ZIP file. You must download either Umats demo project - 38KB and replace the two files and the cursors - or use my extended demo project - 84KB. To have a quick look the executable - 63KB is also availible.

Last updated: 6 July 1998



Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date