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

我的玻璃盒子

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

這是一個(gè)圖片加載與繪制的類,使用GDI將圖片文件繪制到DC上,可以用于圖片顯示,程序換膚等應(yīng)用場(chǎ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) 評(píng)論(0)  編輯 收藏 引用 所屬分類: GDI/GDI+


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導(dǎo)航

<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統(tǒng)計(jì)

常用鏈接

留言簿(75)

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一区二区三区 在线观看视| 欧美性大战xxxxx久久久| 亚洲综合激情| 一区二区三区产品免费精品久久75| 欧美日韩精品免费观看视频| 亚洲在线观看视频网站| 日韩性生活视频| 亚洲视频欧美视频| 在线观看一区欧美| 久久精品国产清高在天天线| 久久久国产精品一区| 久久精品国产99精品国产亚洲性色| 亚洲国产欧洲综合997久久| 亚洲一区二区三区午夜| 亚洲专区一二三| 亚洲美女免费精品视频在线观看| 国产欧美一区二区在线观看| 国产一区二区在线观看免费| 国产精品一区二区三区四区五区| 欧美日韩国产在线一区| 国产精品乱人伦一区二区| 欧美日韩精品国产| 欧美成人精品一区二区| 一区二区三区免费网站| 欧美在线黄色| 久久成人国产| 欧美激情二区三区| 一本久道久久综合婷婷鲸鱼| 亚洲国产精品黑人久久久| 欧美成熟视频| 亚洲网在线观看| 亚洲欧美日韩中文视频| 亚洲淫片在线视频| 先锋影音国产精品| 亚洲欧美视频在线观看视频| 香蕉久久国产| 久久激五月天综合精品| 午夜欧美不卡精品aaaaa| 中文国产亚洲喷潮| aa级大片欧美| 免费在线成人av| 久久视频免费观看| 久久久夜精品| 亚洲国产精品一区制服丝袜 | 精品二区视频| 亚洲午夜三级在线| 久久精品在线播放| 欧美大片一区二区| 久久亚洲精品欧美| 亚洲资源在线观看| 欧美一区二区啪啪| 亚洲国产精品精华液2区45| 午夜精品一区二区三区在线视 | 欧美一区二区三区啪啪 | 久久国产精品色婷婷| 国产精品99久久不卡二区| 亚洲欧美日韩另类| 国语自产在线不卡| 亚洲高清色综合| 麻豆国产精品一区二区三区| 亚洲国产精品久久精品怡红院| 亚洲国产欧美一区二区三区久久| 久久激情视频久久| 欧美日韩在线第一页| 国产亚洲欧洲一区高清在线观看 | 99精品国产高清一区二区| 欧美电影在线| 国产亚洲欧美一区二区三区| 亚洲欧洲另类国产综合| 欧美a级大片| 亚洲一区二区三区午夜| 久久久水蜜桃av免费网站| 激情综合色综合久久| 亚洲午夜av| 欧美大片免费观看| 欧美激情91| 国内精品免费午夜毛片| 亚洲视频精品| 午夜精品久久久99热福利| 欧美激情国产高清| 影音国产精品| 亚洲精品影院在线观看| 久久天堂国产精品| 国产精品尤物| 美女久久一区| 欧美亚洲综合在线| 欧美中文在线观看| 亚洲国产欧美一区二区三区久久| 亚洲影音先锋| 亚洲乱码久久| 国产精品视频yy9099| av成人毛片| 亚洲三级免费电影| 国产精品自拍在线| 亚洲欧美一区二区激情| 亚洲欧洲精品一区二区三区| 国产精品国产自产拍高清av| av成人毛片| 亚洲一区制服诱惑| 亚洲免费观看视频| 欧美黄在线观看| 免费视频亚洲| 亚洲韩国精品一区| 亚洲福利国产精品| 欧美成人精品在线视频| 尤物yw午夜国产精品视频| 美女精品一区| 国产精品高潮呻吟久久av黑人| 中文欧美在线视频| 一本一本大道香蕉久在线精品| 国产一区二区三区四区hd| 久久夜精品va视频免费观看| 欧美成人精品在线播放| 久久青青草综合| 欧美午夜电影在线| 亚洲午夜久久久| 亚洲在线观看视频| 国产偷国产偷亚洲高清97cao| 久久久久国产精品一区三寸| 久久精品亚洲一区| 午夜电影亚洲| 久久精品人人做人人综合| 精久久久久久| 欧美一区二区三区精品| 亚洲高清在线| 日韩视频在线一区二区| 亚洲精品中文字幕女同| 日韩亚洲视频| 欧美—级a级欧美特级ar全黄| 久久免费高清视频| 欧美成人性生活| 一区二区三区www| 欧美一级在线亚洲天堂| 欧美精品国产精品日韩精品| 老司机午夜精品视频在线观看| 麻豆精品在线视频| 亚洲午夜未删减在线观看| 欧美日韩国产一中文字不卡| 久久精品人人做人人爽| 亚洲在线视频观看| 欧美一二三区在线观看| 久久天天躁夜夜躁狠狠躁2022| 国模 一区 二区 三区| 午夜一区不卡| 一区二区三区日韩| 久久裸体艺术| 亚洲丰满在线| 亚洲视频在线视频| 亚洲免费av片| 亚洲欧美国产制服动漫| 两个人的视频www国产精品| 欧美一二三区精品| 欧美精品亚洲精品| 久久免费黄色| 亚洲精品国产系列| 性久久久久久久久久久久| 一区二区久久久久| 国产精品乱码| 99在线精品视频在线观看| 欧美日韩免费观看一区=区三区| 日韩视频久久| 亚洲二区在线视频| 91久久综合亚洲鲁鲁五月天| 亚洲婷婷国产精品电影人久久| 久久偷看各类wc女厕嘘嘘偷窃| 欧美在线日韩| 亚洲承认在线| 在线观看精品视频| 久久精品30| 久久久久国产一区二区三区| 国产精品第一区| 久久精品国产第一区二区三区最新章节| 欧美日韩国产小视频在线观看| 欧美成人性生活| 亚洲视频电影在线| 国产精品久久久久久久久动漫| 猛干欧美女孩| 另类天堂av| 亚洲精品日韩久久| 久久久久久久精| 久久久久久久一区二区三区| 亚洲精选久久| 男女激情久久| 亚洲综合色自拍一区| 国产欧美91| 亚洲欧美国产一区二区三区| 激情亚洲网站| 午夜一区二区三视频在线观看 | 日韩一级网站| 欧美日韩免费看| 亚洲素人在线| 亚洲综合日韩| 国产资源精品在线观看| 欧美亚洲视频在线看网址| 欧美在线一区二区三区| 在线观看成人网| 久久精品在线| 亚洲成在线观看| 亚洲免费观看高清完整版在线观看| 欧美激情一区二区三区成人|