📄 graphctrl.cpp
字号:
// GraphCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "CVenus.h"
#include "GraphCtrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGraphCtrl dialog
CGraphCtrl::CGraphCtrl(CWnd* pParent /*=NULL*/)
: CDialog(CGraphCtrl::IDD, pParent)
{
//{{AFX_DATA_INIT(CGraphCtrl)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_bSetAllBlack = FALSE;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
CGraphCtrl::~CGraphCtrl()
{
}
void CGraphCtrl::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGraphCtrl)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGraphCtrl, CDialog)
//{{AFX_MSG_MAP(CGraphCtrl)
ON_LBN_SELCHANGE(IDC_LIST_LINENAME, OnSelchangeListLinename)
ON_BN_CLICKED(IDC_BTN_COLOR, OnBtnColor)
ON_LBN_SELCHANGE(IDC_LIST_LINEWIDTH, OnSelchangeListLinewidth)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_CHECK, OnCheck)
ON_WM_NCHITTEST()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGraphCtrl message handlers
BOOL CGraphCtrl::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CCVenusApp* pApp = ((CCVenusApp*)AfxGetApp());
CString str;
int i;
for( i = 1; i <= pApp->m_pGraphData[pApp->m_iGraphLoc - 1].iLineNum; i++)
{
str.Format("线条%d", i);
((CListBox*)GetDlgItem(IDC_LIST_LINENAME))->AddString(str);
}
((CListBox*)GetDlgItem(IDC_LIST_LINENAME))->SetCurSel(0);
for(i = 1; i <= 9; i++)
{
str.Format("%d", i);
((CListBox*)GetDlgItem(IDC_LIST_LINEWIDTH))->AddString(str);
}
int iGraphLoc = pApp->m_iGraphLoc;
int width = pApp->m_pGraphData[iGraphLoc - 1].pLineParm[0].iWidth;
((CListBox*)GetDlgItem(IDC_LIST_LINEWIDTH))->SetCurSel(width - 1);
// 设置图形边界
str.Format("%.0f", pApp->m_pGraphDlg->m_pMinMax[0]);
GetDlgItem(IDC_EDIT1)->SetWindowText(str);
str.Format("%.0f", pApp->m_pGraphDlg->m_pMinMax[1]);
GetDlgItem(IDC_EDIT2)->SetWindowText(str);
str.Format("%.0f", pApp->m_pGraphDlg->m_pMinMax[2]);
GetDlgItem(IDC_EDIT3)->SetWindowText(str);
str.Format("%.0f", pApp->m_pGraphDlg->m_pMinMax[3]);
GetDlgItem(IDC_EDIT4)->SetWindowText(str);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/*************************************************************************
*
* OnSelchangeListLinename()
*
* 功 能: 选择线条名称
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CGraphCtrl::OnSelchangeListLinename()
{
CCVenusApp* pApp = ((CCVenusApp*)AfxGetApp());
int rstList = ((CListBox*)GetDlgItem(IDC_LIST_LINENAME))->GetCurSel();
int iGraphLoc = pApp->m_iGraphLoc;
int width = pApp->m_pGraphData[iGraphLoc - 1].pLineParm[rstList].iWidth;
((CListBox*)GetDlgItem(IDC_LIST_LINEWIDTH))->SetCurSel(width - 1);
DrawLine();
}
/*************************************************************************
*
* OnBtnColor()
*
* 功 能: 设置设置线条颜色
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CGraphCtrl::OnBtnColor()
{
CCVenusApp* pApp = ((CCVenusApp*)AfxGetApp());
int rstListName = ((CListBox*)GetDlgItem(IDC_LIST_LINENAME))->GetCurSel();
int rstListWidth = ((CListBox*)GetDlgItem(IDC_LIST_LINEWIDTH))->GetCurSel();
int iGraphLoc = pApp->m_iGraphLoc;
CColorDialog dlg;
if(dlg.DoModal() == IDOK)
{
// 保存线条颜色
pApp->m_pGraphData[iGraphLoc - 1].pLineParm[rstListName].cColor = dlg.GetColor();
// 绘制“示例”线条
DrawLine();
}
}
/*************************************************************************
*
* OnOK()
*
* 功 能: 确定
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CGraphCtrl::OnOK()
{
if(m_bSetAllBlack)
{
CCVenusApp* pApp = ((CCVenusApp*)AfxGetApp());
int iGraphLoc = pApp->m_iGraphLoc;
for(int i = 0; i <= pApp->m_pGraphData[pApp->m_iGraphLoc - 1].iLineNum; i++)
{
pApp->m_pGraphData[iGraphLoc - 1].pLineParm[i].cColor = 0;
}
}
// 保存设置值并重新绘制图形
((CCVenusApp*)AfxGetApp())->GraphCtrl();
CDialog::OnOK();
}
/*************************************************************************
*
* OnSelchangeListLinewidth()
*
* 功 能: 选择线条宽度
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CGraphCtrl::OnSelchangeListLinewidth()
{
CCVenusApp* pApp = ((CCVenusApp*)AfxGetApp());
int rstListName = ((CListBox*)GetDlgItem(IDC_LIST_LINENAME))->GetCurSel();
int rstListWidth = ((CListBox*)GetDlgItem(IDC_LIST_LINEWIDTH))->GetCurSel();
int iGraphLoc = pApp->m_iGraphLoc;
// 保存线条宽度
pApp->m_pGraphData[iGraphLoc - 1].pLineParm[rstListName].iWidth = rstListWidth + 1;
// 绘制“示例”线条
DrawLine();
}
/*************************************************************************
*
* OnPaint()
*
* 功 能: 绘制示例线条
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CGraphCtrl::OnPaint()
{
DrawLine();
CDialog::OnPaint();
}
/*************************************************************************
*
* DrawLine()
*
* 功 能: 绘制示例线条
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CGraphCtrl::DrawLine()
{
CDC* pControlDC;
CPen* oldpen;
CBrush* oldbrush;
CBrush brush(RGB(255, 255, 255));
CRect rect;
CCVenusApp* pApp = ((CCVenusApp*)AfxGetApp());
int rstListName = ((CListBox*)GetDlgItem(IDC_LIST_LINENAME))->GetCurSel();
int rstListWidth = ((CListBox*)GetDlgItem(IDC_LIST_LINEWIDTH))->GetCurSel();
int iGraphLoc = pApp->m_iGraphLoc;
int width;
COLORREF color;
pApp->m_pGraphData[iGraphLoc - 1].pLineParm[rstListName].iWidth = rstListWidth + 1;
width = pApp->m_pGraphData[iGraphLoc - 1].pLineParm[rstListName].iWidth;
color = pApp->m_pGraphData[iGraphLoc - 1].pLineParm[rstListName].cColor;
CPen newPen(PS_SOLID, width, color);
pControlDC = GetDlgItem(IDC_PICTURE)->GetDC();
GetDlgItem(IDC_PICTURE)->UpdateWindow();
GetDlgItem(IDC_PICTURE)->GetClientRect(&rect);
oldpen =(CPen*)pControlDC->SelectObject(&newPen);
oldbrush =(CBrush*)pControlDC->SelectObject(&brush);
pControlDC->FillRect(&rect, &brush);
pControlDC->SetBkColor(color);
pControlDC->MoveTo(rect.left + 5, rect.top + (rect.Height() - width) / 2);
pControlDC->LineTo(rect.right - 5, rect.top + (rect.Height() - width) / 2);
pControlDC->SelectObject(oldpen);
pControlDC->SelectObject(oldbrush);
GetDlgItem(IDC_PICTURE)->ReleaseDC(pControlDC);
}
/*************************************************************************
*
* OnCheck()
*
* 功 能: 全部线条设置为黑色
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CGraphCtrl::OnCheck()
{
if( ((CButton*)GetDlgItem(IDC_CHECK))->GetCheck() )
{
m_bSetAllBlack = TRUE;
}
else
{
m_bSetAllBlack = FALSE;
}
}
UINT CGraphCtrl::OnNcHitTest(CPoint point)
{
UINT nHitTest =CDialog::OnNcHitTest(point);
return (nHitTest == HTCAPTION)?HTCLIENT:nHitTest;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -