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

📄 anchor.cpp

📁 利用flex写的C_minus的词法分析器
💻 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 + -