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

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

?? mainview.cpp

?? 此源碼包含的是《com原理與應用》一書中的源代碼。
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
// mainview.cpp : implementation of the CMainView class
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.


#include "stdafx.h"
#include "oclient.h"

#include "maindoc.h"
#include "mainview.h"
#include "rectitem.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainView

CBrush NEAR CMainView::m_brHatch;
CLIPFORMAT CMainView::m_cfObjectDescriptor=NULL;

IMPLEMENT_DYNCREATE(CMainView, CScrollView)

BEGIN_MESSAGE_MAP(CMainView, CScrollView)
	//{{AFX_MSG_MAP(CMainView)
	ON_COMMAND(ID_EDIT_PASTE, OnPaste)
	ON_COMMAND(ID_EDIT_PASTE_LINK, OnPasteLink)
	ON_COMMAND(ID_OLE_INSERT_NEW, OnInsertObject)
	ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR, OnUpdateEditMenu)
	ON_COMMAND(ID_EDIT_CLEAR, OnEditClear)
	ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
	ON_COMMAND(ID_EDIT_CUT, OnEditCut)
	ON_WM_LBUTTONDBLCLK()
	ON_WM_LBUTTONDOWN()
	ON_WM_SETCURSOR()
	ON_WM_RBUTTONDOWN()
	ON_WM_CHAR()
	ON_WM_SETFOCUS()
	ON_WM_CREATE()
	ON_WM_SIZE()
	ON_COMMAND(ID_OBJECT_DISPLAYCONTENT, OnObjectDisplayContent)
	ON_UPDATE_COMMAND_UI(ID_OBJECT_DISPLAYCONTENT, OnUpdateObjectDisplayContent)
	ON_COMMAND(ID_OBJECT_DISPLAYASICON, OnObjectDisplayAsIcon)
	ON_UPDATE_COMMAND_UI(ID_OBJECT_DISPLAYASICON, OnUpdateObjectDisplayAsIcon)
	ON_COMMAND(ID_EDIT_PASTE_SPECIAL, OnPasteSpecial)
	ON_UPDATE_COMMAND_UI(ID_EDIT_CLONE, OnUpdateEditClone)
	ON_COMMAND(ID_EDIT_CLONE, OnEditClone)
	ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE_SPECIAL, OnUpdateEditPaste)
	ON_COMMAND(ID_OBJECT_RESETSIZE, OnObjectResetsize)
	ON_COMMAND(ID_CANCEL_INPLACE, OnCancelInplace)
	ON_WM_DESTROY()
	ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
	ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateEditMenu)
	ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditMenu)
	ON_UPDATE_COMMAND_UI(ID_OBJECT_RESETSIZE, OnUpdateEditMenu)
	ON_COMMAND(ID_OLE_CHANGE_SOURCE, OnOleChangeSource)
	ON_UPDATE_COMMAND_UI(ID_OLE_CHANGE_SOURCE, OnUpdateOleChangeSource)
	ON_COMMAND(ID_OLE_EDIT_PROPERTIES, OnOleEditProperties)
	ON_UPDATE_COMMAND_UI(ID_OLE_EDIT_PROPERTIES, OnUpdateOleEditProperties)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMainView construction/destruction

CMainView::CMainView()
{
	if (m_brHatch.m_hObject == NULL)
		m_brHatch.CreateHatchBrush(HS_DIAGCROSS, RGB(0,0,0));
	if (m_cfObjectDescriptor == NULL)
		m_cfObjectDescriptor =
			(CLIPFORMAT)::RegisterClipboardFormat(_T("Object Descriptor"));

	m_pSelection = NULL;
	m_prevDropEffect = DROPEFFECT_NONE;
	m_bInDrag = FALSE;
}

CMainView::~CMainView()
{
}

void CMainView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	// We can't pass MM_ANISOTROPIC to SetScrollSizes so we have to convert to MM_TEXT
	CSize size = GetDocument()->GetDocumentSize();
	CClientDC dc(NULL);
	size.cx = MulDiv(size.cx, dc.GetDeviceCaps(LOGPIXELSX), 100);
	size.cy = MulDiv(size.cy, dc.GetDeviceCaps(LOGPIXELSY), 100);
	SetScrollSizes(MM_TEXT, size);
}

/////////////////////////////////////////////////////////////////////////////
// CMainView drawing

void CMainView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
	CScrollView::OnPrepareDC(pDC, pInfo);
	// set up a reasonable default context
	pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
	pDC->SetBkColor(::GetSysColor(COLOR_WINDOW));

	// LOENGLISH units are based on physical inches
	// We want logical inches so we have to do it differently
	pDC->SetMapMode(MM_ANISOTROPIC);
	pDC->SetViewportExt(
		pDC->GetDeviceCaps(LOGPIXELSX), pDC->GetDeviceCaps(LOGPIXELSY));
	pDC->SetWindowExt(100,-100);
}

void CMainView::SetupTracker(CRectTracker* pTracker, CRectItem* pItem,
	CRect* pTrueRect)
{
	ASSERT(pTracker != NULL);
	ASSERT(pItem != NULL);

	pTracker->m_rect = pItem->GetRect();
	DocToClient(pTracker->m_rect);

	// set minimum size for our OLE items
	pTracker->m_sizeMin.cx = 8;
	pTracker->m_sizeMin.cy = 8;

	pTracker->m_nStyle = 0;

	// setup resize handles if item is selected
	if (pItem == m_pSelection)
		pTracker->m_nStyle |= CRectTracker::resizeInside;

	// put correct border depending on item type
	if (pItem->GetType() == OT_LINK)
		pTracker->m_nStyle |= CRectTracker::dottedLine;
	else
		pTracker->m_nStyle |= CRectTracker::solidLine;

	// put hatching over the item if it is currently open
	if (pItem->GetItemState() == COleClientItem::openState ||
		pItem->GetItemState() == COleClientItem::activeUIState)
	{
		pTracker->m_nStyle |= CRectTracker::hatchInside;
	}

	if (pTrueRect != NULL)
		pTracker->GetTrueRect(pTrueRect);
}

void CMainView::OnDraw(CDC* pDC)
{
	CMainDoc* pDoc = GetDocument();

	ASSERT_VALID(pDC);

	if (!pDC->IsPrinting())
	{
		m_brHatch.UnrealizeObject();
		CPoint point(0, 0);
		pDC->LPtoDP(&point);
		pDC->SetBrushOrg(point.x % 8, point.y % 8);

		CRect rcClip;
		GetClientRect(&rcClip);
		ClientToDoc(rcClip);
		CSize docSize = pDoc->GetDocumentSize();
		if (rcClip.right > docSize.cx)
		{
			CRect rcFill(rcClip);
			rcFill.left = max(rcFill.left,docSize.cx);
			pDC->FillRect(rcFill,&m_brHatch);
		}
		if (rcClip.bottom < -docSize.cy)
		{
			CRect rcFill(rcClip);
			rcFill.top = min(rcFill.top, -docSize.cy);
			pDC->FillRect(rcFill,&m_brHatch);
		}
	}

	// Draw all the CRectItems
	POSITION pos = pDoc->GetStartPosition();
	while (pos != NULL)
	{
		CRectItem* pItem = DYNAMIC_DOWNCAST(CRectItem, pDoc->GetNextItem(pos));
		if (pItem != NULL)
		{
			pItem->Draw(pDC, pItem->GetRect());

			if (!pDC->IsPrinting())
			{
				// draw the tracker
				CRectTracker tracker;
				CRect rectTrue;
				SetupTracker(&tracker, pItem, &rectTrue);
				ClientToDoc(rectTrue);
				if (pDC->RectVisible(&rectTrue))
					tracker.Draw(pDC);
			}
		}
	}
}

// pHint is the deleted item or NULL if deselect/delete all
void CMainView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
	if (pHint == NULL && lHint == 0)
	{
		// some sort of clear all
		m_pSelection = NULL;
	}

	if (pHint != NULL && pHint->IsKindOf(RUNTIME_CLASS(CRectItem)))
	{
		// just invalidate the one item
		InvalidateItem((CRectItem*)pHint);

		// clear selection if pointing to deleted item
		if (lHint == 1 && pHint == m_pSelection)
		{
			// specific case of pHint being deleted
			m_pSelection = NULL;
		}
	}
	else if (lHint != 0)
	{
		// invalidate arbitrary rectangle
		InvalidateRect((CRect*)lHint);
	}
	else
	{
		// complete update
		CScrollView::OnUpdate(pSender, lHint, pHint);
	}
}

void CMainView::InvalidateItem(CRectItem* pItem)
{
	if (m_nMapMode != 0)
	{
		CRectTracker tracker;
		CRect rect;
		SetupTracker(&tracker, pItem, &rect);
		InvalidateRect(&rect);
	}
}

BOOL CMainView::OnScrollBy(CSize sizeScroll, BOOL bDoScroll)
{
	// remove drag/drop feedback before scrolling
	if (bDoScroll && m_prevDropEffect != DROPEFFECT_NONE)
	{
		CClientDC dc(this);
		dc.DrawFocusRect(CRect(m_dragPoint, m_dragSize));
			// erase previous focus rect
		m_prevDropEffect = DROPEFFECT_NONE;
	}

	// do the scroll
	if (!CScrollView::OnScrollBy(sizeScroll, bDoScroll))
		return FALSE;

	// update the position of any in-place active item
	if (bDoScroll)
	{
		UpdateActiveItem();
		UpdateWindow();
	}

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainView printing

BOOL CMainView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

/////////////////////////////////////////////////////////////////////////////
// Selection support

BOOL CMainView::IsSelected(const CObject* pDocItem) const
{
	return (pDocItem == m_pSelection);
}

void CMainView::SetSelection(CRectItem* pNewSel, BOOL bSafeSelect)
{
	if (pNewSel != NULL && pNewSel == m_pSelection)
		return;

	// deactivate any in-place active item on this view!
	COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
	if (pActiveItem != NULL && pNewSel != pActiveItem)
	{
		if (bSafeSelect)
			return;
		// if we found one, deactivate it
		pActiveItem->Close();
		ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL);
	}
	if (m_pSelection != NULL) // invalidate the old item
		InvalidateItem(m_pSelection);
	if ((m_pSelection = pNewSel) != NULL) // invalidate the new item
		InvalidateItem(m_pSelection);
}

/////////////////////////////////////////////////////////////////////////////
// CMainView diagnostics

#ifdef _DEBUG
void CMainView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CMainView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// Main 'Edit' menu commands

void CMainView::OnUpdateEditMenu(CCmdUI* pCmdUI)
{
	// most Edit menu commands are enabled only if we have a selection
	//  and there are no in-place activations for this view
	pCmdUI->Enable(m_pSelection != NULL &&
		GetDocument()->GetInPlaceActiveItem(this) == NULL);
}

void CMainView::OnEditCut()
{
	ASSERT(m_pSelection != NULL);
	TRY
	{
		m_pSelection->CopyToClipboard(TRUE);
		OnEditClear();
	}
	CATCH_ALL(e)
	{
		AfxMessageBox(IDP_CLIPBOARD_CUT_FAILED);
	}
	END_CATCH_ALL
}

void CMainView::OnEditCopy()
{
	ASSERT(m_pSelection != NULL);
	TRY
	{
		m_pSelection->CopyToClipboard(TRUE);
	}
	CATCH_ALL(e)
	{
		AfxMessageBox(IDP_CLIPBOARD_COPY_FAILED);
	}
	END_CATCH_ALL
}

void CMainView::OnEditClear()
{
	if (m_pSelection != NULL)
		GetDocument()->DeleteItem(m_pSelection);
}

void CMainView::OnPaste()
{
	if (DoPasteItem(FALSE, NULL, NULL) == NULL)
		AfxMessageBox(IDP_GET_FROM_CLIPBOARD_FAILED);
}

void CMainView::OnPasteLink()
{
	if (DoPasteItem(TRUE, NULL, NULL) == NULL)
		AfxMessageBox(IDP_GET_FROM_CLIPBOARD_FAILED);
}

void CMainView::DoPasteNative(
	COleDataObject* pDataObject, CPoint* pPoint, CRectItem* pItem)
{
	// get file refering to clipboard data
	CFile* pFile = pDataObject->GetFileData(CMainDoc::m_cfPrivate);
	if (pFile == NULL)
		{
		// if the file failed to open, throw an exception
		// to force cleanup in DoPasteItem.  the exact
		// type of exception thrown here is unimportant...

		AfxThrowFileException(CFileException::generic);
		}

	CArchive ar(pFile, CArchive::load);
	TRY
	{
		// connect the file to an archive and read the data
		ar.m_pDocument = GetDocument(); // for COleClientItem serialize
		pItem->Serialize(ar);
	}
	CATCH_ALL(e)
	{
		ar.Close();
		delete pFile;
		THROW_LAST();
	}
	END_CATCH_ALL

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区中文字幕| 91麻豆精品国产91久久久久久| 337p粉嫩大胆噜噜噜噜噜91av| 日韩av一区二区在线影视| 欧美日韩精品三区| 人人爽香蕉精品| 精品国产乱码久久久久久蜜臀 | 欧美色综合天天久久综合精品| 中文字幕一区二区三区不卡| av高清久久久| 一区二区三区蜜桃| 欧美另类一区二区三区| 麻豆精品视频在线观看视频| 久久夜色精品一区| 成年人国产精品| 亚洲一区二区三区四区五区中文| 欧美日本乱大交xxxxx| 麻豆国产一区二区| 日本一区二区三区四区在线视频| 色综合久久六月婷婷中文字幕| 亚洲国产cao| www国产亚洲精品久久麻豆| caoporen国产精品视频| 亚洲影院免费观看| 精品久久一区二区| 一本色道久久加勒比精品| 青草国产精品久久久久久| 国产亚洲成年网址在线观看| 日本乱码高清不卡字幕| 麻豆精品一二三| 亚洲日本一区二区| 日韩视频一区二区三区在线播放| 成人久久18免费网站麻豆| 亚洲一区在线视频| 久久久久久久电影| 欧美色区777第一页| 国产高清久久久| 亚洲国产sm捆绑调教视频| 久久综合给合久久狠狠狠97色69| 色噜噜狠狠成人中文综合| 久久国产福利国产秒拍| 亚洲色欲色欲www在线观看| 337p日本欧洲亚洲大胆精品 | 欧美优质美女网站| 国产麻豆欧美日韩一区| 亚洲一区视频在线观看视频| 精品国产髙清在线看国产毛片 | 欧美日韩中文字幕一区二区| 国产中文字幕精品| 亚洲福利视频三区| 亚洲欧洲精品一区二区三区不卡| 日韩精品中文字幕在线一区| 在线精品国精品国产尤物884a| 国产在线视频一区二区| 亚欧色一区w666天堂| 中文字幕在线一区免费| 精品久久久三级丝袜| 欧美日韩一级片在线观看| 成人av电影免费观看| 国模套图日韩精品一区二区| 亚洲国产精品人人做人人爽| 日韩一区在线看| 国产调教视频一区| 精品久久国产字幕高潮| 在线综合视频播放| 欧美日产国产精品| 欧美日韩国产首页| 欧美色综合久久| 欧美性受xxxx黑人xyx性爽| 一本久久综合亚洲鲁鲁五月天| 成人小视频在线| 成人午夜电影小说| 高清成人免费视频| 成人短视频下载| 成人免费观看av| jizzjizzjizz欧美| 色综合天天综合网天天狠天天| 成人激情免费视频| 不卡av电影在线播放| 成人中文字幕电影| www.色精品| 91亚洲国产成人精品一区二区三| 91视频免费播放| 日本乱人伦一区| 欧美亚洲一区二区在线| 日本乱码高清不卡字幕| 国产成人啪午夜精品网站男同| 麻豆一区二区三| 天天操天天综合网| 久久精品国产一区二区| 三级久久三级久久| 欧美亚洲日本国产| 91蜜桃传媒精品久久久一区二区| 亚洲三级小视频| 国产91精品久久久久久久网曝门| 亚洲人成小说网站色在线| 欧美成人国产一区二区| 99久久久久久| 黄色精品一二区| 精品一区二区日韩| 一区二区三区日韩欧美精品| 国产精品的网站| 色综合 综合色| 亚洲视频一区在线| 成人欧美一区二区三区| 欧美高清在线精品一区| 日本中文字幕一区二区有限公司| 亚洲精品国产一区二区精华液| 中文字幕av一区二区三区高 | 免费在线视频一区| 亚洲成av人影院| 久久精品久久99精品久久| 精品在线视频一区| 国产成人在线免费观看| 国产成人精品免费视频网站| 成人网男人的天堂| 91福利精品视频| www.成人在线| 8x8x8国产精品| 精品福利二区三区| 国产精品美女久久久久久久网站| 中文字幕在线免费不卡| 亚洲午夜精品17c| 亚洲一区二区在线播放相泽| 久久精品99国产精品日本| 国产精品资源在线| 93久久精品日日躁夜夜躁欧美| 欧美三级电影一区| 久久综合网色—综合色88| 亚洲国产岛国毛片在线| 亚洲福利视频一区二区| 久久精品国产网站| 成a人片国产精品| 91精品在线免费| 国产精品久久久久一区二区三区| 亚洲综合在线免费观看| 国产精品1区2区3区| 91精品福利视频| 精品国内二区三区| 亚洲美女精品一区| 九一久久久久久| 色94色欧美sute亚洲线路一久| 久久免费精品国产久精品久久久久| 欧美国产精品一区| 日本亚洲一区二区| 99麻豆久久久国产精品免费| 欧美一级片免费看| 亚洲免费伊人电影| 丝袜脚交一区二区| 91在线视频18| 国产欧美日韩综合精品一区二区| 亚洲综合免费观看高清在线观看| 国模一区二区三区白浆| 91久久精品一区二区| 久久精品欧美日韩精品| 久草在线在线精品观看| 欧美性猛交xxxx乱大交退制版 | 亚洲国产裸拍裸体视频在线观看乱了| 久久精品二区亚洲w码| 欧美三级乱人伦电影| 成人免费视频在线观看| 午夜精品视频在线观看| 欧美日韩久久不卡| 亚洲欧洲日产国产综合网| 国产做a爰片久久毛片| 8x8x8国产精品| 一区二区三区欧美久久| 日韩二区三区四区| 在线成人免费观看| 夜夜精品视频一区二区| 99re热这里只有精品视频| 久久夜色精品国产噜噜av | 国产传媒日韩欧美成人| 6080yy午夜一二三区久久| 一区二区三区毛片| 成人av资源网站| 国产偷国产偷精品高清尤物| 久久99精品久久只有精品| 欧美日本一道本在线视频| 亚洲综合免费观看高清完整版 | 欧美视频在线一区| 成人欧美一区二区三区黑人麻豆 | 久久在线观看免费| 亚洲高清免费观看高清完整版在线观看| eeuss鲁片一区二区三区| 欧美国产日韩精品免费观看| 久久国产剧场电影| 国产欧美日韩视频一区二区| 蜜臀av国产精品久久久久| 制服丝袜亚洲网站| 日韩成人一区二区| 日韩一区二区三区精品视频| 日韩精品一卡二卡三卡四卡无卡| 欧美蜜桃一区二区三区| 亚洲永久精品大片| 欧洲av在线精品| 首页综合国产亚洲丝袜| 日韩一区二区三区免费观看| 国产在线精品免费| 久久久久国产精品免费免费搜索|