📄 drawtooldlg.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 + -