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

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

?? imageboardview.cpp

?? 《精通 vc++ 圖像編程》的源代碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
		// document changed
		CDocument* pDoc = GetDocument();
		pDoc->SetModifiedFlag(TRUE);
	}
	DeleteFloatWnd();
}

void CImageBoardView::DeleteFloatDib()
{
	// if selected rect is exist, cut it
	CutSelectedRect();
	// if float DIB window exist, delete it
	DeleteFloatWnd();
}

void CImageBoardView::CutFloatDib()
{
	// copy to clipboard first
	CopyToClipboard();
	// then delete
	DeleteFloatDib();
}

void CImageBoardView::CopyToClipboard()
{
	// Clean clipboard of contents, and copy the DIB/DDB/PAL.
	// Actual copy will occured in WM_RENDERALLFORMATS/WM_RENDERFORMAT
	if (OpenClipboard())
	{
		EmptyClipboard();

		HDIB hDib;
		HBITMAP hBitmap;
		HPALETTE hPalette;
		// if there is float dib, copy it
		if (m_pFloatWnd)
		{
			hDib = CopyHandle(m_pFloatWnd->m_hDibFloat);
			hBitmap = DIBToBitmap(m_pFloatWnd->m_hDibFloat, (HPALETTE)m_pDib->m_pPalette->GetSafeHandle());
			hPalette = CopyPalette((HPALETTE)m_pDib->m_pPalette->GetSafeHandle());
		}
		else	// otherwise, copy the entire DIB
		{
			hDib = CopyHandle(m_pDib->m_hDib);
			hBitmap = DIBToBitmap(m_pDib->m_hDib, (HPALETTE)m_pDib->m_pPalette->GetSafeHandle ());
			hPalette = CopyPalette((HPALETTE)m_pDib->m_pPalette->GetSafeHandle());
		}

		// set them to clipboard
		SetClipboardData(CF_DIB, hDib);
		SetClipboardData(CF_BITMAP, hBitmap);
		SetClipboardData(CF_PALETTE, hPalette);

		CloseClipboard();
	}
}

void CImageBoardView::Cut()
{
	// copy to clipboard first
	CopyToClipboard();
	// then delete
	Delete();
}

void CImageBoardView::Delete()
{
	if (m_pFloatWnd) // clip area
		DeleteFloatDib();
	else			// entire DIB
	{
		m_pDib->Destroy();
		// modify document flags
		CSize sizeTotal(0, 0);
		SetScrollSizes(MM_TEXT, sizeTotal);
		CDocument* pDoc = GetDocument();
		pDoc->UpdateAllViews(NULL);
		pDoc->SetModifiedFlag(TRUE);
	}
}

BOOL CImageBoardView::PasteDibFromClipboard()
{
	// get DIB handle from clipboard
	HDIB hNewDIB = NULL;
	if (OpenClipboard())
	{
		if (IsClipboardFormatAvailable(CF_DIB))
			hNewDIB = CopyHandle(GetClipboardData(CF_DIB));

		CloseClipboard();
	}
	if (hNewDIB == NULL)
		return FALSE;

	// if current DIB is empty, use the pasted one as current
	if (m_pDib->IsEmpty())
	{
		// create current DIB
		LPBYTE lpDIB = (LPBYTE)GlobalLock(hNewDIB);
		m_pDib->Create(lpDIB);
		GlobalUnlock(hNewDIB);
		GlobalFree(hNewDIB);

		// modify document flags
		CSize sizeTotal(m_pDib->GetWidth(), m_pDib->GetHeight());
		SetScrollSizes(MM_TEXT, sizeTotal);
		CDocument* pDoc = GetDocument();
		OnRealizePal((WPARAM)m_hWnd,0);  // realize the new palette
		pDoc->UpdateAllViews(NULL);
		pDoc->SetModifiedFlag(TRUE);
	}
	else // put it in float DIB window
	{
		if (AdjustSize(hNewDIB))
		{
			// empty current rectangle
			m_rcClip.SetRectEmpty();
			CreateFloatWnd(hNewDIB, CPoint(0, 0));
		}
	}

	return TRUE;
}

BOOL CImageBoardView::PasteBitmapFromClipboard()
{
	// get DIB handle from clipboard
	HBITMAP hNewDDB = NULL;
	HPALETTE hPal = NULL;
	if (OpenClipboard())
	{
		if (IsClipboardFormatAvailable(CF_BITMAP))
			hNewDDB = (HBITMAP)GetClipboardData(CF_BITMAP);
		if (IsClipboardFormatAvailable(CF_PALETTE))
			hPal = (HPALETTE)GetClipboardData(CF_PALETTE);

		CloseClipboard();
	}
	if (hNewDDB == NULL)
		return FALSE;

	// if current DIB is empty, use the pasted one as current
	if (m_pDib->IsEmpty())
	{
		// create current DIB
		m_pDib->Create(hNewDDB, hPal);

		// modify document flags
		CSize sizeTotal(m_pDib->GetWidth(), m_pDib->GetHeight());
		SetScrollSizes(MM_TEXT, sizeTotal);
		CDocument* pDoc = GetDocument();
		OnRealizePal((WPARAM)m_hWnd,0);  // realize the new palette
		pDoc->UpdateAllViews(NULL);
		pDoc->SetModifiedFlag(TRUE);
	}
	else // put it in float DIB window
	{
		// empty current rectangle
		m_rcClip.SetRectEmpty();
		HDIB hDib = BitmapToDIB(hNewDDB, (HPALETTE)m_pDib->m_pPalette->GetSafeHandle());
		if (AdjustSize(hDib))
		{
			HDIB hNewDib = ConvertDIBFormat(hDib, m_pDib->GetBitCount(), (HPALETTE)m_pDib->m_pPalette->GetSafeHandle());
			DestroyDIB(hDib);
			CreateFloatWnd(hNewDib, CPoint(0, 0));
		}
	}

	return TRUE;
}

BOOL CImageBoardView::PastePalFromClipboard()
{
	// egt DIB handle from clipboard
	HPALETTE hPal = NULL;
	if (OpenClipboard())
	{
		if (IsClipboardFormatAvailable(CF_PALETTE))
			hPal = (HPALETTE)GetClipboardData(CF_PALETTE);

		CloseClipboard();
	}
	if (hPal == NULL)
		return FALSE;

	// if current DIB is empty, do nothing
	if (m_pDib->IsEmpty())
		return FALSE;

	// get color bits
	int nEntries;
	WORD wBpp;
	GetObject(hPal, sizeof(int), &nEntries);
	if (nEntries > 16)
		wBpp = 8;
	else if (nEntries > 2)
		wBpp = 4;
	else
		wBpp = 1;

	// convert to new DIB
	HDIB hNewDib = ConvertDIBFormat(m_pDib->m_hDib, wBpp, hPal);
	if (! hNewDib)
		return FALSE;

	m_pDib->Destroy();
	// create current DIB
	LPBYTE lpDIB = (LPBYTE)GlobalLock(hNewDib);
	m_pDib->Create(lpDIB);
	GlobalUnlock(hNewDib);
	GlobalFree(hNewDib);
	// modify document flags
	CDocument* pDoc = GetDocument();
	OnRealizePal((WPARAM)m_hWnd,0);  // realize the new palette
	pDoc->UpdateAllViews(NULL);
	pDoc->SetModifiedFlag(TRUE);

	return TRUE;
}

void CImageBoardView::SelectPaste(int nCF)
{
	switch(nCF)
	{
	case CF_DIB:
		PasteDibFromClipboard();
		return;
	case CF_BITMAP:
		PasteBitmapFromClipboard();
		return;
	case CF_PALETTE:
		PastePalFromClipboard();
		return;
	}
}

void CImageBoardView::Paste()
{
	if (! PasteDibFromClipboard())
		if (! PasteBitmapFromClipboard())
			PastePalFromClipboard();
}

LRESULT CImageBoardView::OnRealizePal(WPARAM wParam, LPARAM lParam)
{
	ASSERT(wParam != NULL);

	if (m_pDib->IsEmpty())
		return 0L;  // must be a new document

	CPalette* pPal = m_pDib->GetPalette();
	if (pPal != NULL)
	{
		CWnd* pAppFrame = AfxGetApp()->m_pMainWnd;

		CClientDC appDC(pAppFrame);
		// All views but one should be a background palette.
		// wParam contains a handle to the active view, so the SelectPalette
		// bForceBackground flag is FALSE only if wParam == m_hWnd (this view)
		CPalette* oldPalette = appDC.SelectPalette(pPal, ((HWND)wParam) != m_hWnd);

		if (oldPalette != NULL)
		{
			UINT nColorsChanged = appDC.RealizePalette();
			if (nColorsChanged > 0)
				GetDocument()->UpdateAllViews(NULL);
			appDC.SelectPalette(oldPalette, TRUE);
		}
		else
		{
			TRACE0("\tSelectPalette failed in CImageBoardView::OnPaletteChanged\n");
		}
	}

	return 0L;
}

void CImageBoardView::Rotate(double fAngle)
{
	if (m_pFloatWnd)
	{
		LPBYTE lpDIB = (LPBYTE)GlobalLock(m_pFloatWnd->m_hDibFloat);
		CDib dib;
		if (! dib.Create(lpDIB))
			return;
		GlobalUnlock(m_pFloatWnd->m_hDibFloat);
		if (fAngle == 90.0)
			dib.Rotate90();
		else if (fAngle == 180.0)
			dib.Rotate180();
		else if (fAngle == 270.0)
			dib.Rotate270();
		else
			dib.Rotate(fAngle, RGB(0,0,0));

		// get float window position
		CRect rcFloat;
		m_pFloatWnd->GetWindowRect(&rcFloat);
		CPoint ptTopLeft = rcFloat.TopLeft();
		ScreenToClient(&ptTopLeft);

		// delete old float window
		DeleteFloatWnd();
		CutSelectedRect();

		// create float window
			// get DIB width and height
		int nWidth  = (int)dib.GetWidth();
		int nHeight = (int)dib.GetHeight();
		CRect rc(ptTopLeft.x, ptTopLeft.y, ptTopLeft.x+nWidth, ptTopLeft.y+nHeight);
			// create it
		HDIB hDib = CopyHandle(dib.GetHandle());
		m_pFloatWnd	= new CFloatDibWnd(hDib, rc, this);
	}
	else	// otherwise, copy the entire DIB
	{
		if (fAngle == 90.0)
			m_pDib->Rotate90();
		else if (fAngle == 180.0)
			m_pDib->Rotate180();
		else if (fAngle == 270.0)
			m_pDib->Rotate270();
		else
			m_pDib->Rotate(fAngle, RGB(0,0,0));
	}
}

void CImageBoardView::Flip(int nDirection)
{
	if (m_pFloatWnd)
	{
		LPBYTE lpDIB = (LPBYTE)GlobalLock(m_pFloatWnd->m_hDibFloat);
		CDib dib;
		if (! dib.Create(lpDIB))
			return;
		GlobalUnlock(m_pFloatWnd->m_hDibFloat);
		switch (nDirection)
		{
		case MD_HORZ:
			dib.FlipHorz();
			break;
		case MD_VERT:
			dib.FlipVert();
			break;
		}

		// get float window position
		CRect rcFloat;
		m_pFloatWnd->GetWindowRect(&rcFloat);
		CPoint ptTopLeft = rcFloat.TopLeft();
		ScreenToClient(&ptTopLeft);

		// delete old float window
		DeleteFloatWnd();
		CutSelectedRect();

		// create float window
			// get DIB width and height
		int nWidth  = (int)dib.GetWidth();
		int nHeight = (int)dib.GetHeight();
		CRect rc(ptTopLeft.x, ptTopLeft.y, ptTopLeft.x+nWidth, ptTopLeft.y+nHeight);
			// create it
		HDIB hDib = CopyHandle(dib.GetHandle());
		m_pFloatWnd	= new CFloatDibWnd(hDib, rc, this);
	}
	else	// otherwise, copy the entire DIB
	{
		switch (nDirection)
		{
		case MD_HORZ:
			m_pDib->FlipHorz();
			break;
		case MD_VERT:
			m_pDib->FlipVert();
			break;
		}
	}
}

void CImageBoardView::Zoom(double fRatioX, double fRatioY)
{
	if (m_pFloatWnd)
	{
		LPBYTE lpDIB = (LPBYTE)GlobalLock(m_pFloatWnd->m_hDibFloat);
		CDib dib;
		if (! dib.Create(lpDIB))
			return;
		GlobalUnlock(m_pFloatWnd->m_hDibFloat);
		dib.Zoom(fRatioX, fRatioY);

		// get float window position
		CRect rcFloat;
		m_pFloatWnd->GetWindowRect(&rcFloat);
		CPoint ptTopLeft = rcFloat.TopLeft();
		ScreenToClient(&ptTopLeft);

		// delete old float window
		DeleteFloatWnd();
		CutSelectedRect();

		// create float window
			// get DIB width and height
		int nWidth  = (int)dib.GetWidth();
		int nHeight = (int)dib.GetHeight();
		CRect rc(ptTopLeft.x, ptTopLeft.y, ptTopLeft.x+nWidth, ptTopLeft.y+nHeight);
			// create it
		HDIB hDib = CopyHandle(dib.GetHandle());
		m_pFloatWnd	= new CFloatDibWnd(hDib, rc, this);
	}
	else	// otherwise, copy the entire DIB
	{
		m_pDib->Zoom(fRatioX, fRatioY);
	}
}

void CImageBoardView::ChangeImageSize(int nWidth, int nHeight)
{
	if (m_pFloatWnd)
	{
		LPBYTE lpDIB = (LPBYTE)GlobalLock(m_pFloatWnd->m_hDibFloat);
		CDib dib;
		if (! dib.Create(lpDIB))
			return;
		GlobalUnlock(m_pFloatWnd->m_hDibFloat);
		dib.ChangeImageSize(nWidth, nHeight);

		// get float window position
		CRect rcFloat;
		m_pFloatWnd->GetWindowRect(&rcFloat);
		CPoint ptTopLeft = rcFloat.TopLeft();
		ScreenToClient(&ptTopLeft);

		// delete old float window
		DeleteFloatWnd();
		CutSelectedRect();

		// create float window
			// get DIB width and height
		int nWidth  = (int)dib.GetWidth();
		int nHeight = (int)dib.GetHeight();
		CRect rc(ptTopLeft.x, ptTopLeft.y, ptTopLeft.x+nWidth, ptTopLeft.y+nHeight);
			// create it
		HDIB hDib = CopyHandle(dib.GetHandle());
		m_pFloatWnd	= new CFloatDibWnd(hDib, rc, this);
	}
	else	// otherwise, copy the entire DIB
	{
		m_pDib->ChangeImageSize(nWidth, nHeight);
	}
}

void CImageBoardView::ChangeCanvasSize(int nWidth, int nHeight, int nPosition)
{
	if (m_pFloatWnd)
	{
		LPBYTE lpDIB = (LPBYTE)GlobalLock(m_pFloatWnd->m_hDibFloat);
		CDib dib;
		if (! dib.Create(lpDIB))
			return;
		GlobalUnlock(m_pFloatWnd->m_hDibFloat);
		dib.ChangeCanvasSize(nWidth, nHeight, nPosition);

		// get float window position
		CRect rcFloat;
		m_pFloatWnd->GetWindowRect(&rcFloat);
		CPoint ptTopLeft = rcFloat.TopLeft();
		ScreenToClient(&ptTopLeft);

		// delete old float window
		DeleteFloatWnd();
		CutSelectedRect();

		// create float window
			// get DIB width and height
		int nWidth  = (int)dib.GetWidth();
		int nHeight = (int)dib.GetHeight();
		CRect rc(ptTopLeft.x, ptTopLeft.y, ptTopLeft.x+nWidth, ptTopLeft.y+nHeight);
			// create it
		HDIB hDib = CopyHandle(dib.GetHandle());
		m_pFloatWnd	= new CFloatDibWnd(hDib, rc, this);
	}
	else	// otherwise, copy the entire DIB
	{
		m_pDib->ChangeCanvasSize(nWidth, nHeight, nPosition);
	}
}

void CImageBoardView::Crop()
{
	if (! m_rcClip.IsRectEmpty())
	{
		m_pDib->Crop(m_rcClip);
		DeleteFloatWnd();
		m_rcClip.SetRectEmpty();
	}
}


HBRUSH CImageBoardView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CScrollView::OnCtlColor(pDC, pWnd, nCtlColor);
	
	if (pWnd->m_hWnd == m_EditText.m_hWnd)
		pDC->SetTextColor(m_crPenColor);
	
	// TODO: Return a different brush if the default is not desired
	return hbr;
}

int CImageBoardView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CScrollView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	m_hCursorFreeline = AfxGetApp()->LoadCursor(IDC_CURSORFREELINE);
	m_hCursorEraser = AfxGetApp()->LoadCursor(IDC_CURSORERASER);
	m_hCursorPicker = AfxGetApp()->LoadCursor(IDC_CURSORPICKER);
	m_hCursorFill = AfxGetApp()->LoadCursor(IDC_CURSORFILL);
	m_hCursorCurve = AfxGetApp()->LoadCursor(IDC_CURSORCURVE);
	
	LOGFONT lf;
	HFONT hFont = (HFONT)GetStockObject(SYSTEM_FONT);
	GetObject(hFont, sizeof(LOGFONT), &lf);
	m_pFont = new CFont;
	m_pFont->CreateFontIndirect(&lf);
	
	return 0;
}

BOOL CImageBoardView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	if (m_

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级黄色片| 777xxx欧美| 国产欧美日韩麻豆91| 麻豆精品视频在线| 5566中文字幕一区二区电影| 亚洲高清免费一级二级三级| 欧美在线啊v一区| 亚洲男人的天堂在线观看| 成年人网站91| 中文字幕av一区二区三区免费看 | 五月激情综合网| 欧美在线观看一区| 亚洲午夜影视影院在线观看| 欧美在线观看视频一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在| 91猫先生在线| 夜夜爽夜夜爽精品视频| 欧洲精品在线观看| 亚洲主播在线观看| 欧美日产在线观看| 日韩电影一区二区三区四区| 91精品国产高清一区二区三区 | 日本高清不卡在线观看| 亚洲欧美国产三级| 色综合网色综合| 一区二区久久久| 欧美高清视频在线高清观看mv色露露十八 | 欧美一区二区免费| 蜜臀av一区二区三区| 精品日产卡一卡二卡麻豆| 精品一区二区三区久久久| 精品免费一区二区三区| 国产91丝袜在线播放| 国产精品国产三级国产三级人妇| 91在线小视频| 亚洲成人综合视频| 日韩一区二区三区免费看| 韩国精品主播一区二区在线观看 | 久久综合视频网| 国产成人亚洲综合a∨猫咪| 亚洲欧洲日韩在线| 在线免费一区三区| 日韩中文字幕区一区有砖一区| 欧美一卡二卡在线观看| 国产成人啪午夜精品网站男同| 国产精品久久久久久久久久久免费看 | 大桥未久av一区二区三区中文| 亚洲丝袜美腿综合| 欧美日韩亚洲高清一区二区| 麻豆精品久久精品色综合| 久久色视频免费观看| 99久久er热在这里只有精品66| 一区二区三区成人| 欧美一级片在线观看| 国产二区国产一区在线观看| 亚洲精品视频在线观看免费| 91麻豆精品国产91久久久使用方法 | 热久久免费视频| 国产欧美一区二区精品仙草咪| 91国产丝袜在线播放| 久久av资源网| 中文字幕亚洲精品在线观看| 欧美精品乱人伦久久久久久| 国产大片一区二区| 夜夜精品浪潮av一区二区三区| 欧美v日韩v国产v| 91在线免费看| 麻豆成人av在线| 亚洲日穴在线视频| 日韩欧美成人激情| 99精品视频一区| 久久精品免费观看| 亚洲欧美电影一区二区| 欧美电影免费提供在线观看| 91婷婷韩国欧美一区二区| 久久国产精品72免费观看| 一区二区三区免费在线观看| 精品三级在线看| 欧美色国产精品| 成人午夜在线免费| 日本不卡高清视频| 亚洲女同女同女同女同女同69| 亚洲精品在线三区| 欧美午夜电影一区| 成人免费观看av| 美女高潮久久久| 一区二区三区欧美| 欧美激情在线一区二区三区| 91精品国产免费| 一道本成人在线| 国产二区国产一区在线观看| 日本vs亚洲vs韩国一区三区二区| 亚洲品质自拍视频网站| 久久一夜天堂av一区二区三区| 欧美日韩一区二区电影| 成人avav在线| 国产一区二区不卡| 午夜成人免费电影| 亚洲免费在线播放| 国产精品―色哟哟| 精品电影一区二区三区| 69成人精品免费视频| 91社区在线播放| 岛国精品一区二区| 国产精品一区二区在线播放| 日韩av不卡在线观看| 一区二区在线观看不卡| 国产精品动漫网站| 国产人成亚洲第一网站在线播放 | 亚洲欧美在线观看| 精品国免费一区二区三区| 欧美精品高清视频| 日本韩国精品一区二区在线观看| caoporen国产精品视频| 国产成人精品影院| 国产综合久久久久久久久久久久 | 一区二区三区美女| 中文字幕一区二区三区蜜月| 国产欧美一区二区三区在线老狼 | 56国语精品自产拍在线观看| 欧美视频在线观看一区| 91精品1区2区| 色综合天天狠狠| 一本大道av伊人久久综合| 成人动漫在线一区| 成人午夜在线播放| 成人黄色综合网站| 丁香激情综合五月| 国产成人综合自拍| 国产91丝袜在线18| 成人av网站在线| 成人av午夜影院| av高清不卡在线| 色综合激情五月| 在线免费观看一区| 欧美综合亚洲图片综合区| 在线看日本不卡| 欧美四级电影网| 欧美精品第1页| 日韩欧美你懂的| 久久色.com| 国产精品全国免费观看高清| 国产精品三级在线观看| 国产精品久久久久影院| 亚洲视频中文字幕| 亚洲精品高清视频在线观看| 亚洲一区二区三区四区在线免费观看 | 日韩精品一级二级| 青娱乐精品在线视频| 久久电影网电视剧免费观看| 狠狠色综合日日| 成人激情动漫在线观看| 一本久久综合亚洲鲁鲁五月天| 欧美亚洲高清一区二区三区不卡| 在线电影院国产精品| 日韩三级视频在线看| 久久久国产精品午夜一区ai换脸| 欧美国产日本视频| 亚洲精品水蜜桃| 日韩激情视频在线观看| 国产一区二区三区在线观看免费视频| 国产**成人网毛片九色| 不卡一二三区首页| 在线观看91视频| 日韩一区二区视频在线观看| 久久精品亚洲麻豆av一区二区| 成人欧美一区二区三区小说| 亚洲午夜成aⅴ人片| 麻豆国产91在线播放| 国产99精品国产| 欧美视频中文字幕| 欧美大片在线观看| 国产精品久99| 性久久久久久久| 国产成人精品免费看| 色婷婷久久一区二区三区麻豆| 欧美一区二区黄| 国产欧美精品一区二区色综合 | 久久精品亚洲乱码伦伦中文| 亚洲欧美日韩久久精品| 日日夜夜精品视频免费| 国产成人亚洲精品狼色在线 | 欧美亚一区二区| 欧美成人vps| 国产精品国产三级国产专播品爱网| 性感美女久久精品| 国产91精品免费| 欧美日韩精品一区二区| 国产日韩欧美精品一区| 亚洲bt欧美bt精品| 成人做爰69片免费看网站| 欧美日韩高清一区二区三区| 久久精品人人爽人人爽| 亚洲成人资源在线| 国产成人丝袜美腿| 欧美日韩国产bt| 亚洲欧洲精品成人久久奇米网| 日韩电影网1区2区| 91色婷婷久久久久合中文| 精品盗摄一区二区三区|