?? recttrackerex.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 + -