📄 hmxchart.cpp
字号:
//
// return
//
// true if ok, else false
//
bool CHMXChart::CalcDatas()
{
double nTemp1, nTemp2;
int f=0, nTemp3;
GetClientRect( m_rectArea );
m_rectUsable.top = m_rectArea.top + m_rectArea.Height()/HMX_AREA_MARGINS;
m_rectUsable.bottom = m_rectArea.bottom - m_rectArea.Height()/HMX_AREA_MARGINS;
m_rectUsable.left = m_rectArea.left + m_rectArea.Width() /HMX_AREA_MARGINS;
m_rectUsable.right = m_rectArea.right - m_rectArea.Width() /HMX_AREA_MARGINS;
// let's calc everything
if( !m_strTitle.IsEmpty() ) {
m_rectTitle.top = m_rectUsable.top;
m_rectTitle.left = m_rectUsable.left;
m_rectTitle.bottom = m_rectUsable.bottom/HMX_AREA_TITLE;
m_rectTitle.right = m_rectUsable.right;
m_rectGraph.top = m_rectTitle.bottom;
m_rectGraph.left = m_rectUsable.left;
m_rectGraph.bottom = m_rectUsable.bottom;
m_rectGraph.right = m_rectUsable.right;
} else {
m_rectGraph = m_rectUsable;
}
m_rectYAxis.top = m_rectGraph.top;
m_rectYAxis.left = m_rectGraph.left;
m_rectYAxis.bottom = m_rectGraph.top + m_rectGraph.Height()*(100-HMX_AREA_XAXIS)/100;
m_rectYAxis.right = m_rectGraph.left + m_rectGraph.Width()*(HMX_AREA_YAXIS)/100;
m_rectXAxis.top = m_rectGraph.top + m_rectGraph.Height()*(100-HMX_AREA_XAXIS)/100;
m_rectXAxis.left = m_rectGraph.left + m_rectGraph.Width()*(HMX_AREA_YAXIS)/100;
m_rectXAxis.bottom = m_rectGraph.bottom;
m_rectXAxis.right = m_rectGraph.right;
m_rectData.top = m_rectGraph.top;
m_rectData.bottom = m_rectXAxis.top;
m_rectData.left = m_rectYAxis.right;
m_rectData.right = m_rectGraph.right;
// reset
m_nXMax = 0;
for( f=0; f<HMX_MAX_DATASET; f++ ) {
nTemp3 = m_dataset[f].GetDatasetSize();
m_nXMax = max( m_nXMax, nTemp3 );
}
// Hey man, there's nothing to draw
if( m_nXMax == 0 )
return false;
// search min & max in first non-empty dataset
//f = 0;
//while( !m_dataset[f].GetMinMax( m_nYMin, m_nYMax ) )
// f++;
// let's search
for(f = 0 ; f<HMX_MAX_DATASET; f++ )
{
if( m_dataset[f].GetMinMax( nTemp1, nTemp2 ) )
{
m_nYMin = min( m_nYMin ,nTemp1 );
m_nYMax = max( m_nYMax, nTemp2 );
}
}
return true;
}
//
// Redraw
// redraw everything
//
// arguments
//
// none
//
// return
//
// true if ok, else false
//
bool CHMXChart::Redraw()
{
Invalidate(true);
GetParent()->SendMessage( WM_PAINT, 0, 0 );
return true;
}
//
// SetData
// Add new data to the dataset
//
// arguments
//
// nDatasetIndex = the dataset index
// nData = the value
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetData(int nDatasetIndex, double nData)
{
if( nDatasetIndex < 0 || nDatasetIndex >= HMX_MAX_DATASET )
return false;
return m_dataset[nDatasetIndex].SetData(nData);
}
//
// SetData
// Modify a data into the dataset
//
// arguments
//
// nDatasetIndex = dataset index
// nIndex = index
// nData = value
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetData(int nDatasetIndex, int nIndex, double nData)
{
if( nDatasetIndex < 0 || nDatasetIndex >= HMX_MAX_DATASET )
return false;
return m_dataset[nDatasetIndex].SetData(nIndex, nData);
}
//
// GetData
// get data from the dataset
//
// arguments
//
// nDatasetIndex = dataset index
// nIndex = index
// nData = value
//
// return
//
// true if ok, else false
//
bool CHMXChart::GetData(int nDatasetIndex, int nIndex, double& nData)
{
if( nDatasetIndex < 0 || nDatasetIndex >= HMX_MAX_DATASET )
return false;
return m_dataset[nDatasetIndex].GetData(nIndex,nData);
}
//
// SetDatasetStyle
//
// arguments
//
// nDatasetIndex = dataset index
// nStyle = style
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetDatasetStyle(int nDatasetIndex, int nStyle)
{
if( nDatasetIndex < 0 || nDatasetIndex >= HMX_MAX_DATASET )
return false;
return m_dataset[nDatasetIndex].SetStyle( nStyle );
}
//
// GetDatasetStyle
//
// arguments
//
// nDatasetIndex = dataset index
// nStyle = style
//
// return
//
// true if ok, else false
//
bool CHMXChart::GetDatasetStyle(int nDatasetIndex, int& nStyle)
{
if( nDatasetIndex < 0 || nDatasetIndex >= HMX_MAX_DATASET )
return false;
nStyle = m_dataset[nDatasetIndex].GetStyle();
return true;
}
//
// SetDatasetMarker
//
// arguments
//
// nDatasetIndex = dataset index
// nMarker = marker
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetDatasetMarker(int nDatasetIndex, int nMarker)
{
if( nDatasetIndex < 0 || nDatasetIndex >= HMX_MAX_DATASET )
return false;
return m_dataset[nDatasetIndex].SetMarker( nMarker );
}
//
// GetDatasetMarker
//
// arguments
//
// nDatasetIndex = dataset index
// nMarker = marker
//
// return
//
// true if ok, else false
//
bool CHMXChart::GetDatasetMarker(int nDatasetIndex, int& nMarker)
{
if( nDatasetIndex < 0 || nDatasetIndex >= HMX_MAX_DATASET )
return false;
nMarker = m_dataset[nDatasetIndex].GetMarker();
return true;
}
//
// SetDatasetPenSize
//
// arguments
//
// nDatasetIndex = dataset index
// nSize = pen size in pixel or bar size (range 1-10)
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetDatasetPenSize(int nDatasetIndex, int nSize)
{
if( nDatasetIndex < 0 || nDatasetIndex >= HMX_MAX_DATASET )
return false;
return m_dataset[nDatasetIndex].SetSize( nSize );
}
//
// GetDatasetPenSize
//
// arguments
//
// nDatasetIndex = dataset index
// nSize = size
//
// return
//
// true if ok, else false
//
bool CHMXChart::GetDatasetPenSize(int nDatasetIndex, int& nSize)
{
if( nDatasetIndex < 0 || nDatasetIndex >= HMX_MAX_DATASET )
return false;
nSize = m_dataset[nDatasetIndex].GetSize();
return true;
}
//
// SetDatasetPenColor
//
// arguments
//
// nDatasetIndex = dataset index
// clr = color
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetDatasetPenColor(int nDatasetIndex, COLORREF clr)
{
if( nDatasetIndex < 0 || nDatasetIndex >= HMX_MAX_DATASET )
return false;
return m_dataset[nDatasetIndex].SetColor( clr );
}
//
// GetDatasetPenColor
//
// arguments
//
// nDatasetIndex = dataset index
// clr = color
//
// return
//
// true if ok, else false
//
bool CHMXChart::GetDatasetPenColor(int nDatasetIndex, COLORREF& clr)
{
if( nDatasetIndex < 0 || nDatasetIndex >= HMX_MAX_DATASET )
return false;
clr = m_dataset[nDatasetIndex].GetColor();
return true;
}
//
// SetBkGnd
//
// arguments
//
// clr = color
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetBkGnd(COLORREF clr)
{
m_clrBkGnd = clr;
return true;
}
//
// SetBkGnd
//
// arguments
//
// none
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetBkGnd()
{
CColorDialog dlg( GetBkGnd() );
if( dlg.DoModal() == IDOK )
return SetBkGnd( dlg.GetColor() );
else
return false;
}
//
// GetBkGnd
//
// arguments
//
// none
//
// return
//
// background color
//
COLORREF CHMXChart::GetBkGnd()
{
return m_clrBkGnd;
}
//
// SetTitle
//
// arguments
//
// sTitle = title
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetTitle(CString strTitle)
{
m_strTitle = strTitle;
return true;
}
//
// GetTitle
//
// arguments
//
// none
//
// return
//
// title
//
CString CHMXChart::GetTitle()
{
return m_strTitle;
}
//
// SetYTicks
//
// arguments
//
// nTicks = Y divisions (or ticks) in range 0-100
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetYTicks(int nTicks)
{
m_nYTicks = nTicks;
m_nYTicks = min( m_nYTicks, 100 );
m_nYTicks = max( m_nYTicks, 0 );
return true;
}
//
// GetYTicks
//
// arguments
//
// none
//
// return
//
// nTicks
//
int CHMXChart::GetYTicks()
{
return m_nYTicks;
}
//
// ShowYScale
//
// arguments
//
// bShow = show scale if true
//
// return
//
// true if ok, else false
//
bool CHMXChart::ShowYScale(bool bShow)
{
m_bShowYScale = bShow;
return true;
}
//
// SetRoundY
// let's try to improve readability
//
// arguments
//
// nRoundY = rounding value
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetRangeY(double min , double max)
{
m_nYMin = min;
m_nYMax = max;
return true;
}
//
// SetYText
//
// arguments
//
// sText = text
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetYText(CString sText)
{
m_strYText = sText;
return true;
}
//
// GetYText
//
// arguments
//
// none
//
// return
//
// sText = text
//
CString CHMXChart::GetYText()
{
return m_strYText;
}
//
// SetXText
//
// arguments
//
// sText = text
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetXText(CString sText)
{
m_strXText = sText;
return true;
}
//
// GetXText
//
// arguments
//
// none
//
// return
//
// sText = text
//
CString CHMXChart::GetXText()
{
return m_strXText;
}
//
// SetXScaleLabel
//
// arguments
//
// nIndex = index
// str = text
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetXScaleLabel(int nIndex, CString str)
{
try {
m_strarrScaleXLabel.SetAtGrow( nIndex, str );
} catch( ... ) {
return false;
}
return true;
}
//
// GetXScaleLabel
//
// arguments
//
// nIndex = index
// str = text
//
// return
//
// true if ok, else false
//
bool CHMXChart::GetXScaleLabel(int nIndex, CString& str)
{
if( nIndex < 0 || nIndex > m_strarrScaleXLabel.GetUpperBound() )
return false;
str = m_strarrScaleXLabel.GetAt( nIndex );
return true;
}
//
// SetXLabelStep
//
// arguments
//
// nStep = x label step
//
// return
//
// true if ok, else false
//
bool CHMXChart::SetXLabelStep(int nStep)
{
m_nXLabelStep = max( nStep, 1 );
return true;
}
//
// GetXLabelStep
//
// arguments
//
// none
//
// return
//
// nStep = x label step
//
int CHMXChart::GetXLabelStep()
{
return m_nXLabelStep;
}
bool CHMXChart::RemoveDataSet(int iset)
{
m_dataset[iset].m_data.RemoveAll();
m_strarrScaleXLabel.RemoveAll();
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -