青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

我的玻璃盒子

一個(gè)圖片加載與繪制類(使用GDI輸出圖片)

這是一個(gè)圖片加載與繪制的類,使用GDI將圖片文件繪制到DC上,可以用于圖片顯示,程序換膚等應(yīng)用場合。
其中部分代碼來源于互聯(lián)網(wǎng),代碼作者不詳,我只進(jìn)行了改進(jìn)和增補(bǔ),如果來源作者看到,還望諒解。

一、頭文件(CEnBitmap.h)

/**///////////////////////////////////////////////////////////////////////////
///    
///    @file    EnBitmap.h
///    
///    @brief    Inherite from CBitmap, expanding some draw features
///    
///    @author    XuYu
///    @version    1.0
///    @date    2007-07-26
///
//////////////////////////////////////////////////////////////////////////


#if !defined(AFX_ENBITMAP_H__76F269F6_895A_48EC_BA09_7D3BEF0438E7__INCLUDED_)
#define AFX_ENBITMAP_H__76F269F6_895A_48EC_BA09_7D3BEF0438E7__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CEnBitmap : public CBitmap 
{
public:
    CEnBitmap();
    
virtual ~CEnBitmap();

    BOOL LoadImage(UINT uIDRes, LPCTSTR szResourceType, HMODULE hInst 
= NULL, COLORREF crBack = 0);
    BOOL LoadImage(LPCTSTR lpctImagePath, COLORREF crBack
=0);
    BOOL LoadImage(HBITMAP hBitmap);
    BOOL LoadImage2(UINT uIDRes, LPCTSTR lpctResType, HMODULE hInst
=NULL, COLORREF crBack=0);
    
int GetWidth()
    
{
        BITMAP bm;
        memset( 
&bm, 0sizeof(bm) );
        GetBitmap(
&bm);
        
return bm.bmWidth;
    }

    
int GetHeight()
    
{
        BITMAP bm;
        memset( 
&bm, 0sizeof(bm) );
        GetBitmap(
&bm);
        
return bm.bmHeight;
    }

    CRect GetRect()
    
{
        
return CRect(00, GetWidth(), GetHeight());
    }

    BOOL ExtendDraw(CDC 
*pDC,CRect rc, int nX, int nY);
    BOOL ExtendDrawImage(CEnBitmap 
&bmp, CRect rc, int nX, int nY);
    BOOL StretchDraw(CDC 
*pDC, LPRECT r, LPRECT sr);
    BOOL StretchDraw(CDC 
*pDC, LPRECT r);
    BOOL Draw(CDC 
*pDC, LPRECT r);
    
private:
    
static int GetImageType(LPCTSTR lpctImagePath);
    
static HBITMAP ExtractBitmap(IPicture* pPicture, COLORREF crBack = 0);
    
static HBITMAP LoadImageFile(LPCTSTR lpctImagePath, COLORREF crBack = 0);
    
static HBITMAP LoadImageResource(UINT uIDRes, LPCTSTR szResourceType, HMODULE hInst = NULL, COLORREF crBack = 0);

    
static BOOL GetResource(LPCTSTR lpctName, LPCTSTR lpctType, HMODULE hInst, void* pRes, int& nBufSize);
    
static IPicture* LoadFromBuffer(BYTE* pBuff, int nSize);
    BOOL AttachEx(IPicture
* pPicture, COLORREF crBack);
}
;

#endif // !defined(AFX_ENBITMAP_H__76F269F6_895A_48EC_BA09_7D3BEF0438E7__INCLUDED_)

二、源文件(CEnBitmap.cpp)
#include "stdafx.h"
#include 
"EnBitmap.h"

/**//// Definition of picture type
enum 
{
    FT_BMP,
    FT_JPG,
    FT_UNKNOWN
}
;

CEnBitmap::CEnBitmap()
{

}


CEnBitmap::
~CEnBitmap()
{
}


/**///////////////////////////////////////////////////////////////////////////
///
///    @brief    Get picture type, only support JPG and BMP
///
///    @param [in] lpctImagePath    The picture full path
///
//////////////////////////////////////////////////////////////////////////

int CEnBitmap::GetImageType(LPCTSTR lpctImagePath)
{
    size_t nLen 
= _tcslen(lpctImagePath);
    TCHAR
* lptImagePath = new TCHAR[nLen+1];
    memset(lptImagePath,
0,nLen+1);
    _tcscpy(lptImagePath, lpctImagePath);
    
    CharUpper(lptImagePath);
    
    TCHAR lptExtension[
5= {0};
    size_t i
=nLen-4;
    size_t j
=0;
    
for(; i<nLen; i++,j++)
        lptExtension[j] 
= lptImagePath[i];
    
    delete[] lptImagePath;
    
    
if(_tcscmp(lptExtension,_T(".BMP")) == 0)
        
return FT_BMP;
    
if(_tcscmp(lptExtension,_T(".JPG")) == 0)
        
return FT_JPG;
    
    
return FT_UNKNOWN;
}

/**///////////////////////////////////////////////////////////////////////////
///
///    @brief    Extract a picture use IPicture interface
///
///    @param [in] pPicture    IPicture interface pointer
///    @param [in] crBack        Mask color to make transparent
///
//////////////////////////////////////////////////////////////////////////

HBITMAP CEnBitmap::ExtractBitmap(IPicture* pPicture, COLORREF crBack /**//* = 0 */)
{
    ATLASSERT(pPicture);
    
    
if (!pPicture)
        
return NULL;
    
    CBitmap bmMem;
    CDC dcMem;
    HWND hwndDesktopWnd 
= ::GetDesktopWindow();
    HDC hDesktopDC 
= ::GetDC(hwndDesktopWnd);
    CDC
* pDC = new CDC(hDesktopDC);
    
    
if (dcMem.CreateCompatibleDC(pDC->m_hDC))
    
{
        
long hmWidth;
        
long hmHeight;
        
        pPicture
->get_Width(&hmWidth);
        pPicture
->get_Height(&hmHeight);
        
        
int nWidth    = MulDiv(hmWidth, pDC->GetDeviceCaps(LOGPIXELSX), HIMETRIC_INCH);
        
int nHeight    = MulDiv(hmHeight, pDC->GetDeviceCaps(LOGPIXELSY), HIMETRIC_INCH);
        
        
if (bmMem.CreateCompatibleBitmap(pDC->m_hDC, nWidth, nHeight))
        
{
            HBITMAP hOldBM 
= dcMem.SelectBitmap(bmMem.m_hBitmap);
            
            
if (crBack != -1)
                dcMem.FillSolidRect(
00, nWidth, nHeight, crBack);
            
            HRESULT hr 
= pPicture->Render(dcMem, 00, nWidth, nHeight, 0, hmHeight, hmWidth, -hmHeight, NULL);
            dcMem.SelectBitmap(hOldBM);
        }

    }

    
    ::ReleaseDC(hwndDesktopWnd, pDC
->m_hDC);
    
if(dcMem.m_hDC) ::DeleteDC(dcMem.Detach());
    ::DeleteObject(hDesktopDC);
    
if(pDC->m_hDC) ::DeleteDC(pDC->Detach());
    
    
return (HBITMAP)bmMem.Detach();
}


/**///////////////////////////////////////////////////////////////////////////
///
///    @brief    Load a picture from full path
///
///    @param [in] lpctImagePath    The full path of picture
///    @param [in] crBack        Mask color to make transparent
///
//////////////////////////////////////////////////////////////////////////

HBITMAP CEnBitmap::LoadImageFile(LPCTSTR lpctImagePath, COLORREF crBack /**//* = 0 */)
{
    
int nImgType = GetImageType(lpctImagePath);
    USES_CONVERSION;

    
switch(nImgType)
    
{
    
case FT_BMP:
        
return (HBITMAP)::LoadImage(NULL, lpctImagePath, IMAGE_BITMAP, 00, LR_LOADFROMFILE);
    
case FT_UNKNOWN:
        
return NULL;
    
default:
        
{
            IPicture
* pPic = NULL;
            HBITMAP hbm 
= NULL;
            HRESULT hr 
= OleLoadPicturePath(T2OLE((LPTSTR)lpctImagePath), NULL, 0, crBack, IID_IPicture, (LPVOID *)&pPic);
            
if(pPic)
            
{
                hbm 
= ExtractBitmap(pPic, crBack);
                pPic
->Release();
            }

            
            
return hbm;
        }

    }

    
    
return NULL;
}

/**///////////////////////////////////////////////////////////////////////////
///
///    @brief    Load a picture from resource ID
///
///    @param [in] uIDRes    Resource ID
///    @param [in] szResourceType    Resource type
///    @param [in] hInst    Instance including resources
///    @param [in] crBack        Mask color to make transparent
///
///    @note This method need to valid
///
//////////////////////////////////////////////////////////////////////////

HBITMAP CEnBitmap::LoadImageResource(UINT uIDRes, LPCTSTR szResourceType, HMODULE hInst /**//* = NULL */, COLORREF crBack /**//* = 0 */)
{
    BYTE
* pBuff = NULL;
    
int nSize = 0;
    HBITMAP hbm 
= NULL;
    
    
// first call is to get buffer size
    if (GetResource(MAKEINTRESOURCE(uIDRes), szResourceType, hInst, 0, nSize))
    
{
        
if (nSize > 0)
        
{
            pBuff 
= new BYTE[nSize];
            
            
// this loads it
            if (GetResource(MAKEINTRESOURCE(uIDRes), szResourceType, hInst, pBuff, nSize))
            
{
                IPicture
* pPicture = LoadFromBuffer(pBuff, nSize);
                
                
if (pPicture)
                
{
                    hbm 
= ExtractBitmap(pPicture, crBack);
                    pPicture
->Release();
                }

            }

            
            delete [] pBuff;
        }

    }

    
    
return hbm;
}

/**///////////////////////////////////////////////////////////////////////////
///
///    @brief    Load a picture from full path of picture
///
///    @param [in] lpctImagePath    Full path of picture
///    @param [in] crBack        Mask color to make transparent
///
///    @note This is the entry method
///
//////////////////////////////////////////////////////////////////////////

BOOL CEnBitmap::LoadImage(LPCTSTR lpctImagePath, COLORREF crBack/**//* =0 */)
{
    
if(m_hBitmap != NULL)
    
{
        DeleteObject();
        Detach();
    }

    
    Attach(LoadImageFile(lpctImagePath, crBack));
    
    
return (m_hBitmap == NULL) ? FALSE : TRUE;
}

/**///////////////////////////////////////////////////////////////////////////
///
///    @brief    Load a picture from resource ID and type
///
///    @param [in] uIDRes    Resource ID
///    @param [in] szResourceType    Resource type
///    @param [in] hInst    Instance including resources
///    @param [in] crBack        Mask color to make transparent
///
///    @note This is the entry method
///
//////////////////////////////////////////////////////////////////////////

BOOL CEnBitmap::LoadImage(UINT uIDRes, LPCTSTR szResourceType, HMODULE hInst /**//* = NULL */, COLORREF crBack /**//* = 0 */)
{
    ATLASSERT(m_hBitmap 
== NULL);
    
    
if (m_hBitmap != NULL)
        
return TRUE;
    
    Attach(LoadImageResource(uIDRes, szResourceType, hInst, crBack));

    
return (m_hBitmap == NULL) ? FALSE : TRUE;
}


/**///////////////////////////////////////////////////////////////////////////
///
///    @brief    Load a bitmap from handle
///
///    @param [in] hBitmap    Handle of a bitmap
///
///    @note This method need to valid
///
//////////////////////////////////////////////////////////////////////////

BOOL CEnBitmap::LoadImage(HBITMAP hBitmap)
{
    
if(m_hBitmap != NULL)
    
{
        DeleteObject();
        Detach();
    }


    Attach(hBitmap);

    
return (m_hBitmap == NULL) ? FALSE : TRUE;
}


/**///////////////////////////////////////////////////////////////////////////
///
///    @brief    Load a picture from resource ID
///
///    @param [in] uIDRes    Resource ID
///    @param [in] szResourceType    Resource type
///    @param [in] hInst    Instance including resources
///    @param [in] crBack        Mask color to make transparent
///
///    @note This method is just for TESTING, DONT'T CALL this method before validation
///
//////////////////////////////////////////////////////////////////////////

BOOL CEnBitmap::LoadImage2(UINT uIDRes, LPCTSTR lpctResType, HMODULE hInst/**//* =NULL */, COLORREF crBack/**//* =0 */)
{
    ATLASSERT(m_hBitmap 
== NULL);      // only attach once, detach on destroy
    
//     if (m_hBitmap != NULL)
//         return FALSE;
//     if( (m_hBitmap = ::LoadBitmap(_Module.m_hInst,MAKEINTRESOURCE(uIDRes)) ) != NULL)
//         return TRUE;
// 
//     return FALSE;    

    BYTE
*    pBuff = NULL;
    
int        nSize = 0;
    BOOL bResult 
= FALSE;
    
    
// first call is to get buffer size
    if (GetResource(MAKEINTRESOURCE(uIDRes), lpctResType, hInst, 0, nSize))
    
{
        
if (nSize > 0)
        
{
            pBuff 
= new BYTE[nSize];
            
            
// this loads it
            if (GetResource(MAKEINTRESOURCE(uIDRes), lpctResType, hInst, pBuff, nSize))
            
{
                IPicture
* pPicture = LoadFromBuffer(pBuff, nSize);
                
                
if (pPicture)
                
{
                    bResult 
= AttachEx(pPicture, crBack);
                    pPicture
->Release();
                }

            }

            
            delete [] pBuff;
        }

    }

    
    
return bResult;
}


/**///////////////////////////////////////////////////////////////////////////
///
///    @brief    Make a IPicture interface pointer from buffer stream
///
///    @param [in] pBuff    Picture buffer stream
///    @param [in] nSize    Size of pBuff
///
///    @note This method need to valid
///
//////////////////////////////////////////////////////////////////////////

IPicture* CEnBitmap::LoadFromBuffer(BYTE* pBuff, int nSize)
{
    
bool bResult = false;

    HGLOBAL hGlobal 
= GlobalAlloc(GMEM_MOVEABLE, nSize);
    
void* pData = GlobalLock(hGlobal);
    memcpy(pData, pBuff, nSize);
    GlobalUnlock(hGlobal);

    IStream
* pStream = NULL;
    IPicture
* pPicture = NULL;

    
if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK)
    
{
        HRESULT hr 
= ::OleLoadPicture(pStream, nSize, FALSE, IID_IPicture, (LPVOID *)&pPicture);
        pStream
->Release();
    }


    ::GlobalFree(hGlobal);

    
return pPicture; // caller releases
}


/**///////////////////////////////////////////////////////////////////////////
///
///    @brief    Get resource from a module
///
///    @param [in] lpName    Resource name
///    @param [in] lpType    Resource type
///    @param [in] hInst    Handle of module
///    @param [out] pResource    Resource pointer
///    @param [in] nBufSize    Size of resource
///
///    @note This method need to valid
///
//////////////////////////////////////////////////////////////////////////

BOOL CEnBitmap::GetResource(LPCTSTR lpName, LPCTSTR lpType, HMODULE hInst, void* pResource, int& nBufSize)

    HRSRC        hResInfo;
    HANDLE        hRes;
    LPSTR        lpRes    
= NULL; 
    
int            nLen    = 0;
    
bool        bResult    = FALSE;

    
// Find the resource
    hResInfo = FindResource(hInst, lpName, lpType);

    
if (hResInfo == NULL) 
        
return false;

    
// Load the resource
    hRes = LoadResource(hInst, hResInfo);

    
if (hRes == NULL) 
        
return false;

    
// Lock the resource
    lpRes = (char*)LockResource(hRes);

    
if (lpRes != NULL)
    

        
if (pResource == NULL)
        
{
            nBufSize 
= SizeofResource(hInst, hResInfo);
            bResult 
= true;
        }

        
else
        
{
            
if (nBufSize >= (int)SizeofResource(hInst, hResInfo))
            
{
                memcpy(pResource, lpRes, nBufSize);
                bResult 
= true;
            }

        }
 

        UnlockResource(hRes);  
    }


    
// Free the resource
    FreeResource(hRes);

    
return bResult;
}


/**///////////////////////////////////////////////////////////////////////////
///
///    @brief    Attach a picture from IPicture interface pointer
///
///    @param [in] pPicture    IPicture interface pointer
///    @param [in] crBack    Mask color for making transparent
///
///    @note    This method is called by LoadImage2, a TESTING function, 
///            so DON'T USE THIS METHOD before validation
///
//////////////////////////////////////////////////////////////////////////

BOOL CEnBitmap::AttachEx(IPicture* pPicture, COLORREF crBack)
{
    ATLASSERT(m_hBitmap 
== NULL);      // only attach once, detach on destroy

    
if (m_hBitmap != NULL)
        
return FALSE;

    ATLASSERT(pPicture);

    
if (!pPicture)
        
return FALSE;

    BOOL bResult 
= FALSE;

    CDC dcMem;
    CWindowDC dc(GetDesktopWindow());
    CDC
* pDC = &dc;

    
if (dcMem.CreateCompatibleDC(pDC->m_hDC))
    
{
        
long hmWidth;
        
long hmHeight;

        pPicture
->get_Width(&hmWidth);
        pPicture
->get_Height(&hmHeight);
        
        
int nWidth    = MulDiv(hmWidth,    pDC->GetDeviceCaps(LOGPIXELSX), HIMETRIC_INCH);
        
int nHeight    = MulDiv(hmHeight,    pDC->GetDeviceCaps(LOGPIXELSY), HIMETRIC_INCH);

        CBitmap bmMem;

        
if (bmMem.CreateCompatibleBitmap(pDC->m_hDC, nWidth, nHeight))
        
{
            HBITMAP hOldBM 
= dcMem.SelectBitmap(bmMem.m_hBitmap);

            
if (crBack != -1)
                dcMem.FillSolidRect(
00, nWidth, nHeight, crBack);
            
            HRESULT hr 
= pPicture->Render(dcMem, 00, nWidth, nHeight, 0, hmHeight, hmWidth, -hmHeight, NULL);
            dcMem.SelectBitmap(hOldBM);

            
if (hr == S_OK)
                
/**//*bResult = */CBitmap::Attach(bmMem.Detach());    
        }


        
if(bmMem.m_hBitmap) bmMem.DeleteObject();
    }


    ReleaseDC(GetDesktopWindow(),pDC
->m_hDC);
    
if(dcMem.m_hDC) ::DeleteDC(dcMem.Detach());

    
return bResult;
}


BOOL CEnBitmap::ExtendDraw(CDC 
*pDC, CRect rc, int nX, int nY)
{
    CEnBitmap bmp;
    
if (ExtendDrawImage(bmp,rc,nX,nY))
    
{
        bmp.Draw(pDC, 
&rc); 
        
return TRUE;
    }

    
return FALSE;
}


BOOL CEnBitmap::ExtendDrawImage(CEnBitmap 
&bmp, CRect rc, int nX, int nY)
{
    HBITMAP hOldBmp;
    CDC memDC;
    CClientDC cdc(
0);
    
    memDC.CreateCompatibleDC(cdc.m_hDC);
    bmp.CreateCompatibleBitmap(cdc.m_hDC, rc.Width() , rc.Height() );
    hOldBmp 
= memDC.SelectBitmap( bmp.m_hBitmap );
    
    
if (nX==0 && nY==0)
    
{
        StretchDraw(
&memDC, &rc, GetRect());
        
return TRUE;
    }


    CDC dc;
    dc.CreateCompatibleDC(memDC.m_hDC);
    HBITMAP hBmp 
= dc.SelectBitmap( m_hBitmap );
    
//dc.SetStretchBltMode(COLORONCOLOR);
    if (nX!=0 && nY==0)
    
{
        
        
//左上角
        memDC.BitBlt( 00, nX, rc.Height(), dc.m_hDC, 00, SRCCOPY );
        memDC.StretchBlt(nX, 
0, rc.Width()-GetWidth(), rc.Height(), dc.m_hDC,nX, 01, GetHeight(), SRCCOPY );
        
//右上角
        memDC.BitBlt(rc.right-(GetWidth()-nX), 0, GetWidth()-nX, rc.Height(), dc.m_hDC,nX, 0, SRCCOPY );
        
    }

    
else if (nX==0 && nY!=0)
    
{
        
//上角
        memDC.BitBlt( 00, rc.Width(), nY, dc.m_hDC, 00, SRCCOPY );
        memDC.StretchBlt(
0, nY, GetWidth(), rc.Height()-GetHeight(), dc.m_hDC,0, nY, GetWidth(), 1, SRCCOPY );
        
//右上角
        memDC.BitBlt(0, rc.bottom-(GetHeight()-nY), GetWidth(), GetHeight()-nY, dc.m_hDC,0, nY, SRCCOPY );
        
    }

    
else
    
{
        
//左上角
        memDC.StretchBlt( 00, nX, nY, dc.m_hDC, 00, nX, nY, SRCCOPY );
        
//上中
        memDC.StretchBlt(nX, 0, rc.Width()-GetWidth(),nY, dc.m_hDC, nX, 01, nY , SRCCOPY );
        
//右上角
        memDC.StretchBlt(rc.Width()-(GetWidth()-nX), 0, GetWidth()-nX, nY ,  dc.m_hDC,nX, 0, GetWidth()-nX, nY, SRCCOPY );
        
//左中
        memDC.StretchBlt(0, nY, nX,rc.Height()-GetHeight(), dc.m_hDC, 0, nY, nX, 1, SRCCOPY );
        
//正中
        memDC.StretchBlt(nX, nY, rc.Width()-GetWidth(),rc.Height()-GetHeight(), dc.m_hDC, nX, nY, 11, SRCCOPY );
        
//右中
        memDC.StretchBlt(rc.Width()-(GetWidth()-nX), nY, GetWidth()-nX,rc.Height()-GetHeight(), dc.m_hDC, nX, nY, GetWidth()-nX, 1, SRCCOPY );
        
//左下角
        memDC.StretchBlt( 0, rc.Height()-(GetHeight()-nY), nX, GetHeight()-nY, dc.m_hDC, 0, nY, nX,GetHeight()-nY , SRCCOPY );
        
//下中
        memDC.StretchBlt(nX, rc.Height()-(GetHeight()-nY), rc.Width()-GetWidth(),GetHeight()-nY, dc.m_hDC, nX, nY, 1, GetHeight()-nY, SRCCOPY );
        
//右下角
        memDC.StretchBlt( rc.Width()-(GetWidth()-nX), rc.Height()-(GetHeight()-nY), GetWidth()-nX, GetHeight()-nY, dc.m_hDC, nX, nY, GetWidth()-nX, GetHeight()-nY, SRCCOPY );
    }

    dc.SelectBitmap( hBmp );    
    memDC.SelectBitmap(hOldBmp);

    memDC.Detach();
    
//cdc.Detach();
    dc.Detach();
    
    
return TRUE;
}


BOOL CEnBitmap::StretchDraw(CDC 
*pDC, LPRECT r, LPRECT sr )
{
    
if ( !r ) 
        
return FALSE;
    CDC dc;
    dc.CreateCompatibleDC( pDC
->m_hDC );
    HBITMAP hOldBitmap 
= dc.SelectBitmap( m_hBitmap );
    pDC
->SetStretchBltMode(COLORONCOLOR);
    
    
if ( !sr )
        pDC
->StretchBlt( r->left, r->top, r->right, r->bottom, dc.m_hDC, 00, GetWidth(), GetHeight(), SRCCOPY );
    
else
        pDC
->StretchBlt( r->left, r->top, 
        r
->right - r->left, 
        r
->bottom - r->top, 
        dc.m_hDC, 
        sr
->left, 
        sr
->top, 
        sr
->right - sr->left, 
        sr
->bottom - sr->top,
        SRCCOPY );
    
    dc.SelectBitmap( hOldBitmap );
    
if(dc.m_hDC) ::DeleteDC(dc.Detach());
    ::DeleteObject(hOldBitmap);
    hOldBitmap 
= NULL;

    
return TRUE;    
}


BOOL CEnBitmap::StretchDraw(CDC 
*pDC, LPRECT r)
{
    CDC dc;
    dc.CreateCompatibleDC( pDC
->m_hDC );
    HBITMAP bmp 
= dc.SelectBitmap( m_hBitmap );
    
    pDC
->StretchBlt( r->left, r->top, r->right, r->bottom, dc.m_hDC, 00, GetWidth(), GetHeight(), SRCCOPY );
    
    dc.SelectBitmap( bmp );
    
if(dc.m_hDC) ::DeleteDC(dc.Detach());
    ::DeleteObject(bmp);
    bmp 
= NULL;

    
return TRUE;    
}


BOOL CEnBitmap::Draw(CDC 
*pDC, LPRECT r)
{
    CDC dc;
    dc.CreateCompatibleDC( pDC
->m_hDC );
    HBITMAP bmp 
= dc.SelectBitmap( m_hBitmap );    
    pDC
->BitBlt( r->left, r->top, r->right - r->left, r->bottom - r->top, dc.m_hDC, 00, SRCCOPY );
    
    dc.SelectBitmap( bmp );    
    ::DeleteDC(dc.Detach());

    
return TRUE;
}

posted on 2008-01-17 22:02 深藍(lán)色系統(tǒng) 閱讀(1289) 評論(0)  編輯 收藏 引用 所屬分類: GDI/GDI+

導(dǎo)航

<2009年11月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

統(tǒng)計(jì)

常用鏈接

留言簿(75)

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩五码在线| 一区二区三区国产盗摄| 亚洲一区免费视频| 欧美精品在线播放| 亚洲精品一区二| 黄色精品网站| 久久国产婷婷国产香蕉| 久久成年人视频| 国产精品久久久久久影视 | 亚洲制服欧美中文字幕中文字幕| 亚洲一区二区三区欧美| 亚洲午夜激情免费视频| 欧美色道久久88综合亚洲精品| 999亚洲国产精| 亚洲尤物视频在线| 国产精品视频1区| 美女网站在线免费欧美精品| 亚洲福利在线观看| 亚洲高清在线| 欧美日韩国产限制| 欧美日韩国产麻豆| 久久久.com| 欧美一区二视频在线免费观看| 欧美在线免费一级片| 日韩小视频在线观看专区| 欧美日韩在线另类| 久久国产精品一区二区三区| 亚洲国产免费看| 亚洲性图久久| 国产精品亚洲аv天堂网| 日韩亚洲在线观看| 中文国产一区| 国产亚洲va综合人人澡精品| 亚洲一区二区三区午夜| 欧美日韩视频专区在线播放 | 亚洲永久免费精品| 欧美日韩播放| 欧美久久综合| 久久亚洲精品网站| 亚洲午夜在线| 国产精品二区三区四区| 亚洲福利精品| 亚洲国产另类久久久精品极度| 亚洲欧美另类国产| 久久久久久久尹人综合网亚洲 | av成人免费在线| 久久久精品欧美丰满| 夜夜嗨av一区二区三区| 久久只精品国产| 欧美猛交免费看| 国产综合一区二区| 久久九九免费| 国产一在线精品一区在线观看| 国产午夜亚洲精品不卡| 欧美一区二区免费| 亚洲欧美日韩精品一区二区| 久久精品国产综合精品| 国产精品亚洲综合久久| 亚洲天堂偷拍| 99香蕉国产精品偷在线观看| 欧美人在线视频| 伊人色综合久久天天| 久久精品一区二区国产| 亚洲免费在线精品一区| 欧美日韩国产首页| 亚洲免费视频一区二区| 亚洲美女视频在线免费观看| 欧美性猛交xxxx免费看久久久| 极品少妇一区二区三区精品视频| 久久久免费观看视频| 亚洲欧美精品| 在线观看国产精品淫| 欧美69wwwcom| 国产精品成人一区| 久久综合狠狠综合久久综青草 | 免费观看亚洲视频大全| 好吊成人免视频| 久久精品91久久久久久再现| 欧美1区2区| 另类av导航| 欧美成人dvd在线视频| 99视频精品| 久久成人免费视频| 亚洲视屏在线播放| 久久蜜臀精品av| 亚洲一区二区欧美日韩| 欧美与欧洲交xxxx免费观看| 一二三四社区欧美黄| 亚洲二区在线视频| 欧美综合国产| 久久国产精品久久国产精品| 欧美视频专区一二在线观看| 蜜桃av一区二区三区| 国产性做久久久久久| 亚洲大片精品永久免费| 国产精品视频一二| 亚洲精品小视频在线观看| 亚洲国产成人av好男人在线观看| 久久久人成影片一区二区三区观看 | 欧美黄色一区二区| 欧美午夜精品一区二区三区| 亚洲国产乱码最新视频| 欧美一区二区免费视频| 香蕉精品999视频一区二区| 欧美吻胸吃奶大尺度电影| 久久精品99久久香蕉国产色戒 | 99国产成+人+综合+亚洲欧美| 亚洲欧美日韩国产中文 | 91久久嫩草影院一区二区| 国产精品久久999| 亚洲在线观看视频| 免费不卡在线观看av| 在线观看欧美| 久久综合一区二区| 欧美黄色视屏| 亚洲字幕在线观看| 欧美电影免费观看大全| 欧美激情精品久久久久久| 制服丝袜激情欧洲亚洲| 国产一区二区三区丝袜| 欧美激情精品久久久久| 亚洲综合成人婷婷小说| 女主播福利一区| 欧美一级片在线播放| 国产女精品视频网站免费 | 国内成+人亚洲+欧美+综合在线| 一本色道久久综合亚洲精品不| 久久国产精彩视频| 亚洲精品乱码久久久久久久久| 国产精品夜夜夜一区二区三区尤| 欧美在线观看网址综合| 欧美激情精品久久久久久大尺度| 中文亚洲字幕| 亚洲国产日韩欧美在线99| 国产麻豆精品在线观看| 国产精品专区一| 免费成人黄色片| 久久久久久久久一区二区| 西瓜成人精品人成网站| 亚洲中无吗在线| 久久大香伊蕉在人线观看热2| 欧美一站二站| 久久gogo国模裸体人体| 久久久久成人精品| 久久高清免费观看| 久久久999成人| 欧美成人xxx| 日韩视频精品在线| 国产字幕视频一区二区| 亚洲第一区色| 亚洲国产一区二区a毛片| 亚洲美女毛片| 欧美一区二区三区视频在线| 噜噜噜躁狠狠躁狠狠精品视频| 免费成人网www| 9l视频自拍蝌蚪9l视频成人| 国产欧美日韩一区二区三区在线观看 | 日韩亚洲国产精品| 久久成人精品视频| 先锋a资源在线看亚洲| 欧美人与禽猛交乱配视频| 日韩系列欧美系列| 在线视频你懂得一区| 欧美剧在线观看| 亚洲精品自在久久| 亚洲天堂久久| 国内外成人免费激情在线视频网站| 亚洲四色影视在线观看| 亚洲欧美日韩国产另类专区| 久久精品一区二区三区中文字幕| 女人色偷偷aa久久天堂| 亚洲大片免费看| 欧美成人在线免费观看| 亚洲黄页视频免费观看| 国产在线精品二区| 欧美成人一品| 亚洲视频免费在线观看| 性欧美xxxx大乳国产app| 国产视频亚洲| 欧美日本高清一区| 中日韩高清电影网| 久久精品成人| 亚洲国内精品在线| 国产女优一区| 久久免费观看视频| 日韩视频三区| 久久精品国语| 亚洲免费视频一区二区| 国产亚洲视频在线观看| 久久亚洲国产精品日日av夜夜| 欧美成人亚洲| 亚洲精品一区二区网址| 欧美四级在线| 久久久精品2019中文字幕神马| 欧美激情性爽国产精品17p| 亚洲二区在线视频| 国内精品视频久久| 欧美三级电影精品| 久久深夜福利| 日韩视频免费观看高清在线视频|