trackcontrol.h

来自「程序开发中写log用的实现代码, C语言代码, 可以不用修改再C++或MFC中使」· C头文件 代码 · 共 84 行

H
84
字号
#if !defined(AFX_TRACKCONTROL_H__06A38C29_E713_4289_97B5_EC17CA3DAED0__INCLUDED_)
#define AFX_TRACKCONTROL_H__06A38C29_E713_4289_97B5_EC17CA3DAED0__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// TrackControl.h : header file
// Modified by WangDongdong

template<class BaseClass>
/////////////////////////////////////////////////////////////////////////////
// CTrackControl window

class CTrackControl : public BaseClass
{
// Construction
public:
	CTrackControl()
	{
		m_bTracking = FALSE;
        m_bHover    = FALSE;
	}
	virtual ~CTrackControl() {}
	BOOLEAN IsHover()
	{
		return m_bHover;
	}
	
// Implementation
public:
	virtual void OnHoverEnter() = 0;
	virtual void OnHoverLeave() = 0;
	
	// Generated message map functions
protected:
	virtual LRESULT WindowProc(UINT nMessage, WPARAM wParam, LPARAM lParam)
	{
		LRESULT nResult = BaseClass::WindowProc(nMessage, wParam, lParam);

		switch(nMessage)
		{
		case WM_MOUSEMOVE:
			{
				if (!m_bTracking)
				{
					TRACKMOUSEEVENT Tme;
					Tme.cbSize      = sizeof(Tme);
					Tme.hwndTrack   = GetSafeHwnd();
					Tme.dwFlags     = TME_LEAVE | TME_HOVER;
					Tme.dwHoverTime = 1;
					if (_TrackMouseEvent(&Tme))
                    {
						m_bTracking = TRUE;
                    }
				}
				break;				
			}

		case WM_MOUSEHOVER:
			m_bHover = TRUE;
			OnHoverEnter();
			break;

		case WM_MOUSELEAVE:
			m_bTracking = FALSE;
            m_bHover    = FALSE;
			OnHoverLeave();
			break;
		}
		return nResult;
	}

private:
	BOOLEAN m_bTracking;
	BOOLEAN m_bHover;
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_TRACKCONTROL_H__06A38C29_E713_4289_97B5_EC17CA3DAED0__INCLUDED_)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?