2026-10-04 00:04:20 +08:00
|
|
|
#include "stdafx.h"
|
2026-09-28 15:28:50 +08:00
|
|
|
#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);
|
|
|
|
|
}
|
|
|
|
|
}
|