User ID:
Password:
Remember Me:
Forgot Password?
Not a member?
Click here for more information and to register.

    Intellimouse panning 2 (A universal Auto-Panning solution)



    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


    IT Offers


    Top Authors