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

📄 bgcolorwnd.cpp

📁 一个农用车辆管理系统的雏形
💻 CPP
字号:
// BGColorWnd1.cpp : implementation file
//

#include "stdafx.h"
#include "NongCheManage.h"
#include "BGColorWnd.h"
#include ".\bgcolorwnd.h"

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

/////////////////////////////////////////////////////////////////////////////
// CBGColorWnd

CBGColorWnd::CBGColorWnd()
{
	//m_bitmap.LoadBitmap(IDB_BITMAP1);
	this->RadeImage();
	m_bitmap.Attach(m_hPhotoBitmap);
}

CBGColorWnd::~CBGColorWnd()
{
	m_bitmap.DeleteObject();
}


BEGIN_MESSAGE_MAP(CBGColorWnd, CWnd)
	//{{AFX_MSG_MAP(CBGColorWnd)
	// NOTE - the ClassWizard will add and remove mapping macros here.
	ON_WM_ERASEBKGND()
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBGColorWnd message handlers

BOOL CBGColorWnd::OnEraseBkgnd(CDC* pDC) 
{
	CDC dcMem;
	dcMem.CreateCompatibleDC(pDC);
	CBitmap * m_pOldBitmap=dcMem.SelectObject(&m_bitmap);

	BITMAP bmp;//得到位图大小
	m_bitmap.GetObject(sizeof(bmp),&bmp);

	CRect rect;//得到窗口大小
	GetClientRect(&rect);

	pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dcMem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
	
	dcMem.SelectObject(m_pOldBitmap); //还原

	return TRUE;
}

void CBGColorWnd::OnSize(UINT nType, int cx, int cy) 
{
	CWnd::OnSize(nType, cx, cy);
	
	Invalidate(TRUE);
}


BOOL CBGColorWnd::PreTranslateMessage(MSG* pMsg)
{
	//if(/*pMsg->hwnd==m_hWndMDIClient && */pMsg->message==WM_PAINT)
		//PostMessage(WM_PAINT);

	return CWnd::PreTranslateMessage(pMsg);
}

void CBGColorWnd::RadeImage(void)
{
	theApp.m_pRecordset.CreateInstance("ADODB.Recordset");
	HRESULT hr = theApp.m_pRecordset->Open("SELECT windowview FROM zp",_variant_t((IDispatch *)theApp.m_pConn,true),adOpenDynamic,adLockPessimistic,adCmdText);
    if(SUCCEEDED(hr))
	{
		long lDataSize = theApp.m_pRecordset->GetFields()->GetItem("windowview")->ActualSize;
		if(lDataSize > 0)
		{
			_variant_t varBLOB;
			varBLOB = theApp.m_pRecordset->GetFields()->GetItem("windowview")->GetChunk(lDataSize);
			if(varBLOB.vt == (VT_ARRAY | VT_UI1))
			{
				if(m_pBMPBuffer = new char[lDataSize+1])				///重新分配必要的存储空间
				{	
					char *pBuf = NULL;
					SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
					memcpy(m_pBMPBuffer,pBuf,lDataSize);				///复制数据到缓冲区m_pBMPBuffer
					SafeArrayUnaccessData (varBLOB.parray);
					m_nFileLen = lDataSize;
					m_hPhotoBitmap = BufferToHBITMAP();					///生成BITMAP对象
				}
			}
		}
	}
	theApp.m_pRecordset->Close();
	theApp.m_pRecordset=NULL;
}

HBITMAP CBGColorWnd::BufferToHBITMAP(void)
{
	HBITMAP				hBmp;
	LPSTR				hDIB,lpBuffer = m_pBMPBuffer;
	LPVOID				lpDIBBits;
	BITMAPFILEHEADER	bmfHeader;
	DWORD				bmfHeaderLen;
	bmfHeaderLen = sizeof(bmfHeader);
	strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);
	if (bmfHeader.bfType != (*(WORD*)"BM"))
		return NULL; 
	hDIB = lpBuffer + bmfHeaderLen;
	BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ;
	BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ;
	lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER *)lpBuffer)->bfOffBits;//这行功能和上面被注释掉的代码相同,容易理解。
	CClientDC dc(this);
	hBmp = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);
	return hBmp;
}

/*void CLogin::DrawUserPhoto(CDC *pDC)
{
	if(!m_hPhotoBitmap)
		return;
	HBITMAP OldBitmap;
	CDC MemDC;
	MemDC.CreateCompatibleDC(pDC);
	OldBitmap=(HBITMAP)MemDC.SelectObject(m_hPhotoBitmap);
	CRect rect;
	GetClientRect(rect);
	pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);//不伸缩
	//pDC->StretchBlt(0,0,120,120,&MemDC,0,0,200,240,SRCCOPY);
	MemDC.SelectObject(OldBitmap);
}*/

⌨️ 快捷键说明

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