亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? drawtool.cpp

?? 5個組態軟件設計樣例(VC++6.0)
?? CPP
字號:
// DrawTool.cpp: implementation of the CDrawTool class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DrawCli.h"
#include "DrawTool.h"
 
#include "drawdoc.h"
#include "drawvw.h"
#include "drawobj.h"
 

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CDrawTool implementation

CPtrList CDrawTool::c_tools;

static CSelectTool selectTool;
static CRectTool lineTool(line);
static CRectTool rectTool(rect);
static CRectTool roundRectTool(roundRect);
static CRectTool ellipseTool(ellipse);
static CRectTool circleTool(circle);
//static CPolyTool polyTool;

CPoint CDrawTool::c_down;
UINT CDrawTool::c_nDownFlags;
CPoint CDrawTool::c_last;
DrawShape CDrawTool::c_drawShape = selection;

CDrawTool::CDrawTool(DrawShape drawShape)
{
	m_drawShape = drawShape;
	c_tools.AddTail(this);
}

CDrawTool* CDrawTool::FindTool(DrawShape drawShape)
{
	POSITION pos = c_tools.GetHeadPosition();
	while (pos != NULL)
	{
		CDrawTool* pTool = (CDrawTool*)c_tools.GetNext(pos);
		if (pTool->m_drawShape == drawShape)
			return pTool;
	}

	return NULL;
}

void CDrawTool::OnLButtonDown(CDrawView* pView, UINT nFlags, const CPoint& point)
{
	// deactivate any in-place active item on this view!
	COleClientItem* pActiveItem = pView->GetDocument()->GetInPlaceActiveItem(pView);
	if (pActiveItem != NULL)
	{
		pActiveItem->Close();
		ASSERT(pView->GetDocument()->GetInPlaceActiveItem(pView) == NULL);
	}

	pView->SetCapture();
	c_nDownFlags = nFlags;
	c_down = point;
	c_last = point;
}

void CDrawTool::OnLButtonDblClk(CDrawView* /*pView*/, UINT /*nFlags*/, const CPoint& /*point*/)
{
}

void CDrawTool::OnLButtonUp(CDrawView* /*pView*/, UINT /*nFlags*/, const CPoint& point)
{
	ReleaseCapture();

	if (point == c_down)
		c_drawShape = selection;
}

void CDrawTool::OnMouseMove(CDrawView* /*pView*/, UINT /*nFlags*/, const CPoint& point)
{
	c_last = point;
	SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
}

void CDrawTool::OnEditProperties(CDrawView* /*pView*/)
{
}

void CDrawTool::OnCancel()
{
	c_drawShape = selection;
}

////////////////////////////////////////////////////////////////////////////
// CResizeTool

enum SelectMode
{
	none,
	netSelect,
	move,
	size
};

SelectMode selectMode = none;
int nDragHandle;

CPoint lastPoint;

CSelectTool::CSelectTool()
	: CDrawTool(selection)
{
}

void CSelectTool::OnLButtonDown(CDrawView* pView, UINT nFlags, const CPoint& point)
{
	
	CPoint local = point;
	pView->ClientToDoc(local);

	CDrawObj* pObj;
	selectMode = none;

	// Check for resizing (only allowed on single selections)
	if (pView->m_selection.GetCount() == 1)
	{
		pObj = pView->m_selection.GetHead();
		nDragHandle = pObj->HitTest(local, pView, TRUE);
		if (nDragHandle != 0)
			selectMode = size;
	}

	// See if the click was on an object, select and start move if so
	if (selectMode == none)
	{
		pObj = pView->GetDocument()->ObjectAt(local);

		if (pObj != NULL)
		{
			selectMode = move;

			if (!pView->IsSelected(pObj))
				pView->Select(pObj, (nFlags & MK_SHIFT) != 0);

			// Ctrl+Click clones the selection...
#ifndef _MAC			
			if ((nFlags & MK_CONTROL) != 0)
#else
			if ((nFlags & MK_OPTION) != 0)
#endif			
				pView->CloneSelection();
		}
	}
 
	// Click on background, start a net-selection
	if (selectMode == none)
	{
		if ((nFlags & MK_SHIFT) == 0)
			pView->Select(NULL);

		selectMode = netSelect;

		CClientDC dc(pView);
		CRect rect(point.x, point.y, point.x, point.y);
		rect.NormalizeRect();
		dc.DrawFocusRect(rect);
	}

	lastPoint = local;
	CDrawTool::OnLButtonDown(pView, nFlags, point);
  
}

void CSelectTool::OnLButtonDblClk(CDrawView* pView, UINT nFlags, const CPoint& point)
{
	
	if ((nFlags & MK_SHIFT) != 0)
	{
		// Shift+DblClk deselects object...
		CPoint local = point;
		pView->ClientToDoc(local);
		CDrawObj* pObj = pView->GetDocument()->ObjectAt(local);
		if (pObj != NULL)
			pView->Deselect(pObj);
	}
	else
	{
		// "Normal" DblClk opens properties, or OLE server...
		if (pView->m_selection.GetCount() == 1)
			pView->m_selection.GetHead()->OnOpen(pView);
	}

	CDrawTool::OnLButtonDblClk(pView, nFlags, point);

}

void CSelectTool::OnEditProperties(CDrawView* pView)
{
	if (pView->m_selection.GetCount() == 1)
		pView->m_selection.GetHead()->OnEditProperties();
}

void CSelectTool::OnLButtonUp(CDrawView* pView, UINT nFlags, const CPoint& point)
{
	
	if (pView->GetCapture() == pView)
	{
		if (selectMode == netSelect)
		{
			CClientDC dc(pView);
			CRect rect(c_down.x, c_down.y, c_last.x, c_last.y);
			rect.NormalizeRect();
			dc.DrawFocusRect(rect);

			pView->SelectWithinRect(rect, TRUE);
		}
		else if (selectMode != none)
		{
			pView->GetDocument()->UpdateAllViews(pView);
		}
	}

	CDrawTool::OnLButtonUp(pView, nFlags, point);
	
}

void CSelectTool::OnMouseMove(CDrawView* pView, UINT nFlags, const CPoint& point)
{
	if (pView->GetCapture() != pView)
	{
		if (c_drawShape == selection && pView->m_selection.GetCount() == 1)
		{
			CDrawObj* pObj = pView->m_selection.GetHead();
			CPoint local = point;
			pView->ClientToDoc(local);
			int nHandle = pObj->HitTest(local, pView, TRUE);
			if (nHandle != 0)
			{
				SetCursor(pObj->GetHandleCursor(nHandle));
				return; // bypass CDrawTool
			}
		}
		if (c_drawShape == selection)
			CDrawTool::OnMouseMove(pView, nFlags, point);
		return;
	}

	if (selectMode == netSelect)
	{
		CClientDC dc(pView);
		CRect rect(c_down.x, c_down.y, c_last.x, c_last.y);
		rect.NormalizeRect();
		dc.DrawFocusRect(rect);
		rect.SetRect(c_down.x, c_down.y, point.x, point.y);
		rect.NormalizeRect();
		dc.DrawFocusRect(rect);

		CDrawTool::OnMouseMove(pView, nFlags, point);
		return;
	}

	CPoint local = point;
	pView->ClientToDoc(local);
	CPoint delta = (CPoint)(local - lastPoint);

	POSITION pos = pView->m_selection.GetHeadPosition();
	while (pos != NULL)
	{
		CDrawObj* pObj = pView->m_selection.GetNext(pos);
		CRect position = pObj->m_position;

		if (selectMode == move)
		{
			position += delta;
			pObj->MoveTo(position, pView);
		}
		else if (nDragHandle != 0)
		{
			pObj->MoveHandleTo(nDragHandle, local, pView);
		}
	}

	lastPoint = local;

	if (selectMode == size && c_drawShape == selection)
	{
		c_last = point;
		SetCursor(pView->m_selection.GetHead()->GetHandleCursor(nDragHandle));
		return; // bypass CDrawTool
	}

	c_last = point;

	if (c_drawShape == selection)
		CDrawTool::OnMouseMove(pView, nFlags, point);
}

////////////////////////////////////////////////////////////////////////////
// CRectTool (does rectangles, round-rectangles, and ellipses)

CRectTool::CRectTool(DrawShape drawShape)
	: CDrawTool(drawShape)
{
}

void CRectTool::OnLButtonDown(CDrawView* pView, UINT nFlags, const CPoint& point)
{
	
	CDrawTool::OnLButtonDown(pView, nFlags, point);

	CPoint local = point;
	pView->ClientToDoc(local);

	CDrawRect* pObj = new CDrawRect(CRect(local, CSize(0, 0)));
	switch (m_drawShape)
	{
	default:
		ASSERT(FALSE); // unsuported shape!

	case rect:
		pObj->m_nShape = CDrawRect::rectangle;
		break;

	case roundRect:
		pObj->m_nShape = CDrawRect::roundRectangle;
		break;

	case ellipse:
		pObj->m_nShape = CDrawRect::ellipse;
		break;

	case line:
		pObj->m_nShape = CDrawRect::line;
		break;
	case circle:
		pObj->m_nShape = CDrawRect::circle;
		break;
	}
	pView->GetDocument()->Add(pObj);
	pView->Select(pObj);

	selectMode = size;
	nDragHandle = 1;
	lastPoint = local;

}

void CRectTool::OnLButtonDblClk(CDrawView* pView, UINT nFlags, const CPoint& point)
{
	CDrawTool::OnLButtonDblClk(pView, nFlags, point);
}

void CRectTool::OnLButtonUp(CDrawView* pView, UINT nFlags, const CPoint& point)
{  
	if (point == c_down)
	{
		// Don't create empty objects...
		CDrawObj *pObj = pView->m_selection.GetTail();
		pView->GetDocument()->Remove(pObj);
		pObj->Remove();
		selectTool.OnLButtonDown(pView, nFlags, point); // try a select!
	}

	selectTool.OnLButtonUp(pView, nFlags, point);
}

void CRectTool::OnMouseMove(CDrawView* pView, UINT nFlags, const CPoint& point)
{
	SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));
	selectTool.OnMouseMove(pView, nFlags, point);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天综合天天做天天综合| 51久久夜色精品国产麻豆| 日韩成人免费看| 亚洲123区在线观看| 一区av在线播放| 一区二区三区中文在线观看| 亚洲精品欧美二区三区中文字幕| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 五月婷婷激情综合| 午夜免费久久看| 视频一区免费在线观看| 蜜桃视频在线一区| 国产乱码一区二区三区| 高清成人在线观看| 播五月开心婷婷综合| 色婷婷综合久久| 欧美巨大另类极品videosbest| 欧美一区二区在线看| 3d动漫精品啪啪| 日韩欧美色电影| 国产精品丝袜91| 亚洲一区二区精品视频| 亚洲成人免费av| 奇米综合一区二区三区精品视频 | 欧美一级在线免费| 久久免费看少妇高潮| 国产精品免费视频网站| 亚洲一区二区精品视频| 国产在线国偷精品免费看| av影院午夜一区| 69堂国产成人免费视频| 26uuu欧美| 亚洲综合999| 国产一区二区调教| 欧美视频你懂的| 久久久精品黄色| 亚洲一区二区三区在线看 | 欧美精品一区二区三区蜜臀| 久久色成人在线| 亚洲宅男天堂在线观看无病毒 | 精品成人免费观看| 一区二区三区中文字幕精品精品| 奇米影视7777精品一区二区| 成人午夜激情片| 在线不卡免费av| 亚洲蜜桃精久久久久久久| 精品一二三四区| 欧美性生活一区| 国产精品日韩成人| 蜜桃视频一区二区三区 | 欧洲在线/亚洲| 国产欧美一区二区三区鸳鸯浴 | 欧美大白屁股肥臀xxxxxx| 亚洲伦理在线精品| 懂色av一区二区三区免费看| 91精品国产91热久久久做人人| 国产精品国产三级国产三级人妇| 奇米亚洲午夜久久精品| 色婷婷av一区二区三区大白胸| 精品国产一区二区三区久久影院 | 免费的成人av| 在线观看91精品国产入口| 国产精品久线观看视频| 麻豆成人免费电影| 欧美撒尿777hd撒尿| 亚洲黄色小视频| 91美女片黄在线观看| 欧美国产精品v| 国产河南妇女毛片精品久久久| 欧美一区二区视频观看视频| 亚洲一区精品在线| 色偷偷久久人人79超碰人人澡| 欧美国产精品久久| 国产成人欧美日韩在线电影| 久久综合国产精品| 国内精品久久久久影院薰衣草| 91精品国产全国免费观看| 亚洲高清视频在线| 91精品国产美女浴室洗澡无遮挡| 一区二区三区在线高清| 日本电影欧美片| 中文字幕日韩一区| 色老头久久综合| 亚洲一区中文日韩| 欧美日韩国产另类一区| 亚洲韩国一区二区三区| 在线91免费看| 久久精品国产99国产| 欧美成人vr18sexvr| 国产呦萝稀缺另类资源| 国产女人水真多18毛片18精品视频 | 91小视频在线免费看| 亚洲日本在线视频观看| 欧美性大战久久| 青青草原综合久久大伊人精品优势| 欧美另类z0zxhd电影| 蜜臀久久久久久久| 国产丝袜在线精品| 99久久综合精品| 午夜激情综合网| 欧美成人精品福利| aaa欧美大片| 日韩精品免费视频人成| 精品国产乱码久久久久久久| 国产iv一区二区三区| 亚洲欧美激情小说另类| 欧美一区二区三区视频免费| 国产乱码精品一区二区三区五月婷| 亚洲国产高清不卡| 欧美久久久一区| 国产成人久久精品77777最新版本| 国产精品乱人伦一区二区| 欧美日韩一区二区三区免费看| 麻豆精品在线视频| 亚洲欧美自拍偷拍| 91精品国产综合久久久久久| 国产传媒一区在线| 天堂久久久久va久久久久| 国产日韩欧美亚洲| 538在线一区二区精品国产| 国产成人精品免费在线| 午夜精品爽啪视频| 中文字幕av一区 二区| 91麻豆精品国产91久久久久久久久| 国产精品99久| 日韩精品亚洲一区二区三区免费| 国产精品三级av| 日韩一区二区精品葵司在线| 色成人在线视频| 成人一级片在线观看| 日韩主播视频在线| 一区二区免费在线播放| 国产三级精品在线| 日韩美女视频在线| 欧美日韩高清一区二区| 91麻豆精品秘密| 国产传媒欧美日韩成人| 久久精品国产精品青草| 日日摸夜夜添夜夜添国产精品| 中文字幕亚洲成人| 国产精品萝li| 亚洲精品一区二区三区蜜桃下载 | 亚洲观看高清完整版在线观看| 国产日韩av一区| 精品伦理精品一区| 日韩一区二区三区视频在线观看| 欧美在线观看18| 91看片淫黄大片一级| 92国产精品观看| 91在线视频免费91| 91丨porny丨首页| www.66久久| 成人av免费在线| 91小视频免费观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产精品国产三级国产普通话蜜臀 | 中文字幕av一区二区三区免费看| 久久蜜桃一区二区| 久久久久久**毛片大全| 久久九九99视频| 亚洲国产高清在线观看视频| 国产精品美女久久久久aⅴ国产馆| 亚洲国产成人私人影院tom| 国产女主播一区| 亚洲天堂免费看| 亚洲影院理伦片| 日本成人在线不卡视频| 美女久久久精品| 国产精品99久久不卡二区| 成人app网站| 欧美在线一区二区| 欧美一级理论片| 国产婷婷色一区二区三区在线| 中文文精品字幕一区二区| 中文字幕视频一区| 亚洲国产精品自拍| 麻豆免费精品视频| 成人黄色av网站在线| 欧美在线啊v一区| 欧美一级生活片| 国产女人aaa级久久久级| 亚洲人成网站色在线观看| 亚洲成va人在线观看| 国产精品一二三四五| 日本黄色一区二区| 欧美电影免费观看高清完整版在| 久久久久久9999| 亚洲线精品一区二区三区| 国产在线播放一区| 在线看不卡av| 中文字幕av资源一区| 午夜精品视频一区| 99久久伊人精品| 日韩欧美一区在线| 日韩美女精品在线| 另类小说综合欧美亚洲| 日本道精品一区二区三区| 欧美大肚乱孕交hd孕妇| 一区二区三区不卡在线观看| 国产在线视频不卡二|