📄 anchor.cpp
字号:
#include "stdafx.h"
#include "anchor.h"
DONGAnchor::DONGAnchor()
{
IsInit = false;
}
DONGAnchor::~DONGAnchor()
{
m_AnchorInfo.RemoveAll();
IsInit = false;
}
void DONGAnchor::Init(CWnd *pParent)
{
RECT info;
pParent->GetClientRect(&info);
DONGAnchorCtrlInfo AnchorInfo;
AnchorInfo.pWnd = pParent;
AnchorInfo.Width = info.right-info.left;
AnchorInfo.Height = info.bottom - info.top;
m_AnchorInfo.Add(AnchorInfo);
IsInit = true;
}
bool DONGAnchor::Add(int ID, BYTE WhichSide)
{
if(WhichSide>15)return false;
DONGAnchorCtrlInfo AnchorInfo;
RECT WinInfo,DlgInfo;
AnchorInfo.pWnd = m_AnchorInfo[0].pWnd->GetDlgItem(ID);
if(!AnchorInfo.pWnd)return false;
AnchorInfo.WhichSide = WhichSide; //指定要锁定的边
AnchorInfo.pWnd->GetWindowRect(&WinInfo);
m_AnchorInfo[0].pWnd->GetClientRect(&DlgInfo);
m_AnchorInfo[0].pWnd->ClientToScreen(&DlgInfo);
AnchorInfo.Width = WinInfo.right-WinInfo.left;
AnchorInfo.Height = WinInfo.bottom-WinInfo.top;
AnchorInfo.Distance.left = WinInfo.left-DlgInfo.left;
AnchorInfo.Distance.right = DlgInfo.right-WinInfo.right;
AnchorInfo.Distance.top = WinInfo.top-DlgInfo.top;
AnchorInfo.Distance.bottom = DlgInfo.bottom-WinInfo.bottom;
AnchorInfo.point.x = (DlgInfo.right-DlgInfo.left)/2 - AnchorInfo.Distance.left;
AnchorInfo.point.y = (DlgInfo.bottom-DlgInfo.top)/2 - AnchorInfo.Distance.top;
m_AnchorInfo.Add(AnchorInfo);
return true;
}
bool DONGAnchor::Delete(int ID)
{
CWnd* p = m_AnchorInfo[0].pWnd->GetDlgItem(ID);
if(!p)return false;
for(int i=1;i!=m_AnchorInfo.GetSize();++i)
{
if(p == m_AnchorInfo[i].pWnd)
{
m_AnchorInfo.RemoveAt(i);
return true;
}
}
return false;
}
void DONGAnchor::Run(int cx, int cy)
{
if(!IsInit)return; //没有初始化则直接返回
if(!m_AnchorInfo[0].pWnd->IsWindowVisible())return;
m_DlgCurSize.cx = cx;
m_DlgCurSize.cy = cy;
LONG x,y,width,height;
for(int i=1;i!=m_AnchorInfo.GetSize();++i)
{
width = m_AnchorInfo[i].Width;
height = m_AnchorInfo[i].Height;
switch(m_AnchorInfo[i].WhichSide)
{
case DA_LEFT:
x = m_AnchorInfo[i].Distance.left;
y = m_DlgCurSize.cy /2 - m_AnchorInfo[i].point.y;
break;
case DA_RIGHT:
x = m_DlgCurSize.cx - m_AnchorInfo[i].Distance.right - m_AnchorInfo[i].Width;
y = m_DlgCurSize.cy /2 - m_AnchorInfo[i].point.y;
break;
case DA_TOP:
x = m_DlgCurSize.cx /2 - m_AnchorInfo[i].point.x;
y = m_AnchorInfo[i].Distance.top;
break;
case DA_BOTTOM:
x = m_DlgCurSize.cx /2 - m_AnchorInfo[i].point.x;
y = m_DlgCurSize.cy - m_AnchorInfo[i].Distance.bottom - m_AnchorInfo[i].Height;
break;
case DA_LEFT|DA_RIGHT:
x = m_AnchorInfo[i].Distance.left;
y = m_DlgCurSize.cy /2 - m_AnchorInfo[i].point.y;
m_AnchorInfo[i].Width += cx - m_AnchorInfo[0].Width;
width = m_AnchorInfo[i].Width;
break;
case DA_LEFT|DA_TOP:
continue;
break;
case DA_LEFT|DA_BOTTOM:
x = m_AnchorInfo[i].Distance.left;
y = m_DlgCurSize.cy - m_AnchorInfo[i].Distance.bottom - m_AnchorInfo[i].Height;
break;
case DA_RIGHT|DA_TOP:
x = m_DlgCurSize.cx - m_AnchorInfo[i].Distance.right - m_AnchorInfo[i].Width;
y = m_AnchorInfo[i].Distance.top;
break;
case DA_RIGHT|DA_BOTTOM:
x = m_DlgCurSize.cx - m_AnchorInfo[i].Distance.right - m_AnchorInfo[i].Width;
y = m_DlgCurSize.cy - m_AnchorInfo[i].Distance.bottom - m_AnchorInfo[i].Height;
break;
case DA_TOP|DA_BOTTOM:
x = m_DlgCurSize.cx /2 - m_AnchorInfo[i].point.x;
y = m_AnchorInfo[i].Distance.top;
m_AnchorInfo[i].Height += cy - m_AnchorInfo[0].Height;
height = m_AnchorInfo[i].Height;
break;
case DA_LEFT|DA_RIGHT|DA_TOP:
x = m_AnchorInfo[i].Distance.left;
y = m_AnchorInfo[i].Distance.top;
m_AnchorInfo[i].Width += cx - m_AnchorInfo[0].Width;
width = m_AnchorInfo[i].Width;
break;
case DA_LEFT|DA_RIGHT|DA_BOTTOM:
x = m_AnchorInfo[i].Distance.left;
y = m_DlgCurSize.cy - m_AnchorInfo[i].Distance.bottom - m_AnchorInfo[i].Height;
m_AnchorInfo[i].Width += cx - m_AnchorInfo[0].Width;
width = m_AnchorInfo[i].Width;
break;
case DA_RIGHT|DA_TOP|DA_BOTTOM:
x = m_DlgCurSize.cx - m_AnchorInfo[i].Distance.right - m_AnchorInfo[i].Width;
y = m_AnchorInfo[i].Distance.top;
m_AnchorInfo[i].Height += cy - m_AnchorInfo[0].Height;
height = m_AnchorInfo[i].Height;
break;
case DA_LEFT|DA_TOP|DA_BOTTOM:
x = m_AnchorInfo[i].Distance.left;
y = m_AnchorInfo[i].Distance.top;
m_AnchorInfo[i].Height += cy - m_AnchorInfo[0].Height;
height = m_AnchorInfo[i].Height;
break;
case DA_LEFT|DA_RIGHT|DA_TOP|DA_BOTTOM:
x = m_AnchorInfo[i].Distance.left;
y = m_AnchorInfo[i].Distance.top;
m_AnchorInfo[i].Width += cx - m_AnchorInfo[0].Width;
width = m_AnchorInfo[i].Width;
m_AnchorInfo[i].Height += cy - m_AnchorInfo[0].Height;
height = m_AnchorInfo[i].Height;
break;
case NULL:
x = m_DlgCurSize.cx /2 - m_AnchorInfo[i].point.x;
y = m_DlgCurSize.cy /2 - m_AnchorInfo[i].point.y;
break;
}
m_AnchorInfo[i].pWnd->MoveWindow(x,y,width,height);
m_AnchorInfo[i].pWnd->Invalidate(); //重画控件
}
m_AnchorInfo[0].pWnd->Invalidate();
m_AnchorInfo[0].Width = cx;
m_AnchorInfo[0].Height = cy;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -