⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imageshow.cpp

📁 这是一个采用OLE DB编程处理的上传BLOB类型的二进制数据到数据库的一个实例
💻 CPP
字号:
// ImageShow.cpp : implementation file
//

#include "stdafx.h"
#include "BOLB.h"
#include "ImageShow.h"

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

/////////////////////////////////////////////////////////////////////////////
// CImageShow

CImageShow::CImageShow()
{
	m_bShowFlag=FALSE;
}

CImageShow::~CImageShow()
{
	if(m_bShowFlag){
		pPic->Release();
		GlobalFree(hGlobal);
		m_bShowFlag=FALSE;
	}
}


BEGIN_MESSAGE_MAP(CImageShow, CEdit)
	//{{AFX_MSG_MAP(CImageShow)
	ON_WM_LBUTTONDOWN()
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CImageShow message handlers

void CImageShow::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	MessageBox("asdglasdg");
	CEdit::OnLButtonDown(nFlags, point);
}

void CImageShow::ShowImage(CString strFileName)
{	
	if(m_bShowFlag){
		pPic->Release();
		GlobalFree(hGlobal);
		m_bShowFlag=FALSE;
	}
	CFileStatus fstatus; 
	CFile file; 
	LONG cb; 
	
	if (file.Open(strFileName,CFile::modeRead)&&file.GetStatus(strFileName, fstatus)&& ((cb = fstatus.m_size) != -1)) 
	{ 
		hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); 
		LPVOID pvData = NULL; 
		if (hGlobal != NULL) 
		{ 
			if ((pvData = GlobalLock(hGlobal)) != NULL) 
			{ 
				file.ReadHuge(pvData, cb); 
				GlobalUnlock(hGlobal); 
				
				IStream *pStm;
				CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); 
				
				if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID* )&pPic))) 
				{
					m_bShowFlag=TRUE;
				} 
				else m_bShowFlag=FALSE;
			} 
			else m_bShowFlag=FALSE;
		}
		else m_bShowFlag=FALSE;
	} 
	else m_bShowFlag=FALSE;

	Invalidate();
}

void CImageShow::OnPaint() 
{
	CPaintDC dc(this);
	CRect rect;
	GetClientRect(&rect);
	if(!m_bShowFlag){
		CBrush newBrush(RGB(0,0,0));
		CRgn rgn;
		rgn.CreateRectRgn(rect.left,rect.top,rect.right,rect.bottom);
		dc.FillRgn(&rgn,&newBrush);
		return;
	}
	
	OLE_XSIZE_HIMETRIC hmWidth; 
	OLE_YSIZE_HIMETRIC hmHeight; 
	
	pPic->get_Width(&hmWidth); 
	pPic->get_Height(&hmHeight); 
	
	double fX,fY;
	fX = rect.right-rect.left;
	fY = rect.bottom-rect.top;
	
	pPic->Render(dc.GetSafeHdc(),0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -