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

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

?? dibview.cpp

?? vc環境下的圖像編程的一些源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
// DibView.cpp : implementation file
//

#include "stdafx.h"
#include "ImageBoard.h"
#include "DibView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDibView

IMPLEMENT_DYNCREATE(CDibView, CScrollView)

CDibView::CDibView()
{
	m_pDib = NULL;
	m_pFloatWnd = NULL;
	m_bDrawingRubber = FALSE;
	m_bDrawFreeline = FALSE;
	m_nDrawCurveStep = -1;
	m_bDrawCurve = FALSE;
	m_nDrawType = DT_SELECT;
	m_nPenStyle = PS_SOLID;
	m_nPenWidth = 1;
	m_crPenColor = RGB(0,0,0);
	m_crFillColor = RGB(0,0,0);
	m_nTextAlign = DT_LEFT;

	m_hCursorGeneralDraw = NULL;
	m_hCursorFreeline = NULL;
	m_hCursorFill = NULL;
	m_hCursorCurve = NULL;
}

CDibView::~CDibView()
{
}


BEGIN_MESSAGE_MAP(CDibView, CScrollView)
	//{{AFX_MSG_MAP(CDibView)
	ON_WM_LBUTTONUP()
	ON_WM_DESTROY()
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_CTLCOLOR()
	ON_WM_CREATE()
	ON_WM_SETCURSOR()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_REALIZEPAL, OnRealizePal)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDibView drawing

BOOL CDibView::PreCreateWindow(CREATESTRUCT& cs) 
{
	m_hCursorGeneralDraw = AfxGetApp()->LoadCursor(IDC_CURSORGENERALDRAW);
	cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS,
					m_hCursorGeneralDraw, 
					(HBRUSH)(COLOR_WINDOW-1),
					AfxGetApp()->LoadIcon(IDR_IMAGEBTYPE));
	
	return CScrollView::PreCreateWindow(cs);
}

void CDibView::Initialize(CDib* pDib)
{
	m_pDib = pDib;
}

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

	CSize sizeTotal;
	// TODO: calculate the total size of this view
	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);
}

void CDibView::OnDraw(CDC* pDC)
{
	if (::IsWindow(m_EditText.m_hWnd))
	{
		CRect rc;
		m_EditText.GetWindowRect(&rc);
		ScreenToClient(&rc);
		rc.InflateRect(2,2);

		CPen pen(PS_DASH,1,RGB(0,0,255));
		CPen *pOldPen = pDC->SelectObject(&pen);
		CBrush *pOldBrush = pDC->SelectObject(CBrush::FromHandle((HBRUSH)::GetStockObject(NULL_BRUSH)));
		pDC->Rectangle(&rc);
		pDC->SelectObject(pOldBrush);
		pDC->SelectObject(pOldPen);
	}
}

/////////////////////////////////////////////////////////////////////////////
// CDibView diagnostics

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

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

/////////////////////////////////////////////////////////////////////////////
// CDibView message handlers

void CDibView::OnDestroy() 
{
	CScrollView::OnDestroy();
	
	DeleteFloatWnd();
	delete m_pFont;
}

void CDibView::CreateFloatWnd(HDIB hDib, CPoint ptTopLeft)
{
	MergeFloatDib();

	// get DIB width and height
    LPBYTE lpDIB = (LPBYTE)GlobalLock(hDib); 
	if (! lpDIB)
	{
		GlobalUnlock(hDib);
		return;
	}
	int nWidth  = (int)DIBWidth(lpDIB);
	int nHeight = (int)DIBHeight(lpDIB);
	GlobalUnlock(hDib);

	// create float window
	CRect rc(ptTopLeft.x, ptTopLeft.y, ptTopLeft.x+nWidth, ptTopLeft.y+nHeight);
	m_pFloatWnd	= new CFloatDibWnd(hDib, rc, this);
}

void CDibView::DeleteFloatWnd()
{
	if (m_pFloatWnd)
	{
		delete m_pFloatWnd;
		m_pFloatWnd = NULL;
	}
}

void CDibView::ClientToDib(CPoint& point)
{
	point.x += GetScrollPos(SB_HORZ);
	point.y += GetScrollPos(SB_VERT);
}

void CDibView::ClientToDib(CRect& rect)
{
	rect.left += GetScrollPos(SB_HORZ);
	rect.top += GetScrollPos(SB_VERT);
	rect.right += GetScrollPos(SB_HORZ);
	rect.bottom += GetScrollPos(SB_VERT);
}

void CDibView::DibToClient(CPoint& point)
{
	point.x -= GetScrollPos(SB_HORZ);
	point.y -= GetScrollPos(SB_VERT);
}

void CDibView::DibToClient(CRect& rect)
{
	rect.left -= GetScrollPos(SB_HORZ);
	rect.top -= GetScrollPos(SB_VERT);
	rect.right -= GetScrollPos(SB_HORZ);
	rect.bottom -= GetScrollPos(SB_VERT);
}

BOOL CDibView::AdjustPointinDib(CPoint& point)
{
	int nWidth = m_pDib->GetWidth();
	int nHeight = m_pDib->GetHeight();
	BOOL bOut = FALSE;

	ClientToDib(point);
	if (point.x < 0)
	{
		point.x = 0;
		bOut = TRUE;
	}
	else if (point.x >= nWidth)
	{
		point.x = nWidth;
		bOut = TRUE;
	}
	if (point.y < 0)
	{
		point.y = 0;
		bOut = TRUE;
	}
	else if (point.y >= nHeight)
	{
		point.y = nHeight;
		bOut = TRUE;
	}
	DibToClient(point);

	return bOut;
}

void CDibView::DoDrawRubber(CDC *pDC, CRect rc)
{
	if (rc.IsRectEmpty())
		return;

	// draw 
	switch(m_nDrawType)
	{
	case DT_SELECT:
	case DT_TEXT:
		pDC->Rectangle(&rc);
		break;
	case DT_LINE:
		{
			// use client coordinates
			CPoint ptStart(m_ptStart);
			DibToClient(ptStart);
			if (ptStart == rc.TopLeft() || 
				ptStart == rc.BottomRight())
			{
				pDC->MoveTo(rc.TopLeft());
				pDC->LineTo(rc.BottomRight());
			}
			else
			{
				pDC->MoveTo(rc.right, rc.top);
				pDC->LineTo(rc.left, rc.bottom);
			}
		}
		break;
	case DT_CURVE:
		{
			if (m_nDrawCurveStep == 0)
			{
				// use client coordinates
				CPoint ptStart(m_ptStart);
				DibToClient(ptStart);
				if (ptStart == rc.TopLeft() || 
					ptStart == rc.BottomRight())
				{
					pDC->MoveTo(rc.TopLeft());
					pDC->LineTo(rc.BottomRight());
				}
				else
				{
					pDC->MoveTo(rc.right, rc.top);
					pDC->LineTo(rc.left, rc.bottom);
				}
			}
		}
		break;
	case DT_RECT_H:
	case DT_RECT_F:
		pDC->Rectangle(&rc);
		break;
	case DT_ROUNDRECT_H:
	case DT_ROUNDRECT_F:
		pDC->RoundRect(&rc, CPoint((int)(rc.Width()/3), (int)(rc.Height()/3)));
		break;
	case DT_ELLIP_H:
	case DT_ELLIP_F:
		pDC->Ellipse(&rc);
		break;
	}
}

void CDibView::StartDrawRubber(CPoint point)
{
	// save current mouse position
	ClientToDib(point);
	m_ptStart = point;

	// empty current rectangle
	m_rcClip.SetRectEmpty();
	m_rcRubber.SetRectEmpty();

	// capture mouse
	SetCapture();
}

void CDibView::DrawRubber(CPoint point)
{
	// get DC and set its ROP
	CClientDC dc(this);

	// define used pen
	int nPenStyle;
	int nPenWidth;
	COLORREF color;
	int nOldRop = dc.SetROP2(R2_NOTXORPEN);
	if (m_nDrawType == DT_SELECT || m_nDrawType == DT_TEXT)
	{
		nPenStyle = PS_DOT;
		nPenWidth = 1;
		color = RGB(0,0,0);
	}
	else
	{
		nPenStyle = m_nPenStyle;
		nPenWidth = m_nPenWidth;
		color = m_crPenColor;
	}
	CPen pen(nPenStyle, nPenWidth, color);
	CPen* pOldPen = dc.SelectObject(&pen);

	// if there is rectangle drawn, clear it
	DoDrawRubber(&dc, m_rcRubber);

	// Adjust cooridnates for select
	if (m_nDrawType == DT_SELECT)
	{
		// get current scroll pos
		int nScrollX = GetScrollPos(SB_HORZ);
		int nScrollY = GetScrollPos(SB_VERT);
		// calculate new scroll pos, and set it
		CRect rcClient;
		GetClientRect(&rcClient);
		int nMinX, nMaxX, nMinY, nMaxY;
		GetScrollRange(SB_HORZ, &nMinX, &nMaxX);
		GetScrollRange(SB_VERT, &nMinY, &nMaxY);
		BOOL bNeedRedraw = FALSE;
		if ((rcClient.Width() < m_pDib->GetWidth()) &&
			(point.x < 0 || point.x > rcClient.right))
		{
			nScrollX += point.x;
			nScrollX = BOUND(nScrollX, nMinX, nMaxX);
			SetScrollPos(SB_HORZ, nScrollX);
			bNeedRedraw = TRUE;
		}
		if ((rcClient.Height() < m_pDib->GetHeight()) &&
			(point.y < 0 || point.y > rcClient.bottom))
		{
			nScrollY += point.y;
			nScrollY = BOUND(nScrollY, nMinY, nMaxY);
			SetScrollPos(SB_VERT, nScrollY);
			bNeedRedraw = TRUE;
		}
		if (bNeedRedraw)
		{
			// redraw
			Invalidate(FALSE);
			UpdateWindow();
		}
		// normalize point coordinate
		if (AdjustPointinDib(point))
		{
			ClientToScreen(&point);
			SetCursorPos(point.x, point.y);
			ScreenToClient(&point);
		}
	}

	// use client coordinates
	CPoint ptStart(m_ptStart);
	DibToClient(ptStart);
	// set new rectangle
	if (point.x < ptStart.x)
	{
		m_rcRubber.left = point.x;
		m_rcRubber.right = ptStart.x;
	}	
	else
	{
		m_rcRubber.left = ptStart.x;
		m_rcRubber.right = point.x;
	}
	if (point.y < ptStart.y)
	{
		m_rcRubber.top = point.y;
		m_rcRubber.bottom = ptStart.y;
	}
	else
	{
		m_rcRubber.top = ptStart.y;
		m_rcRubber.bottom = point.y;
	}
	m_rcRubber.NormalizeRect();

	// draw new rectangle
	DoDrawRubber(&dc, m_rcRubber);

	// restore
	dc.SelectObject(pOldPen);
	dc.SetROP2(nOldRop);
}

void CDibView::StopDrawRubber()
{
	if (m_nDrawType == DT_SELECT || m_nDrawType == DT_TEXT)
	{
		m_rcClip = m_rcRubber;

		// if there is rectangle drawn, clear it
		if (! m_rcClip.IsRectEmpty())
		{
			// get DC and set its ROP
			CClientDC dc(this);
			int OldRop = dc.SetROP2(R2_NOTXORPEN);
			// define used pen
			CPen pen(PS_DOT, 1, RGB(0,0,0));
			CPen* pOldPen = dc.SelectObject(&pen);
			
			// draw to clear
			DoDrawRubber(&dc, m_rcClip);
		
			// restore
			dc.SetROP2(OldRop);
			dc.SelectObject(pOldPen);
		}
		
		if (m_nDrawType == DT_TEXT)
		{
			// empty clip area 
			m_rcClip.SetRectEmpty();

			CRect rc = m_rcRubber;

			CClientDC dc(this);
			CFont *pOldFont = dc.SelectObject(m_pFont);
			CRect rcLetter(0,0,1,1);
			int nHeight = dc.DrawText(_T("中"),&rcLetter, DT_CALCRECT);
			int nWidth = 4*rcLetter.Width();
			dc.SelectObject(pOldFont);

			if (rc.Height() < nHeight)
				rc.bottom = rc.top + nHeight;
			if (rc.Width() < nWidth)
				rc.right = rc.left + nWidth;
			ClientToDib(rc);
			if (rc.bottom > m_pDib->GetHeight())
				rc.bottom = m_pDib->GetHeight();
			if (rc.right > m_pDib->GetWidth())
				rc.right = m_pDib->GetWidth();
			DibToClient(rc);

			DWORD style = ES_LEFT;
			if (m_nTextAlign == DT_LEFT)
				style = ES_LEFT;
			else if (m_nTextAlign == DT_CENTER)
				style = ES_CENTER;
			else if (m_nTextAlign == DT_RIGHT)
				style = ES_RIGHT;
			m_EditText.Create(style|WS_VISIBLE|WS_CHILD|ES_MULTILINE, 
						  rc, 
						  this, 
						  IDC_EDIT);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区私人影院日本| 亚洲一区二区3| 亚洲精品国产一区二区精华液| 亚洲图片欧美一区| 国产精品系列在线观看| 精品视频免费看| 国产精品美女www爽爽爽| 日韩中文字幕麻豆| 色久综合一二码| 亚洲国产成人私人影院tom| 欧美aaaaa成人免费观看视频| 99国产精品久久| 国产网红主播福利一区二区| 午夜精品久久久久久久久久| 不卡的电影网站| 国产亚洲欧美色| 麻豆高清免费国产一区| 欧美日韩精品一二三区| 最新日韩av在线| 处破女av一区二区| 日韩免费观看2025年上映的电影| 亚洲一区二区偷拍精品| 91论坛在线播放| 国产精品乱码人人做人人爱 | 91精品国产一区二区三区香蕉 | 99久久国产综合精品麻豆| 精品久久久久久久久久久院品网| 性感美女久久精品| 欧美性色欧美a在线播放| 一区二区三区中文字幕| 97精品国产露脸对白| 成人免费在线视频观看| www.日韩大片| 亚洲三级小视频| 一本大道综合伊人精品热热| 亚洲色图制服诱惑| 99精品欧美一区二区三区小说 | 国产精品91一区二区| 精品国产精品一区二区夜夜嗨| 日本强好片久久久久久aaa| 日韩一区二区三区免费看 | 日韩精品一区二区三区在线播放| 日韩精品一区第一页| 日韩三级视频在线看| 激情文学综合网| 中文字幕欧美日韩一区| 91在线视频18| 日欧美一区二区| 亚洲精品一区二区精华| 成人av电影在线播放| 亚洲男人的天堂在线观看| 欧美日韩卡一卡二| 精品影视av免费| 亚洲欧洲日韩在线| 欧美日韩国产在线播放网站| 蜜桃一区二区三区四区| 国产日韩一级二级三级| 91在线小视频| 日本女优在线视频一区二区| 精品久久久久久久久久久久包黑料 | 6080yy午夜一二三区久久| 麻豆一区二区99久久久久| 久久久99久久精品欧美| 色悠悠亚洲一区二区| 日本亚洲视频在线| 国产精品视频yy9299一区| 欧美怡红院视频| 国产一区二区三区日韩| 亚洲色图20p| 日韩精品在线一区| 91香蕉视频在线| 麻豆91精品91久久久的内涵| 国产精品午夜在线观看| 欧美精品免费视频| 色婷婷一区二区三区四区| 偷拍与自拍一区| 国产精品久久久久久久裸模| 精品视频一区二区三区免费| 国产在线精品一区二区夜色 | 精品国产91久久久久久久妲己| av午夜精品一区二区三区| 日本中文字幕一区二区有限公司| 中文字幕免费在线观看视频一区| 欧美日韩一级片网站| 成人看片黄a免费看在线| 欧美aaa在线| 亚洲一二三四久久| 亚洲国产精品精华液ab| 91精品欧美一区二区三区综合在 | 93久久精品日日躁夜夜躁欧美| 久久国产精品色| 五月天久久比比资源色| 一区二区三区不卡视频| 国产精品色哟哟| 国产午夜亚洲精品羞羞网站| 欧美一级午夜免费电影| 在线日韩一区二区| 91麻豆国产香蕉久久精品| 国产91在线|亚洲| 久久超碰97中文字幕| 日产国产高清一区二区三区| 一区二区免费看| 中文字幕一区av| 亚洲国产高清在线观看视频| 久久久综合视频| 2021中文字幕一区亚洲| 日韩精品中文字幕一区二区三区| 欧美精品乱码久久久久久| 欧美性猛交xxxxxx富婆| 91蜜桃免费观看视频| av网站一区二区三区| 成人国产一区二区三区精品| 国产不卡一区视频| 欧美三级电影精品| 91美女精品福利| 一本色道亚洲精品aⅴ| 色噜噜久久综合| 在线亚洲免费视频| 欧美女孩性生活视频| 911国产精品| 日韩午夜精品视频| 精品久久一二三区| 国产嫩草影院久久久久| 国产精品私人影院| 亚洲理论在线观看| 亚洲二区在线视频| 日本成人中文字幕| 国产精品一区在线观看乱码 | 国产午夜精品福利| 国产精品美日韩| 亚洲三级久久久| 亚洲国产你懂的| 美女网站在线免费欧美精品| 久久99精品视频| 成人深夜福利app| 91精品办公室少妇高潮对白| 欧美视频在线一区二区三区 | 青青草97国产精品免费观看无弹窗版 | 亚洲欧洲精品一区二区精品久久久 | 精品sm在线观看| 国产精品不卡一区二区三区| 综合激情网...| 亚洲chinese男男1069| 美女视频第一区二区三区免费观看网站| 经典一区二区三区| 成人aaaa免费全部观看| 欧美三区在线观看| 久久久精品日韩欧美| 亚洲人成精品久久久久| 日韩黄色一级片| 成人少妇影院yyyy| 制服丝袜亚洲播放| 中文字幕国产精品一区二区| 亚洲一区二区在线视频| 国产麻豆精品theporn| 日本久久一区二区三区| 日韩视频一区在线观看| 国产精品久久久久久久久搜平片| 亚洲1区2区3区视频| 国产精品69久久久久水密桃| 在线精品国精品国产尤物884a| 日韩精品一区二区三区蜜臀| 亚洲视频香蕉人妖| 老司机一区二区| 91久久免费观看| 精品成人私密视频| 午夜在线电影亚洲一区| 成年人午夜久久久| 精品国产一二三区| 婷婷久久综合九色综合伊人色| 国产成人av资源| 欧美一区二区成人6969| 一区二区三区色| 不卡的电影网站| 久久天堂av综合合色蜜桃网| 亚洲电影激情视频网站| 99久久精品免费| 国产亚洲欧洲一区高清在线观看| 视频一区视频二区中文| 色妞www精品视频| 国产精品美日韩| 国产91丝袜在线播放| 精品国内二区三区| 日韩中文字幕区一区有砖一区| 色综合久久久久久久久久久| 国产欧美日韩亚州综合| 国产一区二区三区免费| 日韩欧美一级二级三级久久久| 一区二区成人在线| 色丁香久综合在线久综合在线观看| 精品国产亚洲一区二区三区在线观看 | 日本精品视频一区二区三区| 国产精品久久免费看| 国产99久久久国产精品| 亚洲动漫第一页| 色香蕉成人二区免费| 国产乱码精品一区二区三区av| 美女视频黄频大全不卡视频在线播放| 91久久线看在观草草青青| 亚洲欧洲av色图|