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

我的玻璃盒子

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

這是一個圖片加載與繪制的類,使用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) 閱讀(1295) 評論(0)  編輯 收藏 引用 所屬分類: GDI/GDI+


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


導(dǎo)航

<2009年10月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

統(tǒng)計

常用鏈接

留言簿(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>
            午夜在线a亚洲v天堂网2018| 美女视频网站黄色亚洲| 黄色成人在线观看| 牛牛国产精品| 欧美喷潮久久久xxxxx| 亚洲欧美一区二区三区久久| 先锋资源久久| 亚洲动漫精品| 99re热精品| 国产视频一区二区在线观看| 另类尿喷潮videofree| 欧美激情一区二区三区在线| 亚洲在线成人| 久久久久国产精品麻豆ai换脸| 最新日韩欧美| 在线视频一区观看| 国内外成人免费激情在线视频网站 | 久久久久一区二区| 99热在线精品观看| 亚洲欧美国产精品桃花| 亚洲电影自拍| 制服丝袜亚洲播放| 亚洲大片av| 一本一本久久| 在线成人性视频| 一二美女精品欧洲| 怡红院精品视频| 一二三区精品| 亚洲高清不卡av| 亚洲一区二区高清视频| 亚洲黄色视屏| 亚洲一区图片| 日韩视频免费| 欧美专区一区二区三区| 一区二区久久久久| 久久精品日产第一区二区| 一区二区三区视频免费在线观看 | 性亚洲最疯狂xxxx高清| 老司机精品视频网站| 亚洲欧美在线免费观看| 乱码第一页成人| 欧美自拍偷拍午夜视频| 欧美激情一区二区三区全黄| 久久久国产精品一区| 欧美日韩国产在线看| 六月婷婷一区| 国产精品免费观看在线| 亚洲国产婷婷| 国内精品久久久久久 | 亚洲国产女人aaa毛片在线| 国产麻豆精品theporn| 亚洲激情校园春色| 国模私拍一区二区三区| 一区二区精品| 亚洲欧洲一区二区三区| 久久精品噜噜噜成人av农村| 亚洲一区二区三区精品在线| 巨乳诱惑日韩免费av| 久久国产天堂福利天堂| 欧美午夜精品久久久久久浪潮 | 亚洲高清不卡在线| 午夜精品久久久| 亚洲图片在线观看| 欧美国产日韩亚洲一区| 麻豆九一精品爱看视频在线观看免费| 国产精品久久久久久久久| 亚洲欧洲综合另类| 在线日韩中文| 久久精品国产69国产精品亚洲| 亚洲欧美国产另类| 欧美日韩国产色站一区二区三区| 欧美成人久久| 一区二区三区在线看| 性欧美超级视频| 亚欧美中日韩视频| 欧美午夜免费电影| 日韩视频一区| 日韩一级精品视频在线观看| 久久综合影视| 你懂的视频欧美| 在线观看欧美| 久久久99免费视频| 久久在线免费观看视频| 国产丝袜一区二区| 午夜精品久久久久久久男人的天堂 | 欧美成人午夜激情| 欧美大色视频| 亚洲国产激情| 麻豆精品传媒视频| 欧美搞黄网站| 亚洲国产欧美在线人成| 久久资源在线| 欧美成人免费小视频| 在线播放亚洲| 老牛嫩草一区二区三区日本| 麻豆亚洲精品| 在线观看欧美| 裸体歌舞表演一区二区| 免费久久精品视频| 亚洲二区视频在线| 免费国产一区二区| 亚洲国产高清一区| 亚洲美女中文字幕| 欧美日韩美女一区二区| 日韩午夜黄色| 亚洲一区视频在线观看视频| 国产精品v欧美精品v日本精品动漫 | 亚洲激情一区二区三区| 99re6这里只有精品| 欧美日韩国内| 亚洲视频网站在线观看| 午夜视频在线观看一区| 国产日韩精品在线观看| 欧美一区二区三区喷汁尤物| 久久夜色精品国产欧美乱| 在线日韩av| 欧美国产一区二区三区激情无套| 亚洲精品视频免费在线观看| 亚洲午夜久久久| 国产精品丝袜久久久久久app | 午夜亚洲伦理| 国产日韩欧美高清免费| 久久精品女人| 亚洲风情亚aⅴ在线发布| 一本色道久久| 国产精品欧美日韩一区| 欧美一区二区三区在线视频| 欧美va亚洲va香蕉在线| 日韩视频久久| 国产精品色在线| 久久国内精品视频| 亚洲高清激情| 亚洲综合第一| 激情久久婷婷| 欧美激情精品久久久久久黑人| 一区二区三区黄色| 久久久www成人免费无遮挡大片| 在线免费观看日本欧美| 欧美伦理91i| 午夜精品www| 亚洲电影免费观看高清| 亚洲直播在线一区| 韩国v欧美v日本v亚洲v| 欧美电影免费网站| 亚洲综合日韩| 欧美大片在线看| 亚洲综合色噜噜狠狠| 韩日精品在线| 欧美日韩第一页| 欧美一区1区三区3区公司| 亚洲电影免费观看高清| 亚洲欧美在线磁力| 亚洲国产成人av好男人在线观看| 欧美日韩一区在线| 欧美在线三区| 亚洲人久久久| 久久久久国产精品人| 亚洲另类春色国产| 国产亚洲精品久久飘花| 欧美成人一区二区在线| 亚洲欧美日韩在线| 亚洲电影在线免费观看| 性久久久久久| 亚洲人精品午夜在线观看| 国产精品永久免费在线| 欧美成人高清视频| 欧美一级专区免费大片| 亚洲乱码国产乱码精品精天堂| 久久精品国产999大香线蕉| 亚洲精品在线视频| 国产一区二区丝袜高跟鞋图片| 欧美另类一区| 久久久噜噜噜久久| 亚洲午夜在线观看| 亚洲国产欧美日韩| 久久综合给合久久狠狠狠97色69| 国产精品99久久久久久久久| 在线观看一区欧美| 国产精品亚洲人在线观看| 欧美二区视频| 久久精品国产亚洲一区二区三区| 一本色道**综合亚洲精品蜜桃冫| 牛牛精品成人免费视频| 久久aⅴ国产紧身牛仔裤| 亚洲伦理在线免费看| 精品69视频一区二区三区| 国产精品日韩电影| 欧美精品一区二区三区四区 | 久久综合综合久久综合| 亚洲欧美精品suv| 亚洲精品在线观看免费| 激情一区二区| 国产欧美综合一区二区三区| 欧美日韩网站| 欧美成人自拍| 蜜臀久久99精品久久久久久9| 欧美一区二区视频97| 亚洲小视频在线观看| 亚洲乱码国产乱码精品精98午夜| 欧美激情欧美激情在线五月|