164 lines
4.6 KiB
C++
Executable File
164 lines
4.6 KiB
C++
Executable File
/**********************************************************************
|
|
*<
|
|
FILE: mouseman.h
|
|
|
|
DESCRIPTION: Manages mouse input
|
|
|
|
CREATED BY: Rolf Berteig
|
|
|
|
HISTORY: created 18 October 1994
|
|
|
|
*> Copyright (c) 1994, All Rights Reserved.
|
|
**********************************************************************/
|
|
|
|
#ifndef __MOUSEMAN__
|
|
#define __MOUSEMAN__
|
|
|
|
#include "coreexp.h"
|
|
|
|
/* To create a mouse call back, derive a sub class of this
|
|
* class and redefine 'proc'
|
|
*/
|
|
|
|
class MouseManager;
|
|
|
|
class MouseCallBack : public BaseInterfaceServer {
|
|
MouseManager * mouseMan;
|
|
public:
|
|
virtual ~MouseCallBack() {}
|
|
|
|
CoreExport virtual int proc(
|
|
HWND hwnd,
|
|
int msg,
|
|
int point,
|
|
int flags,
|
|
IPoint2 m );
|
|
virtual void pan(IPoint2 offset) {}
|
|
virtual int override(int mode) { return mode; } // Return given mouse mode by default
|
|
void setMouseManager(MouseManager *mm) { mouseMan = mm; }
|
|
MouseManager *getMouseManager() { return mouseMan; }
|
|
|
|
// Transform Gizmo Interface
|
|
virtual BOOL SupportTransformGizmo() { return FALSE; }
|
|
virtual void DeactivateTransformGizmo() {}
|
|
// End of Transform Gizmo Interface
|
|
|
|
virtual BOOL SupportAutoGrid(){return FALSE;}
|
|
virtual BOOL TolerateOrthoMode(){return FALSE; }
|
|
};
|
|
|
|
|
|
// Messages to a mouse procedure and mouseModes.
|
|
//
|
|
#define MOUSE_ABORT 0
|
|
#define MOUSE_IDLE 0
|
|
#define MOUSE_POINT 1
|
|
#define MOUSE_MOVE 2
|
|
#define MOUSE_DBLCLICK 3
|
|
#define MOUSE_INIT 4
|
|
#define MOUSE_UNINIT 5
|
|
#define MOUSE_FREEMOVE 6
|
|
#define MOUSE_KEYBOARD 7
|
|
#define MOUSE_PROPCLICK 8
|
|
#define MOUSE_SNAPCLICK 9
|
|
|
|
// Drag modes.
|
|
#define CLICK_MODE_DEFAULT 0 // Returned by CreateMouseCallBack to indicate use of system mouse mode
|
|
#define CLICK_DRAG_CLICK 1
|
|
#define CLICK_MOVE_CLICK 2
|
|
#define CLICK_DOWN_POINT 3 // Point messages on mouse-down only
|
|
|
|
// Buttons
|
|
#define LEFT_BUTTON 0
|
|
#define MIDDLE_BUTTON 1
|
|
#define RIGHT_BUTTON 2
|
|
|
|
// Flags to mouse callback.
|
|
#define MOUSE_SHIFT (1<<0)
|
|
#define MOUSE_CTRL (1<<1)
|
|
#define MOUSE_ALT (1<<2)
|
|
#define MOUSE_LBUTTON (1<<3) // Left button is down
|
|
#define MOUSE_MBUTTON (1<<4) // Middle button is down
|
|
#define MOUSE_RBUTTON (1<<5) // Right button is down
|
|
|
|
// aszabo | Nov.14.2000
|
|
// Although this class is not supposed to be instanciated directly
|
|
// by 3rd party code, there's code in the Modifier samples that
|
|
// uses it directly rather then through MouseManager* Interface::GetMouseManager()
|
|
//
|
|
class MouseManager : public BaseInterfaceServer {
|
|
private:
|
|
// This is shared by all instances.
|
|
static int clickDragMode;
|
|
|
|
// These are local to each instance.
|
|
int mouseMode;
|
|
int curPoint;
|
|
int curButton;
|
|
MouseCallBack *TheMouseProc[3];
|
|
int numPoints[3];
|
|
int buttonState[3];
|
|
int mouseProcReplaced;
|
|
int inMouseProc;
|
|
#ifdef _OSNAP
|
|
UINT m_msg;
|
|
#endif
|
|
HWND captureWnd;
|
|
|
|
// This wonds a callback that plug-ins can register to get the raw
|
|
// windows messages for the mouse and keyboard for a viewport.
|
|
WNDPROC mpMouseWindProc;
|
|
|
|
public:
|
|
|
|
friend class MouseManagerStateInterface;
|
|
// Constructor/Destructor
|
|
CoreExport MouseManager();
|
|
CoreExport ~MouseManager();
|
|
|
|
CoreExport int SetMouseProc( MouseCallBack *mproc, int button, int numPoints=2 );
|
|
CoreExport int SetDragMode( int mode );
|
|
CoreExport int GetDragMode( );
|
|
CoreExport int SetNumPoints( int numPoints, int button );
|
|
CoreExport int ButtonFlags();
|
|
CoreExport void Pan(IPoint2 p);
|
|
CoreExport LRESULT CALLBACK MouseWinProc(
|
|
HWND hwnd,
|
|
UINT message,
|
|
WPARAM wParam,
|
|
LPARAM lParam );
|
|
|
|
// RB 4-3-96: Resets back to the MOUSE_IDLE state
|
|
CoreExport void Reset();
|
|
int GetMouseMode() {return mouseMode;}
|
|
#ifdef _OSNAP
|
|
UINT GetMouseMsg() {return m_msg;}
|
|
int GetMousePoint() {return curPoint;}
|
|
#endif
|
|
|
|
CoreExport void SetCapture(HWND hWnd);
|
|
CoreExport HWND HasCapture();
|
|
CoreExport void ReleaseCapture();
|
|
CoreExport void RestoreCapture();
|
|
|
|
CoreExport void SetMouseWindProcCallback(WNDPROC pMouseWindProc)
|
|
{ mpMouseWindProc = pMouseWindProc; }
|
|
// The following member been added
|
|
// in 3ds max 4.2. If your plugin utilizes this new
|
|
// mechanism, be sure that your clients are aware that they
|
|
// must run your plugin with 3ds max version 4.2 or higher.
|
|
WNDPROC GetMouseWindProcCallback() const
|
|
{ return mpMouseWindProc; }
|
|
// End of 3ds max 4.2 Extension
|
|
};
|
|
|
|
|
|
#define WM_MOUSEABORT (WM_USER + 7834)
|
|
|
|
// Indicates if ANY mouse proc is currently in the process of
|
|
// aborting a mouse proc.
|
|
CoreExport BOOL GetInMouseAbort();
|
|
|
|
|
|
#endif // __MOUSEMAN__
|