📄 bgcolorwnd.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 + -