CTagLayoutUI::CTagLayoutUI()
{
ZeroMemory(&m_rtEmptyPlace,sizeof(m_rtEmptyPlace));
}
CTagMoveUI::CTagMoveUI()
:m_bIsLButtonDowning(false)
,m_nLButtonDownCX(0)
,m_nLButtonDownCY(0)
,m_nStepLen(1)
,m_bIsMoving(false)
,m_isDragged(false)
,m_nEndPos(-1)
{
ZeroMemory(&m_rcTargetRect,sizeof(m_rcTargetRect));
ZeroMemory(&m_rcOldRect,sizeof(m_rcOldRect));
ZeroMemory(&m_rcCurrentRect,sizeof(m_rcCurrentRect));
}
void CTagMoveUI::DoEvent( TEventUI& event )
{
if( event.Type == UIEVENT_BUTTONDOWN )
{
if( ::PtInRect(&m_rcItem, event.ptMouse) && IsEnabled() )
{
if(m_bIsMoving == false)
{
m_bIsLButtonDowning = true;
m_nLButtonDownCX = event.ptMouse.x - m_rcItem.left;
m_nLButtonDownCY = event.ptMouse.y - m_rcItem.top;
CTagLayoutUI* pParentContainer = static_cast<CTagLayoutUI*>(GetParent());
if (pParentContainer)
{
pParentContainer->SetEmptyPlaceRect(m_rcItem);
pParentContainer->IntItemsOldRect(this);
}
}
}
return ;
}
if( event.Type == UIEVENT_MOUSEMOVE )
{
if (m_bIsLButtonDowning)
{
CTagLayoutUI* pParentContainer = static_cast<CTagLayoutUI*>(GetParent());
if (pParentContainer)
{
RECT rtParent = pParentContainer->GetPos();
RECT rect = m_rcItem;
rect.left = event.ptMouse.x - m_nLButtonDownCX;
rect.right = rect.left + (m_rcItem.right - m_rcItem.left);
//超出rtParent的范围
if(rect.left < (rtParent.left - (m_rcItem.right - m_rcItem.left)/3)
|| rect.right > rtParent.right + (m_rcItem.right - m_rcItem.left)/3)
return;
SetPos(rect);
int nCount = pParentContainer->GetCount() - 1;
for (int i=0; i< nCount; i++)
{
CTagMoveUI* pNext = static_cast<CTagMoveUI*>(
pParentContainer->GetItemAt(i));
if (!pNext) continue;
RECT rt = pNext->GetOldRect();
int mid1 = rt.left + (rt.right-rt.left)/2;
int mid2 = m_rcItem.left + (m_rcItem.right-m_rcItem.left)/2;
if((m_rcItem.right > mid1 && mid2 < mid1)
||(m_rcItem.left < mid1 && mid2 > mid1))
{
RECT oldEmptyRect = pParentContainer->GetEmptyPlaceRect();
RECT tempRect = oldEmptyRect;
SetOldRect(rt);
pNext->SetOldRect(oldEmptyRect);
pNext->SetTargetRect(tempRect);
pParentContainer->SetEmptyPlaceRect(rt);
Invalidate();
break;
}
}
}
}
else{
if( ::PtInRect(&m_rcItem, event.ptMouse) ) m_uButtonState |= UISTATE_PUSHED;
else m_uButtonState &= ~UISTATE_PUSHED;
}
return;
}
if( event.Type == UIEVENT_BUTTONUP )
{
if (m_bIsLButtonDowning)
{
m_bIsLButtonDowning = false;
CTagLayoutUI* pParentContainer = static_cast<CTagLayoutUI*>(GetParent());
if (pParentContainer)
{
int nCount = pParentContainer->GetCount();
for (int i=0; i < nCount; i++)
{
CTagMoveUI* pNext = static_cast<CTagMoveUI*>(
pParentContainer->GetItemAt(i));
if (!pNext) continue;
RECT rt = pNext->GetOldRect();
if (rt.right > m_rcItem.right)
{
m_nEndPos = i;
break;
}
}
}
if(m_rcItem.left != m_rcOldRect.left)
{
m_isDragged = true;
SetTargetRect(m_rcOldRect);
}
}
return;
}
if( event.Type == UIEVENT_TIMER && event.wParam == ID_MOVE_TIMER )
{
m_rcCurrentRect.left += m_nStepLen;
m_rcCurrentRect.right += m_nStepLen;
if ((m_nStepLen < 0 && m_rcCurrentRect.left <= m_rcTargetRect.left)
||(m_nStepLen > 0 && m_rcCurrentRect.left >= m_rcTargetRect.left))
{
m_rcCurrentRect = m_rcTargetRect;
ZeroMemory(&m_rcTargetRect,sizeof(m_rcTargetRect));
m_pManager->KillTimer(this, ID_MOVE_TIMER);
m_bIsMoving = false;
if(m_isDragged && m_nEndPos != -1)
{
CTagLayoutUI* pParentContainer = static_cast<CTagLayoutUI*>(GetParent());
if (pParentContainer)
pParentContainer->SetItemIndexNoRedraw(this, m_nEndPos);
m_isDragged = false;
m_nEndPos = -1;
}
}
SetPos(m_rcCurrentRect);
Invalidate();
return;
}
CHorizontalLayoutUI::DoEvent(event);
}
void CTagMoveUI::SetTargetRect( RECT rect )
{
//不需要移动
//if((m_bIsMoving == false) && (rect.left == m_rcItem.left))
// return;
//正在移动
m_bIsMoving = true;
if(rect.left == m_rcTargetRect.left)
return;
m_rcTargetRect = rect;
m_rcCurrentRect = m_rcItem;
int nStepLen = (m_rcTargetRect.left - m_rcCurrentRect.left)/10;
if (nStepLen == 0)
m_nStepLen = m_rcTargetRect.left - m_rcCurrentRect.left;
else
m_nStepLen = nStepLen;
m_pManager->SetTimer(this, ID_MOVE_TIMER, 30U);
}
RECT CTagMoveUI::GetTargetRect()
{
return m_rcTargetRect;
}
duilib_多标签_可移动标签_浏览器
4星 · 超过85%的资源 需积分: 31 194 浏览量
2012-12-05
12:00:16
上传
评论 2
收藏 1.35MB RAR 举报
ku625
- 粉丝: 1
- 资源: 4
最新资源
- 407000001.fasset
- J-20240402998-HTE-HTE-2947110DA-D3_整车运动控制器-电压渐变(缓升缓降)-检测报告-XS-汽车及零部件检测中心.pdf.crdownload
- Excel表格VBA-获取文件夹内所有文件路径.zip
- 文件移动.zip
- 反射源代码,源代码,源代码,源代码
- CAJViewer 9.0_x64-setup.exe
- servant C++语言框架rpc的源码实现 tools C++语言框架IDL工具的源码实现 util C++语言.7z
- 使用pyqt创建一个登录具有动态背景的登陆界面
- 实验名称 调幅波信号的解调
- 实验名称 振幅调制器(利用乘法器)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
前往页