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

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

?? ddsurf.h

?? Windows 圖形編程 書籍
?? H
字號:
#pragma once

//-----------------------------------------------------------------------------------//
//              Windows Graphics Programming: Win32 GDI and DirectDraw               //
//                             ISBN  0-13-086985-6                                   //
//                                                                                   //
//  Written            by  Yuan, Feng                             www.fengyuan.com   //
//  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
//  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
//                                                                                   //
//  FileName   : ddsurf.h						                                     //
//  Description: DirectDraw surface wrapper                                          //
//  Version    : 1.00.000, May 31, 2000                                              //
//-----------------------------------------------------------------------------------//

#define SAFE_RELEASE(inf) { if ( inf ) { inf->Release(); inf = NULL; } }

// Wrapper for IDirectDrawSurface7 interface
class KDDSurface
{
protected:
	IDirectDrawSurface7 * m_pSurface;
	DDSURFACEDESC2        m_ddsd;
	HDC					  m_hDC;

public:

	KDDSurface();
	virtual void Discharge(void); // release before destructor

	virtual ~KDDSurface() // make sure everything is released
	{
		Discharge();
	}
	
	operator IDirectDrawSurface7 * & ()
	{
		return m_pSurface;
	}

	operator HDC ()
	{
		return m_hDC;
	}

	int GetWidth(void) const
	{
		return m_ddsd.dwWidth;
	}

	int GetHeight(void) const
	{
		return m_ddsd.dwHeight;
	}

	HRESULT CreatePrimarySurface(IDirectDraw7 * pDD, int nBackBuffer);
	
	const DDSURFACEDESC2 * GetSurfaceDesc(void);
	virtual HRESULT RestoreSurface(void); // restore surface if lost

	// DirectDraw Blting
	HRESULT  SetClipper(IDirectDraw7 * pDD, HWND hWnd);
	
	HRESULT Blt(LPRECT prDest, IDirectDrawSurface7 * pSrc, LPRECT prSrc, DWORD dwFlags, LPDDBLTFX pDDBltFx=NULL)
	{
		return m_pSurface->Blt(prDest, pSrc, prSrc, dwFlags, pDDBltFx);
	}

	DWORD   ColorMatch(BYTE red, BYTE green, BYTE blue);

	HRESULT FillColor(int x0, int y0, int x1, int y1, DWORD fillcolor);
	HRESULT BitBlt(int x, int y, int w, int h, IDirectDrawSurface7 * pSrc, DWORD flag=0);

	HRESULT BitBlt(int x, int y, KDDSurface & src, DWORD flag=0)
	{
		return BitBlt(x, y, src.GetWidth(), src.GetHeight(), src, flag);
	}

	HRESULT SetSourceColorKey(DWORD color);

	// Drawing using GDI device context
	HRESULT GetDC(void);		// Get DC device context handle
	HRESULT ReleaseDC(void);
	
	HRESULT DrawBitmap(const BITMAPINFO * pDIB, int dx, int dy, int dw, int dh);
	
	// Direct Pixel Access
	BYTE  * LockSurface(RECT * pRect=NULL);
	HRESULT Unlock(RECT * pRect=NULL);

	int GetPitch(void) const
	{
		return m_ddsd.lPitch;
	}

	DWORD GetPixel(int x, int y);
	BOOL  SetPixel(int x, int y, DWORD color);
	BOOL  Line(int x0, int y0, int x1, int y1, DWORD color);
	BOOL  FillRgn(HRGN hRgn, DWORD color);
};


class KLockedSurface
{
public:
	BYTE * pSurface;
	int    pitch;
	int    bpp;

	bool Initialize(KDDSurface & surface)
	{
		pSurface = surface.LockSurface(NULL);
		pitch    = surface.GetPitch();
		bpp      = surface.GetSurfaceDesc()->ddpfPixelFormat.dwRGBBitCount;
		
		return pSurface!=NULL;
	}

	BYTE & ByteAt(int x, int y)
	{
		BYTE * pPixel = (BYTE *) (pSurface + pitch * y);

		return pPixel[x];
	}

	WORD & WordAt(int x, int y)
	{
		WORD * pPixel = (WORD *) (pSurface + pitch * y);

		return pPixel[x];
	}

	RGBTRIPLE & RGBTripleAt(int x, int y)
	{
		RGBTRIPLE * pPixel = (RGBTRIPLE *) (pSurface + pitch * y);

		return pPixel[x];
	}

	DWORD & DWordAt(int x, int y)
	{
		DWORD * pPixel = (DWORD *) (pSurface + pitch * y);

		return pPixel[x];
	}

	BOOL SetPixel(int x, int y, DWORD color)
	{
		switch ( bpp )
		{
			case  8:      ByteAt(x, y) =  (BYTE) color; break;
			case 15:
			case 16:      WordAt(x, y) =  (WORD) color; break;
			case 24: RGBTripleAt(x, y) = * (RGBTRIPLE *) & color; break;
			case 32:     DWordAt(x, y) = (DWORD) color; break;
			default: return FALSE;
		}

		return TRUE;
	}

	DWORD GetPixel(int x, int y)
	{
		switch ( bpp )
		{
			case  8:  return ByteAt(x, y);
			case 15:
			case 16:  return WordAt(x, y);
			case 32:  return DWordAt(x, y);
			case 24: 
				{
					DWORD rslt = 0;
					
					* (RGBTRIPLE *) rslt = RGBTripleAt(x, y); 
					return rslt;
				}
		}

		return 0;
	}

	void Line(int x0, int y0, int x1, int y1, DWORD color);
};

/////////////////////////////////////////////////////////////

typedef enum
{
	mem_default,
	mem_system,
	mem_nonlocalvideo,
	mem_localvideo
};

class KOffScreenSurface : public KDDSurface
{
public:
	HRESULT CreateOffScreenSurface(IDirectDraw7 * pDD, int width, int height, int mem=mem_default);
	HRESULT CreateOffScreenSurfaceBpp(IDirectDraw7 * pDD, int width, int height, int bpp, int mem=mem_default);
	
	HRESULT CreateBitmapSurface(IDirectDraw7 * pDD, const BITMAPINFO * pDIB, int mem=mem_default);
	HRESULT CreateBitmapSurface(IDirectDraw7 * pDD, const TCHAR * pFileName, int mem=mem_default);

	HRESULT CreateTextureSurface(IDirect3DDevice7 * pD3DDevice, IDirectDraw7 * pDD, unsigned width, unsigned height);
	HRESULT	CreateTextureSurface(IDirect3DDevice7 * pD3DDevice, IDirectDraw7 * pDD, const BITMAPINFO * pDIB);
	HRESULT	CreateTextureSurface(IDirect3DDevice7 * pD3DDevice, IDirectDraw7 * pDD, const TCHAR * pFileName);

    HRESULT CreateZBuffer(IDirect3D7 * pD3D, IDirectDraw7 * pDD, REFCLSID riidDevice, int width, int height);

    HRESULT Attach(IDirectDrawSurface7 * pAttach)
    {
        return m_pSurface->AddAttachedSurface(pAttach);
    }
};	

template <int MaxChar>
class KDDFont : public KOffScreenSurface
{
	int      m_offset [MaxChar];  // A width
	int      m_advance[MaxChar];  // A + B + C

	int		 m_pos	  [MaxChar];  // horizontal position within font surface
	int      m_width  [MaxChar];  // - min(A, 0) + B - min(C,0)

	unsigned m_firstchar;
	int		 m_nChar;

public:
	
	HRESULT CreateFont(IDirectDraw7 * pDD, const LOGFONT & lf, unsigned firstchar, unsigned lastchar, COLORREF crColor);
	int     TextOut(IDirectDrawSurface7 * pSurface, int x, int y, const TCHAR * mess, int nChar=0);
};

template <int MaxChar>
HRESULT KDDFont<MaxChar>::CreateFont(IDirectDraw7 * pDD, const LOGFONT & lf, unsigned firstchar, unsigned lastchar, COLORREF crColor)
{
	m_firstchar = firstchar;
	m_nChar     = lastchar - firstchar + 1;
	
	if ( m_nChar > MaxChar )
		return E_INVALIDARG;
	
	HFONT hFont = CreateFontIndirect(&lf);

	if ( hFont==NULL )
		return E_INVALIDARG;

	HRESULT hr;
	ABC     abc[MaxChar];

	int height;
	{
		HDC hDC = ::GetDC(NULL);

		if ( hDC )
		{
			HGDIOBJ hOld = SelectObject(hDC, hFont);

			TEXTMETRIC tm;

			GetTextMetrics(hDC, & tm);
			height = tm.tmHeight;

			if ( GetCharABCWidths(hDC, firstchar, lastchar, abc) )
				hr = S_OK;
			else
				hr = E_INVALIDARG;

			SelectObject(hDC, hOld);
			::ReleaseDC(NULL, hDC);
		}
	}

	if ( SUCCEEDED(hr) )
	{
		int width = 0;
		
		for (int i=0; i<m_nChar; i++)
		{
			m_offset[i]  = abc[i].abcA;
			m_width[i]   =  - min(abc[i].abcA, 0) + abc[i].abcB - min(abc[i].abcC, 0);
			m_advance[i] = abc[i].abcA + abc[i].abcB + abc[i].abcC;
			
			width += m_width[i];
		}

		hr = CreateOffScreenSurface(pDD, width, height);

		if ( SUCCEEDED(hr) )
		{
			GetDC();

			int x = 0;
			
			PatBlt(m_hDC, 0, 0, GetWidth(), GetHeight(), BLACKNESS); // black
			
			SetBkMode(m_hDC, TRANSPARENT);
			SetTextColor(m_hDC, crColor); // white forground

			HGDIOBJ hOld = SelectObject(m_hDC, hFont);
			SetTextAlign(m_hDC, TA_TOP | TA_LEFT);
			
			for (int i=0; i<m_nChar; i++)
			{
				TCHAR ch = firstchar + i;

				m_pos[i] = x;
				::TextOut(m_hDC, x-m_offset[i], 0, & ch, 1);
				x += m_width[i];
			}

			SelectObject(m_hDC, hOld);
			ReleaseDC();

			SetSourceColorKey(0); // black as source color key
		}
	}

	DeleteObject(hFont);

	return hr;
};


template<int MaxChar>
int KDDFont<MaxChar>::TextOut(IDirectDrawSurface7 * pDest, int x, int y, const TCHAR * mess, int nChar)
{
	if ( nChar<=0 )
		nChar = _tcslen(mess);

	for (int i=0; i<nChar; i++)
	{
		int ch = mess[i] - m_firstchar;

		if ( (ch<0) || (ch>m_nChar) )
			ch = 0;

		RECT dst = { x + m_offset[ch],			     y, 
			         x + m_offset[ch] + m_width[ch], y + GetHeight() };

		RECT src = { m_pos[ch], 0, m_pos[ch] + m_width[ch], GetHeight() };

		pDest->Blt(& dst, m_pSurface, & src, DDBLT_KEYSRC, NULL);

		x += m_advance[ch];
	}

	return x;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91视频观看视频| 日韩在线一区二区| 欧美性受极品xxxx喷水| 麻豆精品视频在线观看视频| 中文字幕免费不卡| 欧美一级免费观看| proumb性欧美在线观看| 美女视频一区二区三区| 成人短视频下载| 日韩欧美不卡在线观看视频| 99麻豆久久久国产精品免费优播| 免费xxxx性欧美18vr| 亚洲欧洲日韩女同| 国产午夜精品美女毛片视频| 日韩一区二区三区电影| 欧美亚洲国产一区在线观看网站| 国产91精品入口| 久久99精品久久久久婷婷| 亚洲国产精品影院| 一区二区在线观看免费视频播放| 国产清纯美女被跳蛋高潮一区二区久久w | 国产成a人亚洲| 日韩av网站在线观看| 亚洲综合在线电影| 国产精品久久久一区麻豆最新章节| 日韩一区二区视频| 亚洲国产精品一区二区尤物区| 91美女片黄在线| 韩国精品在线观看| 日韩激情中文字幕| 亚洲福利电影网| 艳妇臀荡乳欲伦亚洲一区| 综合亚洲深深色噜噜狠狠网站| 久久久久久97三级| 久久综合色播五月| 精品精品国产高清一毛片一天堂| 91精品久久久久久久91蜜桃| 91精品国产入口| 日韩一级精品视频在线观看| 91精品国产高清一区二区三区蜜臀 | 亚洲欧美激情在线| 最新成人av在线| 亚洲欧美日韩国产一区二区三区| 国产精品成人网| 精品蜜桃在线看| 日韩欧美国产成人一区二区| 日韩欧美一区二区在线视频| 日韩小视频在线观看专区| 日韩精品一区二区三区视频播放 | 狠狠色丁香久久婷婷综合丁香| 蜜臀av性久久久久蜜臀aⅴ| 日韩成人免费电影| 激情六月婷婷久久| 成人小视频免费在线观看| 91在线国产观看| 欧洲激情一区二区| 日韩一区二区在线播放| 久久精品视频一区二区| 国产精品国产三级国产普通话99| 亚洲精品日韩一| 欧美a一区二区| 国产精品1区二区.| 在线精品视频免费观看| 欧美一级免费观看| 国产精品久久夜| 日韩精品视频网站| 国产精品1区二区.| 在线观看欧美精品| 欧美一区二区成人| 中国av一区二区三区| 亚洲在线视频一区| 精品一区二区三区在线播放| 成人99免费视频| 91麻豆精品国产| 日本一区二区成人在线| 午夜精品在线看| 夫妻av一区二区| 欧美久久久久久蜜桃| 久久精品网站免费观看| 亚洲福利一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 色老头久久综合| 久久人人爽爽爽人久久久| 一区二区三区四区在线| 国产一区二区三区四| 欧美日韩国产电影| 国产精品污www在线观看| 亚洲第一电影网| 国产成人av自拍| 91精品国产福利在线观看| 亚洲国产精品激情在线观看| 香蕉影视欧美成人| 不卡av在线免费观看| 欧美v国产在线一区二区三区| 亚洲色图.com| 国产成人在线视频播放| 日韩欧美中文字幕一区| 亚洲专区一二三| www.欧美色图| 久久亚洲一级片| 日韩国产欧美三级| 91行情网站电视在线观看高清版| 精品成人在线观看| 日韩精品免费专区| 欧美在线制服丝袜| 中文字幕制服丝袜一区二区三区| 久久精品国产99国产| 欧美久久久久中文字幕| 夜夜夜精品看看| 99精品欧美一区| 国产精品毛片a∨一区二区三区| 麻豆成人久久精品二区三区红 | 成年人网站91| 26uuu久久天堂性欧美| 日本一不卡视频| 欧美人伦禁忌dvd放荡欲情| 亚洲激情在线激情| 色伊人久久综合中文字幕| 中文在线一区二区| 国产成人av网站| 久久精品一区蜜桃臀影院| 久久精品国产亚洲高清剧情介绍 | 成人小视频免费在线观看| 久久嫩草精品久久久精品一| 久88久久88久久久| 欧美日韩国产成人在线91| 亚洲成人精品在线观看| 欧美最猛黑人xxxxx猛交| 亚洲自拍偷拍麻豆| 欧美色欧美亚洲另类二区| 亚洲一区二区三区中文字幕| 欧美综合视频在线观看| 亚洲二区在线视频| 欧美日韩久久一区二区| 午夜视黄欧洲亚洲| 欧美老肥妇做.爰bbww视频| 三级精品在线观看| 欧美一区二区三级| 久久精品国产77777蜜臀| 精品少妇一区二区三区日产乱码| 麻豆成人免费电影| 久久久久久久久久美女| 高清国产一区二区| 中文字幕一区二区在线播放| 99久久婷婷国产精品综合| 亚洲综合视频网| 88在线观看91蜜桃国自产| 麻豆精品视频在线| 久久精品人人做人人爽97| 成人免费高清在线观看| 亚洲男人的天堂av| 欧美在线啊v一区| 日韩成人一级大片| 国产亚洲精品aa| 91视频免费看| 日韩二区三区在线观看| 精品国产91洋老外米糕| 成人av在线一区二区三区| 一区二区高清视频在线观看| 欧美喷潮久久久xxxxx| 国产一区二区三区久久久| 亚洲少妇屁股交4| 69成人精品免费视频| 国产成人午夜精品影院观看视频 | 日韩一区二区在线观看视频播放| 狠狠色丁香婷婷综合| 中文字幕一区二| 欧美高清视频在线高清观看mv色露露十八| 久久成人免费日本黄色| 亚洲国产欧美在线| 欧美在线观看一区| 日本不卡123| 中文av字幕一区| 欧美日韩美女一区二区| 国产在线日韩欧美| 亚洲蜜桃精久久久久久久| 日韩一区二区三区高清免费看看| 风间由美性色一区二区三区| 亚洲综合久久久| 久久久久久日产精品| 色欧美日韩亚洲| 精品一区二区在线观看| 亚洲美女在线国产| 欧美精品一区二区三区在线播放| 色美美综合视频| 国产一区不卡精品| 亚洲国产日韩精品| 中文字幕成人av| 日韩一区二区麻豆国产| 色综合网色综合| 国产九色sp调教91| 天天综合色天天综合| 国产色综合一区| 91精品免费在线观看| 91福利视频网站| 国产精选一区二区三区| 视频一区中文字幕| 伊人色综合久久天天| 国产精品美女一区二区三区| 欧美一级二级三级乱码|