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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? picture.cpp

?? 圖文資源管理程序,access數(shù)據(jù)庫(kù)
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
//-----------------------------------------------------------------------------
// Picture (Implementations) Version 1.00
//
// Routins 4 Showing Picture Files... (.BMP .DIB .EMF .GIF .ICO .JPG .WMF)
//
// Author: Dr. Yovav Gad, EMail: Sources@SuperMain.com ,Web: www.SuperMain.com
//=============================================================================
// 
// Full Story:
// ~~~~~~~~~~~
// There R Many Libraries To Handle Image Files, Anyway Most Of Them Do Not
// Include Source Files Or Just Very Complicated To Implement / Understand,
// 
// After Many Days Of Searching (And Not Finding) a Way To Load a JPG From a
// Resource And Show It On a *Dialog Based* Application, I Decided 2 Take Steps
//
// So I Created What I Call a Very *Simple* & Useful Class,
// It Can Easily Implemented By Adding It To a Project, And U Do Not Have To
// Be a Real JPEG Freak - And Invent All Header Reading From The Beginning
// (It Uses The IPicture Interface - Same Way As Internet Explorer Does)
//
// I Would Like To Thank Mr.Peter Hendrix For His Wonderful Work
// That I Found On: http://www.thecodeproject.com/bitmap/cpicture.asp
// Which I Was Inspired And Got The IPicture Interface Idea From...
//
// Guess U Will Find It Useful,
// Appreciate If U Can Mention My Name On Your Final Code,
// Please Feel Free To Send Me Any Improvements Or SaveAsJPG() Functions:
//
// (This Program Has No Bugs - Only Undocumented Solutions)
//
// Author: Dr. Yovav Gad, EMail: Sources@SuperMain.com ,Web: www.SuperMain.com
//
//--------------------------Example & Usage 4 Dummies--------------------------
//
//  U Need 2 Add "CPicture.CPP" and "CPicture.H" Into Your Project (From FileView)
//  So U Will Get Control Over The Functions In This Class,
//  Then U Can Create a Picture Object And Show It On a Device Context
//
//  CPicture m_Picture;  // Create a Picture Object (An Instance Of This Class)
//  #include "Picture.h" // Make Sure U Include This Where U Gonna Create The Object...
//
//  Load Picture Data Into The IPicture Interface (.BMP .DIB .EMF .GIF .ICO .JPG .WMF)
//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//	m_Picture.Load("Test.JPG"); // Load From a File - Just Load It (Show Later)
//	m_Picture.Load(IDR_TEST, "JPG"); // Load From a Resource - Just Load It (Show Later)
//  (U Must Include IDR_TEST In Your Resources Under a Custom Name, 4 Example - "JPG")
//  
//  When Using DC Object On a *Dialog Based* Application (CPaintDC dc(this);)
//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//	m_Picture.UpdateSizeOnDC(&dc); // Get Picture Dimentions In Pixels
//	m_Picture.Show(&dc, CPoint(0,0), CPoint(m_Picture.m_Width, m_Picture.m_Height), 0,0);
//	m_Picture.Show(&dc, CRect(0,0,100,100)); // Change Original Dimentions
//	m_Picture.ShowBitmapResource(&dc, IDB_TEST, CPoint(0,0)); // Show Bitmap Resource
//
//  OR When Using a Pointer On a "Regular" MFC Application (CDC* pDC)
//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//	m_Picture.UpdateSizeOnDC(pDC); // Get Picture Dimentions In Pixels
//	m_Picture.Show(pDC, CPoint(0,0), CPoint(m_Picture.m_Width, m_Picture.m_Height), 0,0);
//	m_Picture.Show(pDC, CRect(0,0,100,100)); // Change Original Dimentions
//	m_Picture.ShowBitmapResource(pDC, IDB_TEST, CPoint(0,0)); // Show Bitmap Resource
//
//  Show Picture Information
//  ~~~~~~~~~~~~~~~~~~~~~~~~
//	CString S;
//	S.Format("Size = %4d\nWidth = %4d\nHeight = %4d\nWeight = %4d\n",
//	m_Picture.m_Weight, m_Picture.m_Width, m_Picture.m_Height, m_Picture.m_Weight);
//	AfxMessageBox(S);
//
//----------------------------Cut The Bullshit Here----------------------------

#include "stdafx.h"
#include "Picture.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#define new DEBUG_NEW
#endif


//----------------CFileProcess class------------------------------------
//constructor
CFileProcess::CFileProcess()
{
	m_File = NULL;         //File *m_File;
}

//destructor !
CFileProcess::~CFileProcess()
{
//	this->Close();
}

//opens a file either for reading or writing
//打開(kāi)一個(gè)文件用于讀寫(xiě)
BOOL CFileProcess::Open(char * FileName , FILE_OPENMODE Open_Mode)
{

	switch (Open_Mode)
	{
		case OFM_READ:
			m_File = fopen(FileName, "rb");
			break;
		case OFM_WRITE:
			m_File = fopen(FileName, "wb");
			break;
	}

	//ASSERT(m_File != NULL);
	if(!m_File) 
		return FALSE;
	return TRUE;
}


//Reads data from the file stream.
//從文件流中讀取數(shù)據(jù)
BOOL CFileProcess::Read(VOID * zBuffer, DWORD cSize)
{
	//從m_File中讀取cSize 個(gè)BYTE類(lèi)型的數(shù)據(jù)存儲(chǔ)到zBuffer中。
	DWORD dwFreadReslut = fread(zBuffer, sizeof(BYTE), cSize, m_File);
	if(dwFreadReslut < cSize)
		return FALSE;
	return TRUE;
}

//Writes data to the file stream.
//寫(xiě)數(shù)據(jù)到文件流
BOOL CFileProcess::Write(VOID * zBuffer,DWORD cSize)
{
	//fwrite :write size*count byte to buffer.
	if(fwrite(zBuffer, sizeof(BYTE), cSize, m_File) < cSize)
       return FALSE;
	return TRUE;
}

//Gets the File Size
//得到文件大小
LONG CFileProcess::GetSize(VOID)
{
	//ftell:一般用于讀入數(shù)據(jù)后,文件的指針位置
	long t_location =  ftell(m_File);
	//moves the file pointer to  a specified location 
	fseek(this->m_File, 0, SEEK_END);

	long f_size = ftell(this->m_File);
	fseek(this->m_File ,t_location, SEEK_SET);
	return f_size;
}

//Closes the File
VOID CFileProcess::Close(VOID)
{
	if(m_File)
	{
		fclose(this->m_File);
	    this->m_File  = NULL;
	}
	return;
}

//-----------------------
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CPicture::CPicture()
{
	m_pic = NULL;
	hGlobal = NULL;
//---------------------------------
	m_IPicture = NULL;
	m_Height = 0;
	m_Weight = 0;
	m_Width = 0;
//---------------------------------
}

//-------------注意這里的釋放---------------
CPicture::~CPicture()
{
	//-------------------------------------------------------------------------
	if(m_IPicture != NULL) FreePictureData(); // Important - Avoid Leaks...
	this->FreePicture();
   //------------------------------------------------------------------------
}


/*
OUR MAIN FUNCTION
*/
HBITMAP CPicture::LoadPicture(char *FileName)
{
	CFileProcess cFile;  //the image file
	
	//if we couldn't open the image file then we should get out of here
    if(!cFile.Open(FileName, OFM_READ)) //打開(kāi)要讀的文件
		return NULL;

	//we must know exactly the buffer size to allocate
	//in order to read the image in it
	//so get the image file size
    long nSize = cFile.GetSize(); //得到我們要分配內(nèi)存的大小,即文件的大小
	//allocate enough memory to hold the image
	//it must be allocated using GlobalAlloc
	//otherwise it will fail...try using new or malloc and you'll see!!!
	hGlobal = GlobalAlloc(GMEM_MOVEABLE, nSize);
	
	//get pointer to first byte
	void* pData = GlobalLock(hGlobal);
	
	//read the file in the prev allocated memory
	if(!cFile.Read(pData, nSize)) //讀nSize個(gè)字節(jié)到已經(jīng)分配的內(nèi)存區(qū)域
		return NULL;;
	//we don't need the file any more so close it
	cFile.Close();
	GlobalUnlock(hGlobal);  //釋放內(nèi)存區(qū)域

	IStream* pStream = NULL;
    //ole routines....
	//creates a stream from our handle
	//don't know why and how?
	if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) != S_OK)
		return NULL;

	HRESULT hr;
	//aha..now let ole reads the image and load it for us
	//param1:指向包含圖片數(shù)據(jù)流的指針
	//param2:從流中讀取nSize字節(jié)的大小,
	//param3:Reference to the identifier of the interface 
               // describing the type of interface pointer to return
	//param4: Address of output variable that receives interface  pointer requested in riid
	hr = OleLoadPicture(pStream, nSize, FALSE, IID_IPicture, (LPVOID*)&this->m_pic);
	if(hr != S_OK)
		return NULL;
	
//	if ((hr = OleLoadPicture(pStream, nSize, FALSE, IID_IPicture, (LPVOID *)&this->m_pic)) != S_OK)
//		return NULL;
	HBITMAP hbmp = NULL;
	//return an HBITMAP to our image like the LoadImage function does
	//we might need the handle
	this->m_pic->get_Handle((OLE_HANDLE *) &hbmp);
	return hbmp;
}


//an overloaded version of the above to draw the picture
//as well in a given DC
HBITMAP CPicture::LoadPicture(char *FileName, HDC hdc)
{
	HBITMAP hbmp = this->LoadPicture(FileName);
	this->DrawPicture(hdc, 0, 0, this->_GetWidth(), _GetHeight());
	return hbmp;
}

//returns the width of the loaded image  
DWORD CPicture::_GetWidth(VOID)
{
    
	if(! m_pic) 
		return 0;
	OLE_XSIZE_HIMETRIC pWidth;
	m_pic->get_Width(&pWidth);
	HDC tDC = ::CreateCompatibleDC(0);
	int nWidth	= MulDiv(pWidth,::GetDeviceCaps(tDC, LOGPIXELSX), HIMETRIC_INCH);
	DeleteDC(tDC);
	return (DWORD) nWidth;
}


//returns the height of the loaded image
DWORD CPicture::_GetHeight(VOID)
{
	if(! m_pic) 
		return 0;
	OLE_YSIZE_HIMETRIC pHeight;

	m_pic->get_Height(&pHeight);
	HDC tDC = ::CreateCompatibleDC(0);

	int nHeight	= MulDiv(pHeight,::GetDeviceCaps(tDC, LOGPIXELSY), HIMETRIC_INCH);
	DeleteDC(tDC);
	
	return (DWORD) nHeight;
}

//returns the current DC of the loaded image
HDC CPicture::_GetDC(VOID)
{
	if(! m_pic) 
		return NULL;
	HDC pDC ;
	m_pic->get_CurDC(&pDC);
	return  pDC;
}

//returns the Handle of the loaded image(HBITMAP)
HBITMAP CPicture::_GetHandle( VOID )
{
	if(! m_pic) 
		return NULL; 

	HBITMAP hbmp;
	m_pic->get_Handle((OLE_HANDLE *) &hbmp);
	return  hbmp;
}


//Draws the image in a specified DC..with given dimensions
//specify -1 for width and height if you like to draw
//with original dimensions
BOOL CPicture::DrawPicture(HDC hdc,long x,long y,long cx,long cy)
{
	if(!m_pic) 
		return FALSE;

	LONG pHeight,pWidth;
	if(cx == -1) 
		cx = this->_GetWidth();
	if(cy == -1) 
		cy = this->_GetHeight();
	m_pic->get_Width(&pWidth);
    m_pic->get_Height(&pHeight);
	if (m_pic->Render(hdc, x, y, cx, cy,0, pHeight, pWidth,-pHeight, NULL) != S_OK)
		return FALSE ;
	
	return TRUE;
}

//Cleans up
VOID CPicture::FreePicture(VOID)
{
	if(m_pic)
	{
		m_pic->Release();
		m_pic = NULL;
	}

	if(hGlobal)
	{
		GlobalFree(hGlobal);
		hGlobal = NULL;
	}
}


#define HIMETRIC_INCH 2540
#define ERROR_TITLE "CPicture Error" // Error Title (Related To This Class)...

//-----------------------------------------------------------------------------
// Does:   Free The Allocated Memory That Holdes The IPicture Interface Data
// ~~~~    And Clear Picture Information
//
// Note:   This Might Also Be Useful If U Only Need To Show The Picture Once
// ~~~~~   Or If U Copy The Picture To The Device Context, So It Can Still
//         Remain On Screen - But IPicture Data Is Not Needed No More
//
//-----------------------------------------------------------------------------
void CPicture::FreePictureData()
//=============================================================================
{
	if(m_IPicture != NULL)
		{
		m_IPicture->Release();
		m_IPicture = NULL;
		m_Height = 0;
		m_Weight = 0;
		m_Width = 0;
		}
}

//-----------------------------------------------------------------------------
// Does:   Open a Resource And Load It Into IPicture (Interface)
// ~~~~    (.BMP .DIB .EMF .GIF .ICO .JPG .WMF)
//
// Note:   When Adding a Bitmap Resource It Would Automatically Show On "Bitmap"
// ~~~~    This NOT Good Coz We Need To Load It From a Custom Resource "BMP"
//         To Add a Custom Rresource: Import Resource -> Open As -> Custom
//         (Both .BMP And .DIB Should Be Found Under "BMP")
//
// InPut:  ResourceName - As a UINT Defined (Example: IDR_PICTURE_RESOURCE)
// ~~~~~   ResourceType - Type Name (Example: "JPG")
//
// OutPut: TRUE If Succeeded...
// ~~~~~~
//-----------------------------------------------------------------------------
BOOL CPicture::Load(UINT ResourceName, LPCSTR ResourceType)
//=============================================================================
{
	BOOL bResult = FALSE;

	HGLOBAL		hGlobal = NULL;
	HRSRC		hSource = NULL;
	LPVOID		lpVoid  = NULL;
	int			nSize   = 0;

	if(m_IPicture != NULL) FreePictureData(); // Important - Avoid Leaks...

	hSource = FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(ResourceName), ResourceType);

	if(hSource == NULL)
		{
		HWND hWnd = AfxGetApp()->GetMainWnd()->m_hWnd;
		MessageBoxEx(hWnd, "FindResource() Failed\t", ERROR_TITLE, MB_OK | MB_ICONSTOP, LANG_ENGLISH);
		return(FALSE);
		}

	hGlobal = LoadResource(AfxGetResourceHandle(), hSource);
	if(hGlobal == NULL)
		{
		HWND hWnd = AfxGetApp()->GetMainWnd()->m_hWnd;
		MessageBoxEx(hWnd, "LoadResource() Failed\t", ERROR_TITLE, MB_OK | MB_ICONSTOP, LANG_ENGLISH);
		return(FALSE);
		}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99riav一区二区三区| 久久久久久久免费视频了| av午夜一区麻豆| 国产精品白丝av| 国产在线播精品第三| 精品一区二区在线观看| 午夜精品国产更新| 亚洲线精品一区二区三区| 亚洲欧美乱综合| 一区二区三区蜜桃网| 亚洲精品国产高清久久伦理二区| 国产精品久久久久久久久免费相片 | 最新高清无码专区| 中文字幕中文字幕一区| 亚洲特黄一级片| 伊人婷婷欧美激情| 亚洲一区二区三区免费视频| 亚洲一区二区三区在线播放| 亚洲综合色噜噜狠狠| 亚洲6080在线| 青青国产91久久久久久| 老司机精品视频导航| 国产麻豆午夜三级精品| 成人黄动漫网站免费app| 97se亚洲国产综合自在线观| 欧美性生活久久| 欧美一区二区三区爱爱| 久久久久久久久蜜桃| 国产精品美女一区二区| 亚洲激情图片一区| 91麻豆国产香蕉久久精品| 欧美日韩亚洲国产综合| 精品久久一区二区三区| 日本一区二区三区四区| 亚洲欧美偷拍卡通变态| 日韩黄色一级片| 国产精品18久久久久久久久| 色94色欧美sute亚洲线路一久| 制服.丝袜.亚洲.中文.综合| 精品国产乱码久久久久久1区2区| 国产亚洲美州欧州综合国| 亚洲啪啪综合av一区二区三区| 日韩av一区二区在线影视| 国产**成人网毛片九色| 欧洲av一区二区嗯嗯嗯啊| 欧美成人vr18sexvr| 最新国产成人在线观看| 麻豆成人av在线| 97se亚洲国产综合自在线不卡| 欧美一区二区三区在| 国产精品久久福利| 午夜精品久久久久久久99樱桃 | 欧美日韩国产免费| 久久综合九色综合欧美亚洲| 亚洲最色的网站| 久久精品国产成人一区二区三区| 99久久久精品| 欧美白人最猛性xxxxx69交| 亚洲免费观看高清在线观看| 麻豆精品国产传媒mv男同| 99久久婷婷国产精品综合| 欧美mv日韩mv| 亚洲五月六月丁香激情| 国产不卡免费视频| 欧美精品一级二级三级| 国产精品对白交换视频 | 欧美日韩视频专区在线播放| 国产欧美一二三区| 久久国产麻豆精品| 欧美视频在线不卡| 中文字幕中文乱码欧美一区二区| 免费成人在线网站| 在线观看视频一区二区| 国产精品乱码一区二区三区软件 | 捆绑紧缚一区二区三区视频| 色婷婷综合久色| 国产拍欧美日韩视频二区| 日本不卡在线视频| 欧美日本在线一区| 亚洲男人天堂av网| 成人h版在线观看| 久久精品国产秦先生| 欧美在线免费观看亚洲| 亚洲欧美日韩综合aⅴ视频| 国产精品自拍毛片| 欧美xxxxxxxx| 免费成人美女在线观看| 欧美日韩国产123区| 亚洲理论在线观看| 成人免费看视频| 久久精品视频免费| 激情图片小说一区| 日韩女优av电影| 欧美aaaaaa午夜精品| 欧美日韩激情一区二区| 一区二区三区在线免费| 色综合色狠狠天天综合色| 成人欧美一区二区三区黑人麻豆| 国产99精品在线观看| 国产日产欧美一区二区视频| 国产一区二区三区黄视频 | 亚洲电影中文字幕在线观看| 色欧美片视频在线观看在线视频| 亚洲欧美在线高清| 成人黄色小视频在线观看| 国产精品三级av在线播放| 国产不卡在线播放| 欧美国产97人人爽人人喊| 成人av网站在线| 国产精品视频一二三| 国产大陆亚洲精品国产| 中文字幕av一区二区三区高| 成人永久免费视频| 国产精品天干天干在线综合| 9色porny自拍视频一区二区| √…a在线天堂一区| 色综合久久天天| 亚洲成av人影院在线观看网| 欧美另类z0zxhd电影| 免费成人在线网站| 久久精品视频一区| 91欧美一区二区| 亚洲午夜羞羞片| 8v天堂国产在线一区二区| 蜜臀久久久久久久| 久久青草国产手机看片福利盒子 | 不卡在线视频中文字幕| 亚洲欧美精品午睡沙发| 欧美日韩视频在线观看一区二区三区| 日韩高清欧美激情| 久久综合色鬼综合色| av中文字幕亚洲| 亚洲第一福利视频在线| 精品国产一区二区三区久久影院 | 风流少妇一区二区| 中文字幕一区二区在线观看 | 日韩理论片网站| 欧美日韩免费一区二区三区视频| 免费观看在线色综合| 中文av字幕一区| 欧美色爱综合网| 久久99精品国产麻豆婷婷| 18涩涩午夜精品.www| 欧美日韩激情一区二区| 国产成人亚洲精品狼色在线| 一区二区三区在线观看网站| 日韩欧美色综合| 成人精品视频一区二区三区 | 亚洲精品国产高清久久伦理二区| 91精品国产综合久久久久久久 | 欧美一二三区在线观看| 成人黄色小视频| 免费高清视频精品| 亚洲色图欧美在线| 精品国产免费人成在线观看| 一本到不卡免费一区二区| 精品一区二区三区在线播放视频| 中文字幕一区二区三区蜜月| 制服丝袜在线91| 91丨九色丨尤物| 久久99精品久久久久久动态图 | 欧美国产亚洲另类动漫| 欧美日韩精品一区二区三区蜜桃| 国产高清久久久| 日韩不卡一区二区| 国产精品国产三级国产普通话蜜臀 | 欧美精品一级二级| 99国产精品久久久久久久久久| 美国精品在线观看| 一区二区三区蜜桃| 中文欧美字幕免费| 久久亚洲捆绑美女| 欧美日本免费一区二区三区| www.亚洲在线| 国产做a爰片久久毛片| 偷拍日韩校园综合在线| 亚洲三级在线播放| 国产精品视频麻豆| 欧美精品一区二区三区高清aⅴ | 亚洲一区二区三区美女| 欧美激情一区二区| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美日韩视频在线一区二区| 一本大道久久a久久综合| 成人性生交大片免费看视频在线 | 亚洲精品中文字幕在线观看| 欧美激情一区不卡| 久久免费的精品国产v∧| 欧美一级夜夜爽| 欧美日韩国产影片| 欧美三级欧美一级| 在线看日本不卡| 91亚洲精品乱码久久久久久蜜桃| 国产精品一区二区三区乱码| 久久99热这里只有精品| 日本aⅴ精品一区二区三区 | 激情综合网天天干| 久久99久国产精品黄毛片色诱| 奇米精品一区二区三区四区 | 久草精品在线观看|