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

📄 graphctrl.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 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 + -