⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imgdispdlg.cpp

📁 这是书上的代码
💻 CPP
字号:
// ImgDispDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "Ex_UseImage.h"
#include "ImgDispDlg.h"


// CImgDispDlg 对话框

IMPLEMENT_DYNAMIC(CImgDispDlg, CDialog)
CImgDispDlg::CImgDispDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CImgDispDlg::IDD, pParent)
	, m_bAlphaValue(0)
{
}

CImgDispDlg::~CImgDispDlg()
{
}

void CImgDispDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDITALPHA, m_bAlphaValue);
	DDV_MinMaxByte(pDX, m_bAlphaValue, 0, 255);
	DDX_Control(pDX, IDC_SPIN1, m_spinAlpha);
}


BEGIN_MESSAGE_MAP(CImgDispDlg, CDialog)
	ON_BN_CLICKED(IDC_RADIO1, OnBnClickedRadio1)
	ON_BN_CLICKED(IDC_RADIO2, OnBnClickedRadio2)
	ON_BN_CLICKED(IDC_PREVIEW, OnBnClickedPreview)
	ON_BN_CLICKED(IDOK, OnBnClickedOk)
	ON_WM_PAINT()
END_MESSAGE_MAP()


// CImgDispDlg 消息处理程序

void CImgDispDlg::OnBnClickedRadio1()
{
	// TODO: 在此添加控件通知处理程序代码
	m_nDispMode = 0;
	GetDlgItem(IDC_EDITALPHA)->EnableWindow(FALSE);
	GetDlgItem(IDC_SPIN1)->EnableWindow(FALSE);
}

void CImgDispDlg::OnBnClickedRadio2()
{
	// TODO: 在此添加控件通知处理程序代码
	m_nDispMode = 1;
	GetDlgItem(IDC_EDITALPHA)->EnableWindow();
	GetDlgItem(IDC_SPIN1)->EnableWindow();
}

void CImgDispDlg::OnBnClickedPreview()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData();
	OnPaint();
}

void CImgDispDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData();
	OnOK();
}

BOOL CImgDispDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  在此添加额外的初始化
	m_nDispMode = 0;
	GetDlgItem(IDC_EDITALPHA)->EnableWindow(FALSE);
	GetDlgItem(IDC_SPIN1)->EnableWindow(FALSE);

	m_spinAlpha.SetRange(0,255);
	CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);

	m_bAlphaValue = 128;
	UpdateData(FALSE);
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常:OCX 属性页应返回 FALSE
}

void CImgDispDlg::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO: 在此添加消息处理程序代码
	// 不为绘图消息调用 CDialog::OnPaint()
	CWnd* pWnd = GetDlgItem(IDC_IMAGEDRAW);
	CDC* pDC = pWnd->GetDC();
	CRect rc;
	pWnd->GetClientRect(rc);

	// 以下目的是保持图像的纵横比
	double imgRatio = (double)(m_dlgImage.GetHeight())/(double)(m_dlgImage.GetWidth());
	int height = (int)((double)(rc.Width())*imgRatio);
	CRect rcDest(0,0,m_dlgImage.GetWidth(),m_dlgImage.GetHeight());

	if (height>rc.Height()) {
		rc.DeflateRect((rc.Width() - (int)((double)(rc.Height())/imgRatio))/2,0);
	} else {
		rc.DeflateRect(0,(rc.Height()-height)/2);
	}

	pWnd->Invalidate();
	pWnd->UpdateWindow();

	switch (m_nDispMode) {
		case 0:
			m_dlgImage.Draw(pDC->m_hDC,rc);
			break;
		case 1:
			m_dlgImage.AlphaBlend(pDC->m_hDC,rc,rcDest,m_bAlphaValue);
			break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -