// SnapshotMagnifierCtrl.cpp : implementation file // #include "stdafx.h" #include "mbcapturescreen.h" #include "SnapshotMagnifierCtrl.h" // CSnapshotMagnifierCtrl CSnapshotMagnifierCtrl::CSnapshotMagnifierCtrl() { m_pMagnifierBitmap = NULL; m_strSelSize = _T(""); m_strPointColor = _T(""); m_pImgMagnifierBk = NULL; HINSTANCE hInstance = AfxGetStaticModuleState()->m_hCurrentInstanceHandle; ImageFromIDResource(IDB_PNG_MAGNIFIER,_T("PNG"),m_pImgMagnifierBk,hInstance); } CSnapshotMagnifierCtrl::~CSnapshotMagnifierCtrl() { if(m_pMagnifierBitmap) delete m_pMagnifierBitmap; m_pMagnifierBitmap = NULL; if(m_pImgMagnifierBk) delete m_pImgMagnifierBk; m_pImgMagnifierBk = NULL; } // CSnapshotMagnifierCtrl member functions void CSnapshotMagnifierCtrl::SetMagnifierTip(Gdiplus::Bitmap*pMagnifierBitmap, CString strSelSize, CString strPointColor) { if(m_pMagnifierBitmap) delete m_pMagnifierBitmap; m_pMagnifierBitmap = NULL; if(pMagnifierBitmap) { m_pMagnifierBitmap = pMagnifierBitmap->Clone(0,0,132,95,PixelFormatDontCare); } m_strSelSize =strSelSize; m_strPointColor =strPointColor; Invalidate(); } void CSnapshotMagnifierCtrl::OnPaint(IRenderTarget *pRT) { HDC hDC = pRT->GetDC(); CMBDC dcCompatible; dcCompatible.CreateCompatibleDC(hDC); //dcCompatible.SelectBitmap(*m_pBitmap); SOUI::CRect rect = this->GetWindowRect(); //SOUI::CRect rect(0, 0, m_nScreenX, m_nScreenY); //BitBlt(hDC, 0, 0, rect.Width(), rect.Height(), dcCompatible, 0, 0, SRCCOPY); Graphics graph(hDC); Rect rcDrawRect; rcDrawRect.X = rect.left; rcDrawRect.Y = rect.top; rcDrawRect.Width = rect.Width(); rcDrawRect.Height = rect.Height(); // graph.SetClip(rcDrawRect); //SolidBrush whiteBrush(Color(255,255,255,255)); //graph.FillRectangle(&whiteBrush, rcDrawRect); if(m_pMagnifierBitmap) { graph.DrawImage(m_pMagnifierBitmap,rcDrawRect.X,rcDrawRect.Y,rcDrawRect.Width,95); if( m_pImgMagnifierBk) graph.DrawImage(m_pImgMagnifierBk,rcDrawRect.X,rcDrawRect.Y,rcDrawRect.Width,rcDrawRect.Height); } float nFonSize = 10; Gdiplus::Font font(_T("΢ÈíÑźÚ"),nFonSize); Gdiplus::SolidBrush sb(Color::White); graph.SetTextRenderingHint(TextRenderingHintClearTypeGridFit); graph.DrawString(m_strSelSize,-1,&font,PointF(rcDrawRect.X+5,rcDrawRect.Y+94),&sb); graph.DrawString(m_strPointColor,-1,&font,PointF(rcDrawRect.X+5,rcDrawRect.Y+108),&sb); //graph.ResetClip(); pRT->ReleaseDC(hDC); } bool CSnapshotMagnifierCtrl::ImageFromIDResource(UINT nID, CString strType, Image * & pImg ,HINSTANCE hInstance) { pImg = NULL; HINSTANCE hInst = hInstance; HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),strType); if (!hRsrc) { return FALSE; } DWORD len = SizeofResource(hInst, hRsrc); BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc); if (!lpRsrc) { return FALSE; } HGLOBAL hMem = GlobalAlloc(GMEM_FIXED, len); BYTE* pmem = (BYTE*)GlobalLock(hMem); memcpy(pmem,lpRsrc,len); IStream* pstm= NULL ; CreateStreamOnHGlobal(hMem,FALSE,&pstm); pImg=Gdiplus::Image::FromStream(pstm); GlobalUnlock(hMem); pstm->Release(); FreeResource(lpRsrc); //GlobalUnlock(hMem); // GlobalFree(hMem); return TRUE; }