Files
envi-code/SourceCode/Code2026/CoreCommand/SLTDlg.cpp
T
2026-09-28 15:28:50 +08:00

115 lines
2.2 KiB
C++

#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);
}
}