You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
322 lines
10 KiB
C++
322 lines
10 KiB
C++
// XTPMouseManager.h : interface for the CXTPMouseManager class.
|
|
//
|
|
// This file is a part of the XTREME COMMANDBARS MFC class library.
|
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
#if !defined(__XTPMOUSEMANAGER_H__)
|
|
#define __XTPMOUSEMANAGER_H__
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
class CXTPCommandBar;
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// CXTPMouseManager is standalone class. It used in CommandBars to manage mouse.
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPMouseManager : public CNoTrackObject
|
|
{
|
|
friend class CXTPMouseManager* XTPMouseManager();
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CXTPMouseManager object
|
|
//-----------------------------------------------------------------------
|
|
CXTPMouseManager();
|
|
|
|
public:
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Array of the tracking bars.
|
|
//-----------------------------------------------------------------------
|
|
class _XTP_EXT_CLASS CTrackArray : public CArray<CXTPCommandBar*, CXTPCommandBar*>
|
|
{
|
|
public:
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Find position of specified commandbar.
|
|
// Parameters:
|
|
// pCommandBar - CommandBar to find
|
|
// Returns:
|
|
// Position of command bar in list; -1 if not found.
|
|
//-----------------------------------------------------------------------
|
|
int Find(const CXTPCommandBar* pCommandBar) const
|
|
{
|
|
for (int i = 0; i < GetSize(); i++)
|
|
{
|
|
if (pCommandBar == GetAt(i))
|
|
return i;
|
|
}
|
|
return -1;
|
|
}
|
|
};
|
|
|
|
private:
|
|
class _XTP_EXT_CLASS CTrustedArray : public CArray<HWND, HWND>
|
|
{
|
|
public:
|
|
int Find(const HWND hWnd) const
|
|
{
|
|
for (int i = 0; i < GetSize(); i++)
|
|
{
|
|
if (hWnd == GetAt(i))
|
|
return i;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
void Remove(HWND hWnd)
|
|
{
|
|
int i = Find(hWnd);
|
|
if (i != -1) RemoveAt(i);
|
|
}
|
|
};
|
|
|
|
public:
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Destroys a CXTPMouseManager object, handles cleanup and deallocation.
|
|
//-----------------------------------------------------------------------
|
|
~CXTPMouseManager();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Adds a tracking bar.
|
|
// Parameters:
|
|
// pTrack - Points to a CXTPCommandBar object
|
|
// bCaptureMouse - TRUE to capture the mouse.
|
|
//-----------------------------------------------------------------------
|
|
void SetTrack(CXTPCommandBar* pTrack, BOOL bCaptureMouse = TRUE);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Removes the tracking bar.
|
|
// Parameters:
|
|
// pTrack - Points to a CXTPCommandBar object
|
|
//-----------------------------------------------------------------------
|
|
void RemoveTrack(CXTPCommandBar* pTrack);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Removes all tracking bars.
|
|
//-----------------------------------------------------------------------
|
|
void SendTrackLost();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Hooks window for the mouse leave event.
|
|
// Parameters:
|
|
// hwnd - Window handle.
|
|
//-----------------------------------------------------------------------
|
|
void TrackMouseLeave(HWND hwnd);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Checks if the command bar is tracked.
|
|
// Parameters:
|
|
// pItem - Points to a CXTPCommandBar object
|
|
// Returns:
|
|
// TRUE if successful; otherwise returns FALSE
|
|
//-----------------------------------------------------------------------
|
|
BOOL IsTrackedLock(const CXTPCommandBar* pItem = NULL);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Sets the selected command bar.
|
|
// Parameters:
|
|
// pSelected - Points to a CXTPCommandBar object
|
|
//-----------------------------------------------------------------------
|
|
void SetSelected(CXTPCommandBar* pSelected);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Removes the selected command bar.
|
|
// Parameters:
|
|
// pSelected - Points to a CXTPCommandBar object
|
|
//-----------------------------------------------------------------------
|
|
void RemoveSelected(CXTPCommandBar* pSelected);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Captures the mouse cursor.
|
|
//-----------------------------------------------------------------------
|
|
void LockMouseMove();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Unlocks the mouse cursor.
|
|
//-----------------------------------------------------------------------
|
|
void UnlockMouseMove();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Checks if the mouse cursor locked.
|
|
// Returns:
|
|
// TRUE if locked; otherwise returns FALSE
|
|
//-----------------------------------------------------------------------
|
|
BOOL IsMouseLocked() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Check if the command bar needs to be expanded
|
|
// Returns:
|
|
// TRUE if successful; otherwise returns FALSE
|
|
//-----------------------------------------------------------------------
|
|
BOOL IsForceExpanded() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Sets expanded state.
|
|
// Parameters:
|
|
// bForceExpanded - TRUE to expand bars.
|
|
//-----------------------------------------------------------------------
|
|
void SetForceExpanded(BOOL bForceExpanded);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Adds a window to the trusted window list.
|
|
// Parameters:
|
|
// hWnd - Window handle.
|
|
//-----------------------------------------------------------------------
|
|
void AddTrustedWindow(HWND hWnd);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Removes a window from the trusted window list.
|
|
// Parameters:
|
|
// hWnd - Window handle.
|
|
//-----------------------------------------------------------------------
|
|
void RemoveTrustedWindow(HWND hWnd);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This method called to determine if top parent window is active.
|
|
// Parameters:
|
|
// hWnd - Window handle.
|
|
// Returns:
|
|
// TRUE if parent window is active; FALSE otherwise.
|
|
//-----------------------------------------------------------------------
|
|
static BOOL AFX_CDECL IsTopParentActive(HWND hWnd);
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Summary:
|
|
// This method is called to disable one WM_RBUTTONUP message.
|
|
//-------------------------------------------------------------------------
|
|
void IgnoreLButtonUp();
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Summary: Refreshes the mouse cursor.
|
|
//-------------------------------------------------------------------------
|
|
static void AFX_CDECL RefreshCursor();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Input: point - Specifies the point to be tested.
|
|
// Summary: This method determines where a point lies in a specified item.
|
|
// Returns: A pointer to a CXTPCommandBar item that occupies the specified
|
|
// point or NULL if no item occupies the point.
|
|
//-----------------------------------------------------------------------
|
|
CXTPCommandBar* HitTest(POINT point) const;
|
|
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
BOOL PreviewTackLost(CXTPCommandBar* pContextMenu, MSG* msg) const;
|
|
void LockTrackRecurse(BOOL bLockTrack);
|
|
void SendTrackLostRecurse();
|
|
BOOL IsTrackedLockRecurse() const;
|
|
CTrackArray& GetTrackArray();
|
|
CXTPCommandBar* GetTopTracked() const;
|
|
BOOL IsRelated(HWND hWndParent, HWND hWnd) const;
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
private:
|
|
|
|
void DeliverMessage(CXTPCommandBar* pCapture, WPARAM wParam, POINT pt);
|
|
BOOL PreTranslateMouseEvents(WPARAM wParam, POINT point);
|
|
void SetupHook(BOOL);
|
|
|
|
static void CALLBACK TrackMouseTimerProc (HWND hWnd, UINT /*uMsg*/, UINT idEvent, DWORD /*dwTime*/);
|
|
static LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
|
|
|
|
private:
|
|
int m_nLock;
|
|
CTrackArray m_arrTracked;
|
|
|
|
static CThreadLocal<CXTPMouseManager> _xtpMouseThreadState;
|
|
|
|
HHOOK m_hHookMouse;
|
|
CXTPCommandBar* m_pSelected;
|
|
HWND m_hwndLeave;
|
|
BOOL m_bForceExpanded;
|
|
CTrustedArray m_arrTrusted;
|
|
BOOL m_bIgnoreLButtonUp;
|
|
|
|
#ifdef _AFXDLL
|
|
AFX_MODULE_STATE* m_pModuleState;
|
|
#endif
|
|
|
|
friend class CXTPCustomizeSheet;
|
|
friend class CXTPCommandBars;
|
|
};
|
|
|
|
|
|
AFX_INLINE CXTPMouseManager* XTPMouseManager() {
|
|
return CXTPMouseManager::_xtpMouseThreadState.GetData();
|
|
}
|
|
|
|
AFX_INLINE CXTPMouseManager::CTrackArray& CXTPMouseManager::GetTrackArray() {
|
|
return m_arrTracked;
|
|
}
|
|
|
|
AFX_INLINE void CXTPMouseManager::SetSelected(CXTPCommandBar* pSelected) {
|
|
m_pSelected = pSelected;
|
|
}
|
|
AFX_INLINE void CXTPMouseManager::RemoveSelected(CXTPCommandBar* pSelected){
|
|
if (m_pSelected == pSelected)
|
|
m_pSelected = NULL;
|
|
}
|
|
AFX_INLINE void CXTPMouseManager::LockMouseMove() {
|
|
m_nLock++;
|
|
}
|
|
AFX_INLINE void CXTPMouseManager::UnlockMouseMove() {
|
|
m_nLock--;
|
|
}
|
|
AFX_INLINE BOOL CXTPMouseManager::IsMouseLocked() const{
|
|
return m_nLock > 0;
|
|
}
|
|
|
|
AFX_INLINE BOOL CXTPMouseManager::IsForceExpanded() const {
|
|
return m_bForceExpanded;
|
|
}
|
|
AFX_INLINE void CXTPMouseManager::SetForceExpanded(BOOL bForceExpanded) {
|
|
m_bForceExpanded = bForceExpanded;
|
|
}
|
|
AFX_INLINE void CXTPMouseManager::IgnoreLButtonUp() {
|
|
m_bIgnoreLButtonUp = TRUE;
|
|
}
|
|
|
|
|
|
#endif //#if !defined(__XTPMOUSEMANAGER_H__)
|