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

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

?? bitmap.cpp

?? 超級瑪麗經典小游戲源碼,供大家參考學習.
?? CPP
字號:
//-----------------------------------------------------------------------------
//
// Copyright (C) July 24, 2000 by Zhang Yong
// Email: z-meng@yeah.net
// This source is available for distribution and/or modification
// only under the terms of the GPL license.
//
// The source is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// FITNESS FOR A PARTICULAR PURPOSE. See the GPL.txt for more details.
//
//-----------------------------------------------------------------------------

#include "../bitmap.h"


extern LPDIRECTDRAW			g_pDD;
extern LPDIRECTDRAWSURFACE	g_pddsBackBuffer;

void TRACE( char *format, ... );

#define COLORKEY	RGB(255,60,174)


LPDIRECTDRAWSURFACE DDCreateSurface( int width, int height )
{
	DDSURFACEDESC	ddsd;
	ZeroMemory( &ddsd, sizeof(ddsd) );
	ddsd.dwSize = sizeof(ddsd);
	ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
	ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
	ddsd.dwWidth = width;
	ddsd.dwHeight = height;

	LPDIRECTDRAWSURFACE pdds;
	if( FAILED(g_pDD->CreateSurface( &ddsd, &pdds, NULL )) )
		return NULL;

	return pdds;
}



HRESULT DDCopyBitmap( LPDIRECTDRAWSURFACE pdds, 
						HBITMAP hbm, int x, int y, 
						int dx, int dy)
{
    HDC                     hdcImage;
    HDC                     hdc;
    BITMAP                  bm;
    DDSURFACEDESC			ddsd;
    HRESULT                 hr;

    if (hbm == NULL || pdds == NULL)
        return E_FAIL;
    //
    // Make sure this surface is restored.
    //
    pdds->Restore();
    //
    // Select bitmap into a memoryDC so we can use it.
    //
    hdcImage = CreateCompatibleDC(NULL);
    if (!hdcImage)
        TRACE("createcompatible dc failed\n");
    SelectObject(hdcImage, hbm);
    //
    // Get size of the bitmap
    //
    GetObject(hbm, sizeof(bm), &bm);
    dx = dx == 0 ? bm.bmWidth : dx;     // Use the passed size, unless zero
    dy = dy == 0 ? bm.bmHeight : dy;
    //
    // Get size of surface.
    //
    ddsd.dwSize = sizeof(ddsd);
    ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
    pdds->GetSurfaceDesc(&ddsd);

    if ((hr = pdds->GetDC(&hdc)) == DD_OK)
    {
        StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y,
                   dx, dy, SRCCOPY);
        pdds->ReleaseDC(hdc);
    }
    DeleteDC(hdcImage);
    return hr;
}



//-----------------------------------------------------------------------------
// Name: DDLoadBitmap()
// Desc: Create a DirectDrawSurface from a bitmap resource.
//-----------------------------------------------------------------------------
LPDIRECTDRAWSURFACE DDLoadBitmap( LPCSTR szBitmap, int dx, int dy)
{
    HBITMAP                 hbm;
    BITMAP                  bm;
    IDirectDrawSurface		*pdds;

    //
    //  Try to load the bitmap as a resource, if that fails, try it as a file
    //
    hbm = (HBITMAP) LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, dx,
                              dy, LR_CREATEDIBSECTION);
    if (hbm == NULL)
        hbm = (HBITMAP) LoadImage(NULL, szBitmap, IMAGE_BITMAP, dx, dy,
                                  LR_LOADFROMFILE | LR_CREATEDIBSECTION);
    if (hbm == NULL)
        return NULL;
    //
    // Get size of the bitmap
    //
    GetObject(hbm, sizeof(bm), &bm);
    //
    // Create a DirectDrawSurface for this bitmap
    //
    pdds = DDCreateSurface( bm.bmWidth, bm.bmHeight );
	if( !pdds )
        return NULL;
    DDCopyBitmap(pdds, hbm, 0, 0, 0, 0);
    DeleteObject(hbm);
    return pdds;
}




//-----------------------------------------------------------------------------
// Name: DDReLoadBitmap()
// Desc: Load a bitmap from a file or resource into a directdraw surface.
//       normaly used to re-load a surface after a restore.
//-----------------------------------------------------------------------------
HRESULT
DDReLoadBitmap(IDirectDrawSurface *pdds, LPCSTR szBitmap)
{
    HBITMAP                 hbm;
    HRESULT                 hr;

    //
    //  Try to load the bitmap as a resource, if that fails, try it as a file
    //
    hbm = (HBITMAP) LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, 0,
                              0, LR_CREATEDIBSECTION);
    if (hbm == NULL)
        hbm = (HBITMAP) LoadImage(NULL, szBitmap, IMAGE_BITMAP, 0, 0,
                                  LR_LOADFROMFILE | LR_CREATEDIBSECTION);
    if (hbm == NULL)
    {
        TRACE( "handle is null\n" );
        return E_FAIL;
    }
    hr = DDCopyBitmap(pdds, hbm, 0, 0, 0, 0);
    if (hr != DD_OK)
    {
        TRACE( "ddcopybitmap failed\n" );
    }
    DeleteObject(hbm);
    return hr;
}



//-----------------------------------------------------------------------------
// Name: DDColorMatch()
// Desc: Convert a RGB color to a pysical color.
//       We do this by leting GDI SetPixel() do the color matching
//       then we lock the memory and see what it got mapped to.
//-----------------------------------------------------------------------------
DWORD DDColorMatch(LPDIRECTDRAWSURFACE pdds, COLORREF rgb)
{
    COLORREF                rgbT;
    HDC                     hdc;
    DWORD                   dw = CLR_INVALID;
    DDSURFACEDESC			ddsd;
    HRESULT                 hres;

    //
    //  Use GDI SetPixel to color match for us
    //
    if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK)
    {
        rgbT = GetPixel(hdc, 0, 0);     // Save current pixel value
        SetPixel(hdc, 0, 0, rgb);       // Set our value
        pdds->ReleaseDC(hdc);
    }
    //
    // Now lock the surface so we can read back the converted color
    //
    ddsd.dwSize = sizeof(ddsd);
    while ((hres = pdds->Lock(NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING)
        ;
    if (hres == DD_OK)
    {
        dw = *(DWORD *) ddsd.lpSurface;                 // Get DWORD
        if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
            dw &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1;  // Mask it to bpp
        pdds->Unlock(NULL);
    }
    //
    //  Now put the color that was there back.
    //
    if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK)
    {
        SetPixel(hdc, 0, 0, rgbT);
        pdds->ReleaseDC(hdc);
    }
    return dw;
}


//-----------------------------------------------------------------------------
// Name: DDSetColorKey()
// Desc: Set a color key for a surface, given a RGB.
//       If you pass CLR_INVALID as the color key, the pixel
//       in the upper-left corner will be used.
//-----------------------------------------------------------------------------
HRESULT DDSetColorKey(LPDIRECTDRAWSURFACE pdds, COLORREF rgb)
{
    if( !pdds )
		return E_FAIL;
	
	DDCOLORKEY              ddck;
    ddck.dwColorSpaceLowValue = DDColorMatch(pdds, rgb);
    ddck.dwColorSpaceHighValue = ddck.dwColorSpaceLowValue;
	return pdds->SetColorKey(DDCKEY_SRCBLT, &ddck);
}




//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CBitmap::CBitmap()
{
	m_pdds = NULL;
}


void CBitmap::Release()
{
	if( m_pdds )
	{
		m_pdds->Release();
		m_pdds = NULL;
	}
}


BOOL CBitmap::Load( char *filename )
{
	m_pdds = DDLoadBitmap( filename, 0, 0 );
	if( m_pdds )
	{
		DDSetColorKey( m_pdds, COLORKEY );
		return TRUE;
	}
	return FALSE;
}



void CBitmap::Draw( int x, int y, RECT &rc )
{
	if( m_pdds )
	{
		g_pddsBackBuffer->BltFast( x, y, m_pdds, &rc,
			DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );
	}
}


void CBitmap::Restore( char *filename )
{
	DDReLoadBitmap( m_pdds, filename );
	DDSetColorKey( m_pdds, COLORKEY );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日免费三级在线| 成人91在线观看| 亚洲精品免费在线| 日韩欧美在线一区二区三区| 99久久精品免费看| 亚洲成人一区在线| 国产午夜精品一区二区三区视频| 国产伦精一区二区三区| 亚洲日本va在线观看| 日韩一级视频免费观看在线| 成人动漫一区二区| 五月综合激情日本mⅴ| 久久久国际精品| 91高清视频在线| 国产麻豆欧美日韩一区| 亚洲乱码中文字幕| 欧美精品一区二区三区视频| 欧美性猛片xxxx免费看久爱| 国产精品一区二区男女羞羞无遮挡| 亚洲视频精选在线| 日韩一级欧美一级| 在线视频欧美精品| 懂色av一区二区三区免费看| 美女精品一区二区| 久久综合色一综合色88| 国产精品一二二区| 亚洲一二三级电影| 欧美国产日韩精品免费观看| 欧美福利电影网| 色婷婷狠狠综合| 国产91精品一区二区麻豆亚洲| 日韩黄色小视频| 亚洲高清免费观看高清完整版在线观看| 久久久久久久久久看片| 欧美军同video69gay| 成人性生交大片免费| 加勒比av一区二区| 亚洲一区二区av电影| 中文字幕在线播放不卡一区| 欧美精品一区二区高清在线观看 | 国产一区二区电影| 亚洲精品国产无套在线观| 国产午夜精品久久| 精品免费日韩av| 91麻豆精品国产91久久久资源速度 | 不卡视频在线观看| 国产精品1区二区.| 国产一区二三区| 国产中文字幕精品| 久久精品99国产国产精| 日本视频中文字幕一区二区三区| 一区二区国产视频| 亚洲女人小视频在线观看| 精品国免费一区二区三区| 精品视频免费在线| 欧美性猛片xxxx免费看久爱| 成人爱爱电影网址| 国产乱人伦偷精品视频不卡| 国产麻豆成人传媒免费观看| 日本色综合中文字幕| 蜜桃精品在线观看| 另类欧美日韩国产在线| 久久91精品国产91久久小草| 狠狠狠色丁香婷婷综合久久五月| 久久66热偷产精品| 国产专区综合网| 成人午夜短视频| heyzo一本久久综合| 丁香一区二区三区| 粉嫩高潮美女一区二区三区| 99久久99久久精品国产片果冻| 不卡的av在线播放| 色综合天天综合网天天狠天天| 91久久精品国产91性色tv| 欧美亚日韩国产aⅴ精品中极品| 欧美亚洲综合网| 日韩午夜av一区| 久久久久久久久久久久电影| 国产精品毛片大码女人| 亚洲色图视频网站| 亚洲成av人**亚洲成av**| 日日夜夜免费精品| 国产一区二区三区免费| 国产精品亚洲专一区二区三区 | 欧美一二三四在线| 日韩一二三四区| 日韩免费看网站| 久久精品在线观看| 国产精品欧美极品| 中文字幕中文字幕在线一区 | 日韩精品欧美精品| 精品一区二区三区免费毛片爱| 国产精品自拍一区| 色综合咪咪久久| 欧美性受极品xxxx喷水| 日韩免费在线观看| 久久亚洲精华国产精华液| 国产精品入口麻豆九色| 亚洲色图.com| 久久精品噜噜噜成人88aⅴ| 国产精品一区二区免费不卡 | 精品久久久久久最新网址| 中文字幕精品—区二区四季| 三级久久三级久久| 成人做爰69片免费看网站| 欧洲在线/亚洲| 久久九九99视频| 水蜜桃久久夜色精品一区的特点| 国产老肥熟一区二区三区| 91黄色在线观看| 精品国产一区a| 一区二区理论电影在线观看| 国产资源在线一区| 欧美三级电影在线看| 久久精品人人做人人综合 | 天天综合网天天综合色| 国产一区 二区 三区一级| 欧美三级乱人伦电影| 中文字幕二三区不卡| 日本欧美加勒比视频| 一本色道久久综合狠狠躁的推荐 | 欧美在线观看18| 国产精品剧情在线亚洲| 久久精品国产第一区二区三区| 色老综合老女人久久久| 国产亚洲欧美日韩在线一区| 青青青伊人色综合久久| 色婷婷久久久综合中文字幕| 国产精品人妖ts系列视频| 日本美女一区二区三区| 在线视频综合导航| 国产精品久久久久aaaa樱花| 国产成人av一区| 日韩三级视频中文字幕| 丝袜美腿亚洲一区| 91行情网站电视在线观看高清版| 亚洲国产精品二十页| 精品一区二区三区在线播放| 欧美一区二区三区喷汁尤物| 亚洲综合免费观看高清在线观看| 成人av网站在线观看| 久久综合九色综合97_久久久| 免费高清在线视频一区·| 欧美精品欧美精品系列| 一区二区三区在线高清| 91一区在线观看| 亚洲欧美精品午睡沙发| jlzzjlzz亚洲女人18| 国产日韩欧美激情| 国产一区二区看久久| 久久综合九色综合97婷婷女人 | 捆绑调教美女网站视频一区| 欧美一区二区成人6969| 日本aⅴ精品一区二区三区 | 99热精品国产| 国产精品伦一区| 不卡一二三区首页| 国产精品盗摄一区二区三区| 91尤物视频在线观看| 亚洲青青青在线视频| 91丨九色porny丨蝌蚪| 亚洲另类中文字| 欧美三级欧美一级| 午夜电影久久久| 日韩精品一区二区三区在线播放 | 欧美亚洲综合网| 亚洲成人av电影| 日韩一区二区三区视频| 激情综合色播激情啊| 欧美精彩视频一区二区三区| 成人av电影在线观看| 亚洲女同ⅹxx女同tv| 欧美日韩免费高清一区色橹橹| 天天操天天干天天综合网| 日韩一卡二卡三卡四卡| 国产成人精品一区二区三区四区| 亚洲国产高清在线| 色哟哟欧美精品| 日韩综合小视频| 久久综合色鬼综合色| av激情综合网| 天堂va蜜桃一区二区三区| 精品久久久久一区二区国产| 成人国产精品免费网站| 亚洲综合成人在线视频| 欧美一二三四在线| 国产福利一区二区三区视频| 亚洲乱码中文字幕综合| 91麻豆精品国产91久久久久久 | 午夜精品福利一区二区三区蜜桃| 欧美一级在线视频| 国产大陆精品国产| 亚洲在线视频免费观看| 欧美成va人片在线观看| 99久久er热在这里只有精品15 | 亚洲欧美在线高清| 欧美不卡123| 欧美日韩高清一区| av网站免费线看精品| 国产麻豆精品在线观看|