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

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

?? ddutil.cpp

?? VC游戲編程基礎
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
{
    HRESULT hr;

    // Create the DDraw surface
    if( FAILED( hr = pDD->CreateSurface( pddsd, &m_pdds, NULL ) ) )
        return hr;

    // Prepare the DDSURFACEDESC structure
    m_ddsd.dwSize = sizeof(m_ddsd);

    // Get the DDSURFACEDESC structure for this surface
    m_pdds->GetSurfaceDesc( &m_ddsd );

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: 
// Desc: 
//-----------------------------------------------------------------------------
HRESULT CSurface::Destroy()
{
    SAFE_RELEASE( m_pdds );
    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: CSurface::DrawBitmap()
// Desc: Draws a bitmap over an entire DirectDrawSurface, stretching the 
//       bitmap if nessasary
//-----------------------------------------------------------------------------
HRESULT CSurface::DrawBitmap( HBITMAP hBMP, 
                              DWORD dwBMPOriginX, DWORD dwBMPOriginY, 
                              DWORD dwBMPWidth, DWORD dwBMPHeight )
{
    HDC            hDCImage;
    HDC            hDC;
    BITMAP         bmp;
    DDSURFACEDESC2 ddsd;
    HRESULT        hr;

    if( hBMP == NULL || m_pdds == NULL )
        return E_INVALIDARG;

    // Make sure this surface is restored.
    if( FAILED( hr = m_pdds->Restore() ) )
        return hr;

    // Get the surface.description
    ddsd.dwSize  = sizeof(ddsd);
    m_pdds->GetSurfaceDesc( &ddsd );

    if( ddsd.ddpfPixelFormat.dwFlags == DDPF_FOURCC )
        return E_NOTIMPL;

    // Select bitmap into a memoryDC so we can use it.
    hDCImage = CreateCompatibleDC( NULL );
    if( NULL == hDCImage )
        return E_FAIL;

    SelectObject( hDCImage, hBMP );

    // Get size of the bitmap
    GetObject( hBMP, sizeof(bmp), &bmp );

    // Use the passed size, unless zero
    dwBMPWidth  = ( dwBMPWidth  == 0 ) ? bmp.bmWidth  : dwBMPWidth;     
    dwBMPHeight = ( dwBMPHeight == 0 ) ? bmp.bmHeight : dwBMPHeight;

    // Stretch the bitmap to cover this surface
    if( FAILED( hr = m_pdds->GetDC( &hDC ) ) )
        return hr;

	/*
    StretchBlt( hDC, 0, 0, 
                ddsd.dwWidth, ddsd.dwHeight, 
                hDCImage, dwBMPOriginX, dwBMPOriginY,
                dwBMPWidth, dwBMPHeight, SRCCOPY );
	*/

	BitBlt(hDC,dwBMPOriginX,dwBMPOriginY,dwBMPWidth,dwBMPHeight, hDCImage,0,0, SRCCOPY);
//	BitBlt(hDC,0,0,0,0, hDCImage,0,0, SRCCOPY);
    if( FAILED( hr = m_pdds->ReleaseDC( hDC ) ) )
        return hr;

    DeleteDC( hDCImage );

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: CSurface::DrawText()
// Desc: Draws a text string on a DirectDraw surface using hFont or the default
//       GDI font if hFont is NULL.  
//-----------------------------------------------------------------------------
HRESULT CSurface::DrawText( HFONT hFont, const TCHAR* strText, 
                            DWORD dwOriginX, DWORD dwOriginY,
                            COLORREF crBackground, COLORREF crForeground )
{
    HDC     hDC = NULL;
    HRESULT hr;

    if( m_pdds == NULL || strText == NULL )
        return E_INVALIDARG;

    // Make sure this surface is restored.
    if( FAILED( hr = m_pdds->Restore() ) )
        return hr;

    if( FAILED( hr = m_pdds->GetDC( &hDC ) ) )
        return hr;

    // Set the background and foreground color
    SetBkColor( hDC, crBackground );
    SetTextColor( hDC, crForeground );

    if( hFont )
        SelectObject( hDC, hFont );

    // Use GDI to draw the text on the surface
    TextOut( hDC, dwOriginX, dwOriginY, strText, _tcslen(strText) );

    if( FAILED( hr = m_pdds->ReleaseDC( hDC ) ) )
        return hr;

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: CSurface::ReDrawBitmapOnSurface()
// Desc: Load a bitmap from a file or resource into a DirectDraw surface.
//       normaly used to re-load a surface after a restore.
//-----------------------------------------------------------------------------
HRESULT CSurface::DrawBitmap( TCHAR* strBMP, 
                              DWORD dwDesiredWidth, DWORD dwDesiredHeight  )
{
    HBITMAP hBMP;
    HRESULT hr;

    if( m_pdds == NULL || strBMP == NULL )
        return E_INVALIDARG;

    //  Try to load the bitmap as a resource, if that fails, try it as a file
    hBMP = (HBITMAP) LoadImage( GetModuleHandle(NULL), strBMP, 
                                IMAGE_BITMAP, dwDesiredWidth, dwDesiredHeight, 
                                LR_CREATEDIBSECTION );
    if( hBMP == NULL )
    {
        hBMP = (HBITMAP) LoadImage( NULL, strBMP, IMAGE_BITMAP, 
                                    dwDesiredWidth, dwDesiredHeight, 
                                    LR_LOADFROMFILE | LR_CREATEDIBSECTION );
        if( hBMP == NULL )
            return E_FAIL;
    }

    // Draw the bitmap on this surface
    if( FAILED( hr = DrawBitmap( hBMP, 0, 0, 0, 0 ) ) )
    {
        DeleteObject( hBMP );
        return hr;
    }

    DeleteObject( hBMP );

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: 
// Desc: 
//-----------------------------------------------------------------------------
HRESULT CSurface::SetColorKey( DWORD dwColorKey )
{
    if( NULL == m_pdds )
        return E_POINTER;

    m_bColorKeyed = TRUE;

    DDCOLORKEY ddck;
    ddck.dwColorSpaceLowValue  = ConvertGDIColor( dwColorKey );
    ddck.dwColorSpaceHighValue = ConvertGDIColor( dwColorKey );
    
    return m_pdds->SetColorKey( DDCKEY_SRCBLT, &ddck );
}





//-----------------------------------------------------------------------------
// Name: CSurface::ConvertGDIColor()
// Desc: Converts a GDI color (0x00bbggrr) into the equivalent color on a 
//       DirectDrawSurface using its pixel format.  
//-----------------------------------------------------------------------------
DWORD CSurface::ConvertGDIColor( COLORREF dwGDIColor )
{
    if( m_pdds == NULL )
	    return 0x00000000;

    COLORREF       rgbT;
    HDC            hdc;
    DWORD          dw = CLR_INVALID;
    DDSURFACEDESC2 ddsd;
    HRESULT        hr;

    //  Use GDI SetPixel to color match for us
    if( dwGDIColor != CLR_INVALID && m_pdds->GetDC(&hdc) == DD_OK)
    {
        rgbT = GetPixel(hdc, 0, 0);     // Save current pixel value
        SetPixel(hdc, 0, 0, dwGDIColor);       // Set our value
        m_pdds->ReleaseDC(hdc);
    }

    // Now lock the surface so we can read back the converted color
    ddsd.dwSize = sizeof(ddsd);
    hr = m_pdds->Lock( NULL, &ddsd, DDLOCK_WAIT, NULL );
    if( hr == DD_OK)
    {
        dw = *(DWORD *) ddsd.lpSurface; 
        if( ddsd.ddpfPixelFormat.dwRGBBitCount < 32 ) // Mask it to bpp
            dw &= ( 1 << ddsd.ddpfPixelFormat.dwRGBBitCount ) - 1;  
        m_pdds->Unlock(NULL);
    }

    //  Now put the color that was there back.
    if( dwGDIColor != CLR_INVALID && m_pdds->GetDC(&hdc) == DD_OK )
    {
        SetPixel( hdc, 0, 0, rgbT );
        m_pdds->ReleaseDC(hdc);
    }
    
    return dw;    
}




//-----------------------------------------------------------------------------
// Name: CSurface::GetBitMaskInfo()
// Desc: Returns the number of bits and the shift in the bit mask
//-----------------------------------------------------------------------------
HRESULT CSurface::GetBitMaskInfo( DWORD dwBitMask, DWORD* pdwShift, DWORD* pdwBits )
{
    DWORD dwShift = 0;
    DWORD dwBits  = 0; 

    if( pdwShift == NULL || pdwBits == NULL )
        return E_INVALIDARG;

    if( dwBitMask )
    {
        while( (dwBitMask & 1) == 0 )
        {
            dwShift++;
            dwBitMask >>= 1;
        }
    }

    while( (dwBitMask & 1) != 0 )
    {
        dwBits++;
        dwBitMask >>= 1;
    }

    *pdwShift = dwShift;
    *pdwBits  = dwBits;

    return S_OK;
}





HRESULT CSurface::Clear(DWORD dwColor)
{
    if( NULL == m_pdds )
        return E_POINTER;

    // Erase the background
    DDBLTFX ddbltfx;
    ZeroMemory( &ddbltfx, sizeof(ddbltfx) );
    ddbltfx.dwSize      = sizeof(ddbltfx);
    ddbltfx.dwFillColor = dwColor;

    return m_pdds->Blt( NULL, NULL, NULL, DDBLT_COLORFILL, &ddbltfx );
}

const DDSURFACEDESC2& CSurface::GetSurfaceDesc() const
{
	return m_ddsd;
}

HRESULT CSurface::DrawRect(RECT rcRect, COLORREF crForeground )
{
    HDC     hDC = NULL;
    HRESULT hr;

    if( m_pdds == NULL )
        return E_INVALIDARG;

    // Make sure this surface is restored.
    if( FAILED( hr = m_pdds->Restore() ) )
        return hr;

    if( FAILED( hr = m_pdds->GetDC( &hDC ) ) )
        return hr;

	HPEN hPen= CreatePen(PS_SOLID,    // pen style
                   0,        // pen width
                   crForeground   // pen color
    );
	HPEN hOldPen=(HPEN)SelectObject(hDC,(HGDIOBJ)hPen);

    // Use GDI to draw the rectangle
    DrawEdge(hDC, &rcRect, EDGE_ETCHED, BF_RECT);

    if( FAILED( hr = m_pdds->ReleaseDC( hDC ) ) )
        return hr;

	SelectObject(hDC,(HGDIOBJ) hOldPen);
	DeleteObject(hPen);
    return S_OK;

}

HRESULT CSurface::DrawLine(POINT p1, POINT p2, COLORREF crForeground)
{
    HDC     hDC = NULL;
    HRESULT hr;

    if( m_pdds == NULL )
        return E_INVALIDARG;

    // Make sure this surface is restored.
    if( FAILED( hr = m_pdds->Restore() ) )
        return hr;

    if( FAILED( hr = m_pdds->GetDC( &hDC ) ) )
        return hr;

	HPEN hPen= CreatePen(PS_SOLID,    // pen style
                   0,        // pen width
                   crForeground   // pen color
    );
	HPEN hOldPen=(HPEN)SelectObject(hDC,(HGDIOBJ)hPen);

    // Use GDI to draw the line
    MoveToEx(hDC, p1.x, p1.y, NULL);
	LineTo(hDC, p2.x, p2.y);
    if( FAILED( hr = m_pdds->ReleaseDC( hDC ) ) )
        return hr;

	SelectObject(hDC,(HGDIOBJ) hOldPen);
	DeleteObject(hPen);
    return S_OK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品在线播放午夜| 欧美绝品在线观看成人午夜影视| 99视频有精品| 欧美一二三区在线观看| 国产无人区一区二区三区| 亚洲一区二区在线播放相泽| 成人做爰69片免费看网站| 欧美福利视频导航| 一区二区三区鲁丝不卡| 国产精品羞羞答答xxdd| 91精品国产一区二区三区| 国产精品白丝在线| 国产精品原创巨作av| 欧美日韩精品一区二区三区四区| 日本一区二区三区电影| 加勒比av一区二区| 在线成人免费视频| 亚洲第一激情av| 99国产精品久久久久久久久久久 | 久久疯狂做爰流白浆xx| 97se狠狠狠综合亚洲狠狠| 久久五月婷婷丁香社区| 日韩精品一级二级| 欧美精品色综合| 亚洲成人资源在线| 在线日韩国产精品| 亚洲欧美日韩系列| 91蜜桃在线免费视频| 国产精品日韩成人| 国产.欧美.日韩| 欧美精品一区二区三| 韩国女主播成人在线观看| 日韩一区二区免费电影| 丝袜a∨在线一区二区三区不卡| 色综合久久中文综合久久牛| 国产精品女主播在线观看| 国内精品国产成人国产三级粉色| 日韩欧美一区在线| 久久99久国产精品黄毛片色诱| 91精品国产品国语在线不卡| 日韩黄色小视频| 欧美成人一区二区三区片免费| 免费看欧美美女黄的网站| 精品美女在线播放| 国产精品一卡二卡在线观看| 国产日韩高清在线| a在线欧美一区| 樱花影视一区二区| 欧美精选一区二区| 精品一区二区三区在线视频| 精品久久久久久久久久久院品网| 国模冰冰炮一区二区| 国产精品网友自拍| 色婷婷久久99综合精品jk白丝| 亚洲在线观看免费视频| 日韩一区二区视频| 国产精品一区二区在线播放| 国产精品久久久久永久免费观看| 99久久精品国产网站| 亚洲一区二三区| 欧美成人精品二区三区99精品| 国产aⅴ精品一区二区三区色成熟| 国产精品久久久久久久久免费樱桃| 国产一区二区三区免费播放| 日本视频中文字幕一区二区三区| 欧美精品自拍偷拍| 国产一区二区三区免费在线观看 | 欧美在线视频日韩| 老汉av免费一区二区三区 | 日韩欧美一级精品久久| 国产专区欧美精品| 亚洲免费在线观看视频| 日韩欧美一级特黄在线播放| 成人av电影在线| 裸体一区二区三区| 亚洲天堂精品视频| 日韩精品资源二区在线| 91麻豆国产在线观看| 麻豆国产精品官网| 亚洲日本在线看| 久久久久高清精品| 91精品久久久久久久99蜜桃| 成人91在线观看| 免费成人小视频| 亚洲妇熟xx妇色黄| 中文字幕中文在线不卡住| 日韩欧美一二区| 欧美日韩三级一区| 99精品黄色片免费大全| 国产精品综合一区二区| 日本免费新一区视频 | 久久久久久久性| 色婷婷av久久久久久久| 国产一区二区三区久久悠悠色av| 亚洲色图视频网站| 不卡免费追剧大全电视剧网站| 免费高清在线视频一区·| 亚洲图片激情小说| 久久久国产精品麻豆| 欧美三级午夜理伦三级中视频| 欧美成va人片在线观看| 欧美图片一区二区三区| 国产精品1区2区| 成人免费高清视频在线观看| 精品国产乱码久久久久久久 | 成人av免费在线| 东方欧美亚洲色图在线| 不卡区在线中文字幕| 久久国产麻豆精品| 成人午夜电影网站| 色综合久久中文字幕| 欧美日韩三级一区| 精品国产免费人成电影在线观看四季| 日韩欧美国产精品| 精品久久久久久无| 专区另类欧美日韩| 视频一区视频二区在线观看| 免费精品视频在线| 国产精品一区不卡| 色噜噜狠狠成人中文综合| 色国产综合视频| 91精品国产福利| 国产精品免费视频网站| 一区二区三区不卡在线观看| 有码一区二区三区| 国产一区欧美日韩| heyzo一本久久综合| 欧美日本视频在线| 国产亚洲制服色| 亚洲精品日韩专区silk| 天堂成人国产精品一区| 国产+成+人+亚洲欧洲自线| 精品视频一区三区九区| 日韩欧美一区二区不卡| 亚洲视频狠狠干| 美女视频第一区二区三区免费观看网站| 久久精品久久久精品美女| 色域天天综合网| 久久综合九色欧美综合狠狠| 自拍视频在线观看一区二区| 六月丁香综合在线视频| 91免费观看视频| 久久久国产综合精品女国产盗摄| 一区二区三区四区av| 国产一区二区在线看| 欧美天堂亚洲电影院在线播放| 国产视频一区不卡| 夜夜嗨av一区二区三区四季av| 丁香六月综合激情| 日韩视频国产视频| 一区二区三区四区不卡在线| 国产成人午夜99999| 欧美卡1卡2卡| 爽好久久久欧美精品| 91浏览器打开| 国产清纯美女被跳蛋高潮一区二区久久w | 中文字幕一区在线观看| 青青草视频一区| 日本丶国产丶欧美色综合| 欧美一级一区二区| 丝袜美腿亚洲一区| 欧美曰成人黄网| 国产欧美日韩麻豆91| 极品尤物av久久免费看| 欧美一区二区免费| 午夜精品免费在线观看| 色综合久久久久久久久久久| 中文无字幕一区二区三区| 免费人成在线不卡| 91精品国产综合久久久久久久| 日韩一区在线播放| 六月丁香婷婷久久| 欧美精品一区二区三区很污很色的 | 欧美videos中文字幕| 亚洲va天堂va国产va久| 色综合天天综合网天天狠天天| 久久久影院官网| 成人午夜免费电影| 精品对白一区国产伦| 久久精品免费看| 日韩久久久精品| 一区二区三区在线观看欧美| 日本精品视频一区二区三区| 亚洲欧美区自拍先锋| 色综合久久中文字幕| 亚洲综合成人网| 欧美综合一区二区三区| 日韩在线观看一区二区| 欧美日韩精品二区第二页| 午夜一区二区三区在线观看| 日本高清视频一区二区| 午夜激情综合网| 欧美日韩小视频| 日韩av不卡一区二区| 91精品一区二区三区久久久久久| 蜜桃精品视频在线| 日韩午夜av电影| 九九视频精品免费| 26uuu欧美| 99久久精品国产麻豆演员表|