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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? scribdoc.cpp

?? 《深入淺出MFC》第二版PDF附源碼,詳細(xì)介紹mfc功能
?? CPP
字號:
// ScribDoc.cpp : implementation of the CScribbleDoc class
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1995 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 "Scribble.h"

#include "ScribDoc.h"
#include "PenDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CScribbleDoc

IMPLEMENT_DYNCREATE(CScribbleDoc, CDocument)

BEGIN_MESSAGE_MAP(CScribbleDoc, CDocument)
	//{{AFX_MSG_MAP(CScribbleDoc)
	ON_COMMAND(ID_EDIT_CLEAR_ALL, OnEditClearAll)
	ON_COMMAND(ID_PEN_THICK_OR_THIN, OnPenThickOrThin)
	ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_ALL, OnUpdateEditClearAll)
	ON_UPDATE_COMMAND_UI(ID_PEN_THICK_OR_THIN, OnUpdatePenThickOrThin)
	ON_COMMAND(ID_PEN_WIDTHS, OnPenWidths)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CScribbleDoc construction/destruction

CScribbleDoc::CScribbleDoc()
{
	// TODO: add one-time construction code here

}

CScribbleDoc::~CScribbleDoc()
{
}

BOOL CScribbleDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;
	InitDocument();
	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CScribbleDoc serialization

void CScribbleDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
	}
	else
	{
	}
	m_strokeList.Serialize(ar);
}

/////////////////////////////////////////////////////////////////////////////
// CScribbleDoc diagnostics

#ifdef _DEBUG
void CScribbleDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CScribbleDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CScribbleDoc commands

BOOL CScribbleDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
	if (!CDocument::OnOpenDocument(lpszPathName))
		return FALSE;
	InitDocument(); 
	return TRUE;
}

void CScribbleDoc::DeleteContents() 
{
	while (!m_strokeList.IsEmpty())
	{
		delete m_strokeList.RemoveHead();
	}
	CDocument::DeleteContents();
}

void CScribbleDoc::InitDocument()
{
	m_bThickPen = FALSE;
	m_nThinWidth = 2;   // default thin pen is 2 pixels wide
	m_nThickWidth = 5;  // default thick pen is 5 pixels wide
	ReplacePen();       // initialize pen according to current width
}

CStroke* CScribbleDoc::NewStroke()
{
	CStroke* pStrokeItem = new CStroke(m_nPenWidth);
	m_strokeList.AddTail(pStrokeItem);
	SetModifiedFlag();  // Mark the document as having been modified, for
						// purposes of confirming File Close.
	return pStrokeItem;
}




/////////////////////////////////////////////////////////////////////////////
// CStroke

IMPLEMENT_SERIAL(CStroke, CObject, 1)
CStroke::CStroke()
{
	// This empty constructor should be used by serialization only
}

CStroke::CStroke(UINT nPenWidth)
{
	m_nPenWidth = nPenWidth;
}

void CStroke::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		ar << (WORD)m_nPenWidth;
		m_pointArray.Serialize(ar);
	}
	else
	{
		WORD w;
		ar >> w;
		m_nPenWidth = w;
		m_pointArray.Serialize(ar);
	}
}

BOOL CStroke::DrawStroke(CDC* pDC)
{
	CPen penStroke;
	if (!penStroke.CreatePen(PS_SOLID, m_nPenWidth, RGB(0,0,0)))
		return FALSE;
	CPen* pOldPen = pDC->SelectObject(&penStroke);
	pDC->MoveTo(m_pointArray[0]);
	for (int i=1; i < m_pointArray.GetSize(); i++)
	{
		pDC->LineTo(m_pointArray[i]);
	}

	pDC->SelectObject(pOldPen);
	return TRUE;
}
void CScribbleDoc::OnEditClearAll() 
{
	DeleteContents();
	SetModifiedFlag();  // Mark the document as having been modified, for
						// purposes of confirming File Close.
	UpdateAllViews(NULL);
}

void CScribbleDoc::OnPenThickOrThin() 
{
	// Toggle the state of the pen between thin or thick.
	m_bThickPen = !m_bThickPen;

	// Change the current pen to reflect the new user-specified width.
	ReplacePen();
}

void CScribbleDoc::ReplacePen()
{
	m_nPenWidth = m_bThickPen? m_nThickWidth : m_nThinWidth;

	// Change the current pen to reflect the new user-specified width.
	m_penCur.DeleteObject();
	m_penCur.CreatePen(PS_SOLID, m_nPenWidth, RGB(0,0,0)); // solid black
}

void CScribbleDoc::OnUpdateEditClearAll(CCmdUI* pCmdUI) 
{
	// Enable the command user interface object (menu item or tool bar
	// button) if the document is non-empty, i.e., has at least one stroke.
	pCmdUI->Enable(!m_strokeList.IsEmpty());
}

void CScribbleDoc::OnUpdatePenThickOrThin(CCmdUI* pCmdUI) 
{
	// Add check mark to Draw Thick Line menu item, if the current
	// pen width is "thick".
	pCmdUI->SetCheck(m_bThickPen);
}

void CScribbleDoc::OnPenWidths() 
{
	CPenWidthsDlg dlg;
	// Initialize dialog data
	dlg.m_nThinWidth = m_nThinWidth;
	dlg.m_nThickWidth = m_nThickWidth;

	// Invoke the dialog box
	if (dlg.DoModal() == IDOK)
	{
		// retrieve the dialog data
		m_nThinWidth = dlg.m_nThinWidth;
		m_nThickWidth = dlg.m_nThickWidth;

		// Update the pen that is used by views when drawing new strokes,
		// to reflect the new pen width definitions for "thick" and "thin".
		ReplacePen();
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久99| 美女被吸乳得到大胸91| 91啪在线观看| 亚洲精品成人a在线观看| 91同城在线观看| 亚洲第一激情av| 91精品免费观看| 久久超碰97中文字幕| 久久亚洲精精品中文字幕早川悠里 | 色综合久久天天综合网| 综合久久国产九一剧情麻豆| 日本丰满少妇一区二区三区| 亚洲午夜羞羞片| 日韩一级片网址| 国产一区二区影院| 中文字幕免费不卡在线| 国产精品一卡二卡| 国产精品进线69影院| 色狠狠av一区二区三区| 天天色图综合网| 精品国产乱码久久久久久久 | 制服.丝袜.亚洲.另类.中文| 免费成人在线播放| 国产亚洲自拍一区| 色综合久久88色综合天天免费| 欧美成人vr18sexvr| 国产传媒一区在线| 一级特黄大欧美久久久| 日韩欧美卡一卡二| 成人av网站免费观看| 一区二区三区四区视频精品免费| 国产裸体歌舞团一区二区| 国产精品美女久久久久久久 | 国产一区美女在线| 国产日本欧美一区二区| 欧美丝袜自拍制服另类| 国产成人免费视频一区| 一区二区三区欧美久久| 2021久久国产精品不只是精品| 日本午夜一本久久久综合| 欧美国产禁国产网站cc| 欧美日韩国产综合视频在线观看 | 亚洲主播在线观看| 国产午夜精品一区二区三区嫩草 | 久久久久久久久岛国免费| 在线精品视频免费观看| 国产激情视频一区二区在线观看 | 欧美大片顶级少妇| 色综合久久中文综合久久牛| 久久国产精品72免费观看| 亚洲免费av在线| 国产女人18水真多18精品一级做 | 中文字幕亚洲欧美在线不卡| 91精品国产一区二区三区香蕉| 午夜精品久久久久久久久| 国产精品日韩精品欧美在线| 欧美久久一二区| 99精品视频一区| 国产麻豆视频一区| 麻豆成人91精品二区三区| 亚洲午夜电影在线观看| 最新欧美精品一区二区三区| 久久综合狠狠综合久久激情 | 3atv一区二区三区| 香蕉影视欧美成人| 国产精品伦一区二区三级视频| 韩国视频一区二区| 亚洲精选一二三| 欧美日韩午夜在线视频| 国产成人欧美日韩在线电影| 无码av免费一区二区三区试看 | 538prom精品视频线放| av资源站一区| 国产精品88888| 青青草97国产精品免费观看| 亚洲国产精品ⅴa在线观看| 欧美一区二区成人| 欧洲av在线精品| 91影院在线观看| 大胆亚洲人体视频| 国精产品一区一区三区mba视频| 久久久噜噜噜久噜久久综合| 欧美精品粉嫩高潮一区二区| 91久久国产综合久久| 99精品国产热久久91蜜凸| 久久99久久精品欧美| 日韩一区精品视频| 一区二区三区美女| 亚洲视频免费在线观看| 欧美一级xxx| 欧美一区午夜精品| 日韩欧美亚洲另类制服综合在线| 国产精品一区二区在线观看网站 | 国产伦精品一区二区三区免费迷| 中文一区一区三区高中清不卡| 99视频国产精品| 岛国一区二区三区| 精品一区二区在线观看| 午夜精品久久久久久久久久 | 91浏览器在线视频| 色天使色偷偷av一区二区| 99精品久久只有精品| www.视频一区| 懂色av中文一区二区三区| 97超碰欧美中文字幕| 91碰在线视频| 欧美午夜不卡在线观看免费| 欧美猛男gaygay网站| 欧美精品tushy高清| 欧美性三三影院| 欧美色老头old∨ideo| 在线电影欧美成精品| 日韩视频在线观看一区二区| 欧美精品第1页| 精品国产露脸精彩对白| 国产欧美精品国产国产专区| 亚洲日本一区二区| 亚洲成人免费看| 奇米一区二区三区| 国产精品18久久久久久久久| 国产美女精品人人做人人爽| 99免费精品在线| 日韩一二三区不卡| 国产免费观看久久| 一区二区三区在线影院| 久久丁香综合五月国产三级网站| 一区二区三区资源| 日日骚欧美日韩| 久久成人免费日本黄色| av在线不卡免费看| 91蝌蚪porny| 91精品国产色综合久久久蜜香臀| 欧美在线观看视频一区二区| 91免费看`日韩一区二区| 欧美体内she精视频| 精品国产青草久久久久福利| 精品对白一区国产伦| 亚洲欧洲另类国产综合| 丝袜美腿亚洲色图| 懂色av一区二区三区免费观看| 久久爱www久久做| 色婷婷久久久久swag精品| 欧美日韩视频第一区| 国产偷v国产偷v亚洲高清| 亚洲一卡二卡三卡四卡无卡久久| 中文字幕欧美日本乱码一线二线| 欧美成人一区二区三区在线观看| 欧美日韩精品福利| 亚洲精品一区二区三区蜜桃下载| 国产亚洲成aⅴ人片在线观看| 精品国产伦一区二区三区观看体验| 91精品婷婷国产综合久久| 国产精品入口麻豆九色| 奇米一区二区三区av| 色婷婷av一区二区三区大白胸| 成人h动漫精品一区二| 欧美一二三四区在线| 亚洲美女免费在线| 国产91在线|亚洲| 欧美r级电影在线观看| 亚洲一级二级在线| eeuss影院一区二区三区| 日韩一级精品视频在线观看| 亚洲永久精品国产| 东方欧美亚洲色图在线| 欧美一区二区视频在线观看| 亚洲综合一区在线| 日本精品一级二级| 中文字幕欧美日韩一区| 国产尤物一区二区| 欧美一区三区四区| 亚洲成人在线网站| 欧美视频自拍偷拍| 亚洲欧洲一区二区在线播放| 99国产一区二区三精品乱码| 欧美韩国日本不卡| 国产精品亚洲专一区二区三区| 成人网男人的天堂| 国产亚洲综合av| 国产精品综合av一区二区国产馆| 国产精品一区二区久激情瑜伽| 国产99精品国产| 精品免费一区二区三区| 亚洲图片欧美一区| 欧美一区二区在线播放| 美女一区二区三区| 精品国产一区二区三区忘忧草 | 欧美在线短视频| 亚洲综合偷拍欧美一区色| 99久久免费国产| 午夜精品一区在线观看| 欧美理论电影在线| 日本中文字幕一区二区视频| 欧美一区在线视频| 激情六月婷婷久久| 久久久国产精品午夜一区ai换脸| 亚洲一区二区中文在线| 欧美视频在线一区二区三区| 亚洲高清免费观看| 日韩午夜激情av|