⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 recttrackerex.cpp

📁 可以打开图片
💻 CPP
字号:
// RectTrackerEx.cpp : implementation file
//

#include "stdafx.h"
#include "Test.h"
#include "RectTrackerEx.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CRectTrackerEx

CRectTrackerEx::CRectTrackerEx()
{
	m_bLimit = FALSE;
	m_rcLimit.SetRect(0, 0, 100, 100);

	m_nMinWidth = 5;
	m_nMinHeight = 5;
}

CRectTrackerEx::~CRectTrackerEx()
{
}

/////////////////////////////////////////////////////////////////////////////
// CRectTrackerEx message handlers

void CRectTrackerEx::OnChangedRect(const CRect& rectOld)
{
	
}

void CRectTrackerEx::AdjustRect( int nHandle, LPRECT lpRect )
{

	NormalizeRect(lpRect);
	if (lpRect->right - lpRect->left < m_nMinWidth)
	{
		lpRect->right = lpRect->left + m_nMinWidth;
	}
	if (lpRect->bottom - lpRect->top < m_nMinHeight)
	{
		lpRect->bottom = lpRect->top + m_nMinHeight;
	}
	if (m_bLimit)
	{//限制拖动时不越过限制区域
		lpRect->left = (lpRect->left < m_rcLimit.left) ? m_rcLimit.left : lpRect->left;
		lpRect->right = (lpRect->right - m_nMinWidth < m_rcLimit.left) ? (m_rcLimit.left+m_nMinWidth) : lpRect->right;
		lpRect->left = (lpRect->left + m_nMinWidth > m_rcLimit.right) ? (m_rcLimit.right-m_nMinWidth) : lpRect->left;
		lpRect->right = (lpRect->right > m_rcLimit.right) ? m_rcLimit.right : lpRect->right;

		lpRect->top = (lpRect->top < m_rcLimit.top) ? m_rcLimit.top : lpRect->top;
		lpRect->bottom = (lpRect->bottom - m_nMinHeight < m_rcLimit.top) ? (m_rcLimit.top + m_nMinHeight) : lpRect->bottom;
		lpRect->top = (lpRect->top + m_nMinHeight > m_rcLimit.bottom) ? (m_rcLimit.bottom - m_nMinHeight) : lpRect->top;
		lpRect->bottom = (lpRect->bottom > m_rcLimit.bottom) ? m_rcLimit.bottom : lpRect->bottom;
	
	}	
}



void CRectTrackerEx::SetLimitRegion(RECT rcGegion)
{
	m_bLimit = TRUE;
	m_rcLimit = rcGegion;

}

void CRectTrackerEx::SetLimitRegion(POINT topLeft, POINT bottomRight)
{
	m_bLimit = TRUE;
	m_rcLimit.SetRect(topLeft, bottomRight);
}

void CRectTrackerEx::SetLimitRegion(int l, int t, int r, int b)
{
	m_bLimit = TRUE;
	m_rcLimit.SetRect(l, t, r, b);
}

void CRectTrackerEx::NormalizeRect(LPRECT lpRect)
{
	if (lpRect->left > lpRect->right)
	{
		long lTemp = lpRect->left;
		lpRect->left = lpRect->right;
		lpRect->right = lTemp;
	}

	if (lpRect->top > lpRect->bottom)
	{
		long lTemp = lpRect->top;
		lpRect->top = lpRect->bottom;
		lpRect->bottom = lTemp;
	}
}

BOOL CRectTrackerEx::SetMinInterval(int nHorInterval, int nVerInterval)
{
	if ((nHorInterval < 0) || (nVerInterval < 0))
	{
		return FALSE;
	}
	m_nMinWidth = nHorInterval;
	m_nMinHeight = nVerInterval;
	return TRUE;
}

⌨️ 快捷键说明

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