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

📄 drawtooldlg.cpp

📁 EasyDraw是一个简单的绘图软件
💻 CPP
字号:
// DrawToolDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "EasyDraw.h"
#include "DrawToolDlg.h"


// CDrawToolDlg 对话框

IMPLEMENT_DYNAMIC(CDrawToolDlg, CDialog)

/******************************************************************************
*	作用:		构造函数
******************************************************************************/
CDrawToolDlg::CDrawToolDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDrawToolDlg::IDD, pParent)
	, m_nLineType(0)
	, m_nLineWidth(1)
	, m_bShow(true)
{
	m_clrColor = RGB(0, 0, 0);
}

CDrawToolDlg::~CDrawToolDlg()
{
}

void CDrawToolDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_STATIC_COLOR, m_stColor);
	DDX_Control(pDX, IDC_STATIC_PREV, m_stPrev);
	DDX_Text(pDX, IDC_EDIT_LINE_WIDTH, m_nLineWidth);
}

BEGIN_MESSAGE_MAP(CDrawToolDlg, CDialog)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_RADIO_SOLID, &CDrawToolDlg::OnBnClickedRadioSolid)
	ON_BN_CLICKED(IDC_RADIO_DASH, &CDrawToolDlg::OnBnClickedRadioDash)
	ON_BN_CLICKED(IDC_RADIO_DOT, &CDrawToolDlg::OnBnClickedRadioDot)
	ON_BN_CLICKED(IDC_RADIO_DASHDOT, &CDrawToolDlg::OnBnClickedRadioDashdot)
	ON_BN_CLICKED(IDC_RADIO_DASHDOTDOT, &CDrawToolDlg::OnBnClickedRadioDashdotdot)
	ON_EN_CHANGE(IDC_EDIT_LINE_WIDTH, &CDrawToolDlg::OnEnChangeEditLineWidth)
	ON_BN_CLICKED(IDC_CHANGE_COLOR, &CDrawToolDlg::OnBnClickedChangeColor)
END_MESSAGE_MAP()

/******************************************************************************
*	作用:		对话框的初始化
******************************************************************************/
BOOL CDrawToolDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	CSpinButtonCtrl* spinCtrl = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_LINE_WIDTH);

	// 关联文本框
	spinCtrl->SetBuddy(GetDlgItem(IDC_EDIT_LINE_WIDTH));
	spinCtrl->SetRange(1, 30);	// 调节范围
	spinCtrl->SetBase(10);		// 调节进制

	// “直线类型”默认选中第一项	
	CButton* typeBtn = (CButton*)GetDlgItem(IDC_RADIO_SOLID);
	typeBtn->SetCheck(TRUE);

	return TRUE;
}

/******************************************************************************
*	作用:		无模式对话框的释放
******************************************************************************/
void CDrawToolDlg::PostNcDestroy()
{
	delete this;

	CDialog::PostNcDestroy();
}

/******************************************************************************
*	作用:		绘制对话框
******************************************************************************/
void CDrawToolDlg::OnPaint()
{
	CPaintDC dc(this);

	UpdateDialog();	// 更新对话框
}

/******************************************************************************
*	作用:		绘制对话框中颜色框和预览框
******************************************************************************/
void CDrawToolDlg::UpdateDialog(void)
{
	UpdateData(TRUE);

	CDC* pColorDC = m_stColor.GetDC();	// 颜色框CDC指针
	CRect colorRect;					// 颜色框大小
	CBrush brush(m_clrColor);			// 当前颜色

	// 利用当前颜色填充颜色框
	m_stColor.GetClientRect(colorRect);
	pColorDC->FillRect(colorRect, &brush);
	ReleaseDC(pColorDC);

	// 根据当前直线类型、颜色、宽度创建铅笔对象
	LOGBRUSH logBrush;
	logBrush.lbStyle = BS_SOLID;
	logBrush.lbColor = m_clrColor;
	CPen pen(m_nLineType | PS_GEOMETRIC | PS_ENDCAP_ROUND, 
		     m_nLineWidth, &logBrush);
	
	CRect prevRect;						// 预览框大小
	m_stPrev.GetClientRect(prevRect);

	CDC* pPrevDC = m_stPrev.GetDC();	// 预览框CDC指针
	CPen* oldPen = pPrevDC->SelectObject(&pen);

	// 先用白色填充背景
	pPrevDC->FillSolidRect(0, 0, 
						   prevRect.Width(), 
						   prevRect.Height(), 
						   RGB(255, 255, 255));

	// 绘制直线
	pPrevDC->MoveTo(15, prevRect.Height() / 2);
	pPrevDC->LineTo(prevRect.Width() - 15, prevRect.Height() / 2);

	pPrevDC->SelectObject(oldPen);

	ReleaseDC(pPrevDC);
}

//--------------------------------------------------------------------------
//	作用:		单击直线类型的“正常”的响应函数
//--------------------------------------------------------------------------
void CDrawToolDlg::OnBnClickedRadioSolid()
{
	m_nLineType = PS_SOLID;

	// 更新对话框
	UpdateDialog();
}

/******************************************************************************
*	作用:		单击直线类型的“虚线”的响应函数
******************************************************************************/
void CDrawToolDlg::OnBnClickedRadioDash()
{
	m_nLineType = PS_DASH;

	// 更新对话框
	UpdateDialog();
}

/******************************************************************************
*	作用:		单击直线类型的“点线”的响应函数
******************************************************************************/
void CDrawToolDlg::OnBnClickedRadioDot()
{
	m_nLineType = PS_DOT;

	// 更新对话框
	UpdateDialog();
}

/******************************************************************************
*	作用:		单击直线类型的“虚点线1”的响应函数
******************************************************************************/
void CDrawToolDlg::OnBnClickedRadioDashdot()
{
	m_nLineType = PS_DASHDOT;

	// 更新对话框
	UpdateDialog();
}

/******************************************************************************
*	作用:		单击直线类型的“虚点线2”的响应函数
******************************************************************************/
void CDrawToolDlg::OnBnClickedRadioDashdotdot()
{
	m_nLineType = PS_DASHDOTDOT;

	// 更新对话框
	UpdateDialog();
}

/******************************************************************************
*	作用:		“改变颜色”按钮的响应函数
*	备注:		修改当前选中的颜色值
******************************************************************************/
void CDrawToolDlg::OnBnClickedChangeColor()
{
	CColorDialog dlg(m_clrColor);

	if (dlg.DoModal() == IDOK)
	{
		// 修改当前颜色
		m_clrColor = dlg.GetColor();
		
		// 更新对话框
		UpdateDialog();
	}
}

/******************************************************************************
*	作用:		线宽改变的响应函数
******************************************************************************/
void CDrawToolDlg::OnEnChangeEditLineWidth()
{
	UpdateData(TRUE);

	// 如果线宽超过30,自动调整为30
	if (m_nLineWidth > 30)
		m_nLineWidth = 30;

	UpdateData(FALSE);

	// 更新对话框
	UpdateDialog();
}

/******************************************************************************
*	作用:		在关闭时修改显示状态
******************************************************************************/
void CDrawToolDlg::OnCancel()
{
	m_bShow = false;

	CDialog::OnCancel();
}

⌨️ 快捷键说明

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