#include "stdafx.h" #include "SLTDlg.h" IMPLEMENT_DYNAMIC(CSLTDlg, CDialog) CSLTDlg::CSLTDlg(CWnd* pParent /*=nullptr*/) : CDialog(IDD_DLG_SLT, pParent) , m_sPicturePath(_T("")) , m_hBitmap(NULL) { } CSLTDlg::~CSLTDlg() { if (m_hBitmap) ::DeleteObject(m_hBitmap); } void CSLTDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BOOL CSLTDlg::OnInitDialog() { CDialog::OnInitDialog(); refresh(NULL); return TRUE; } BEGIN_MESSAGE_MAP(CSLTDlg, CDialog) ON_WM_PAINT() ON_MESSAGE( WM_ACAD_KEEPFOCUS, &CSLTDlg::onAcadKeepFocus ) END_MESSAGE_MAP() void CSLTDlg::OnPaint() { CPaintDC dc(this); CBitmap *pBitmap = CBitmap::FromHandle(m_hBitmap); if (!pBitmap) return; BITMAP bmp; pBitmap->GetBitmap(&bmp); CRect rc; GetClientRect(rc); CDC memDc; CBitmap memBitmap; memDc.CreateCompatibleDC(&dc); CBitmap *pOldBit = memDc.SelectObject(pBitmap); dc.BitBlt(rc.left, rc.top, rc.Width(), rc.Height(), &memDc, 0, 0, SRCCOPY); memDc.SelectObject(pBitmap); } LONG_PTR CSLTDlg::onAcadKeepFocus(UINT_PTR, LONG_PTR) { POINT pt; ::GetCursorPos(&pt); CRect rect; GetWindowRect(&rect); if (!(rect.PtInRect(pt))) { return FALSE; } return TRUE; } void CSLTDlg::setPicture(LPCTSTR pszPath, CWnd *pParent) { if (!pszPath) return; if (_taccess(pszPath, 0x00) != 0x00) return; m_sPicturePath = pszPath; refresh(pParent); } bool CSLTDlg::isSamePicture(LPCTSTR pszPath) { if (!pszPath) return false; if (m_sPicturePath.CompareNoCase(pszPath) == 0) return true; return false; } void CSLTDlg::refresh(CWnd *pParent) { if (m_hBitmap) ::DeleteObject(m_hBitmap); m_hBitmap = (HBITMAP)::LoadImage(0, m_sPicturePath, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); CBitmap *pBitmap = CBitmap::FromHandle(m_hBitmap); if (pBitmap) { BITMAP bmp; pBitmap->GetBitmap(&bmp); CRect rc1, rc2; GetWindowRect(rc1); GetClientRect(rc2); int deltaW = rc1.Width() - rc2.Width(); int deltaH = rc1.Height() - rc2.Height(); rc1.right = rc1.left + bmp.bmWidth + deltaW; rc1.bottom = rc1.top + bmp.bmHeight + deltaH; if (pParent) { pParent->GetWindowRect(rc2); CRect rc(CPoint(rc2.right, rc2.top), rc1.Size()); MoveWindow(rc); } else MoveWindow(rc1); } }