📄 cvenus.cpp
字号:
m_pResultDlg->SetFocus();
m_bResultDisplayed = true;
}
/*************************************************************************
*
* OnDisCurGraph()
*
* 功 能: 显示当前图形
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CCVenusApp::OnDisCurGraph()
{
CStdioFile file;
CString str;
HANDLE hSearch;
WIN32_FIND_DATA FileData;
// m_btSaveType = 0x03;
if(m_btProjectType == 0x00)
{
Beep(650, 50);
AfxMessageBox("请选择工程!", MB_ICONINFORMATION);
return;
}
str = GetMyAppPath();
str += "\\tempfile.gra";
hSearch = FindFirstFile(str, &FileData);
if (hSearch == INVALID_HANDLE_VALUE)
{
AfxMessageBox("图形文件不存在!");
return;
}
CStringList pGraphData;
if(!ReadGraphData(&pGraphData, TRUE))
return;
m_pMainDlg->ShowWindow(SW_HIDE);
m_pResultDlg->ShowWindow(SW_HIDE);
DisplayGraph(&pGraphData);
pGraphData.RemoveAll();
}
/*************************************************************************
*
* ReadGraphData()
*
* 功 能: 读图形数据文件
*
* 参 数: CStringList* pGraphData: 存放图形数据链表
*
* 返回值: 无
*
*************************************************************************/
BOOL CCVenusApp::ReadGraphData(CStringList* pGraphData, BOOL bCur)
{
CStdioFile file;
CString FileStr, strFileName;
CString strFileExt;
// if(pGraphData == NULL) return false;
if(!bCur)
{
if(m_cBaseFileLeft.IsEmpty())
{
strFileName = GetOpenFileName(2);
if(strFileName.IsEmpty()) return false;
}
else
{
GetExtName(2, &strFileExt);
strFileName = m_cBaseFileLeft + '.' + strFileExt;
}
}
else
{
strFileName = GetMyAppPath();
strFileName += "\\tempfile.gra";
}
HANDLE hSearch;
WIN32_FIND_DATA FileData;
hSearch = FindFirstFile(strFileName, &FileData);
if (hSearch == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("图形文件不存在!"), MB_ICONINFORMATION);
return false;
}
if(!file.Open(strFileName, CFile::modeRead) )
{
AfxMessageBox(_T("无法打开图形文件!"), MB_ICONINFORMATION);
return false;
}
while(TRUE)
{
try
{
if( file.ReadString(FileStr) )
{
if(!FileStr.IsEmpty())
pGraphData->AddTail(FileStr);
}
else
{// 到文件尾
break;
}
}
catch (CFileException exception1)
{
Beep(650, 50);
AfxMessageBox("读文件出错!", MB_ICONINFORMATION);
return false;
}
}
m_pGraphDlg->m_cGraphFileName = strFileName;
if(!bCur)
{
m_cGraFilePath = strFileName;
}
else
m_cGraFilePath.Empty();
file.Close();
return true;
}
/*************************************************************************
*
* SetGraphPos()
*
* 功 能: 设置图形对话框位置
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
/*
void CCVenusApp::SetGraphPos()
{
CRect rc, wkSpaceRc, toolRc, statusRc;
m_pGraphDlg->SetParent(m_pMainWnd);
((CMainFrame*)m_pMainWnd)->m_wndWorkSpace.GetClientRect(&wkSpaceRc);
((CMainFrame*)m_pMainWnd)->m_wndToolBar.GetClientRect(&toolRc);
((CMainFrame*)m_pMainWnd)->m_wndStatusBar.GetClientRect(&statusRc);
GetClientRect(m_pMainWnd->m_hWnd, &rc);
m_pGraphDlg->SetWindowPos(NULL,
rc.left + wkSpaceRc.Width() + 14,
rc.top + toolRc.Height() + 4,
rc.Width() - wkSpaceRc.Width() - 16,
rc.Height() - toolRc.Height() - 6 - statusRc.Height(),
NULL);
}
*/
/*************************************************************************
*
* AnalyzeGraphStr()
*
* 功 能: 分析一行图形数据字符串
*
* 参 数: CString pGraphData: 存放图形数据链表
* int iRow: 行数
* BOOL bLineEnd: 线条数据是否结束
*
* 返回值: 无
*
*************************************************************************/
sAnalyzeStr* CCVenusApp::AnalyzeGraphStr(CString GraphStr, int iRow, BOOL bLineEnd)
{
sAnalyzeStr *pAnalyzeStr;
char ch;
CString str1, str2;
if(GraphStr.IsEmpty()) return NULL;
pAnalyzeStr = new sAnalyzeStr;
int len = GraphStr.GetLength();
ch = GraphStr.GetAt(0);
if(iRow == 10)
{// 坐标方式
pAnalyzeStr->iType = 0x02;
if(len < 2)
pAnalyzeStr->sData1.Insert(0, "1");
else
pAnalyzeStr->sData1.Insert(0, GraphStr.GetAt(1));
return pAnalyzeStr;
}
if(iRow < 10)
{// 标题或描述文字
pAnalyzeStr->iType = 0x01;
pAnalyzeStr->sData1 = GraphStr;
return pAnalyzeStr;
}
if(iRow > 10 && ch != ' ' && ch != '-')
{// 注释
pAnalyzeStr->iType =0x06;
pAnalyzeStr->sData1 = GraphStr;
return pAnalyzeStr;
}
// if(iRow > 10 && ch != ' ' && ch == '-')
if(iRow > 10 && ch == '-')
{
GetGraphDataStr(GraphStr, str1, str2);
if( !str1.Compare("-1") && !str2.Compare("-1") )
{// 线条数据结束
pAnalyzeStr->iType =0x04;
return pAnalyzeStr;
}
else if( !str1.Compare("-10") && !str2.Compare("-10") )
{// 图形数据结束
pAnalyzeStr->iType =0x05;
return pAnalyzeStr;
}
return pAnalyzeStr;
}
if(bLineEnd)
{// 线条颜色
GetGraphDataStr(GraphStr, str1, str2);
pAnalyzeStr->iType = 0x07;
pAnalyzeStr->sData1 = str1;
pAnalyzeStr->sData2 = str2;
return pAnalyzeStr;
}
if(iRow > 10 && ch == ' ')
{// 数据
GetGraphDataStr(GraphStr, str1, str2);
{
pAnalyzeStr->iType = 0x03;
pAnalyzeStr->sData1 = str1;
pAnalyzeStr->sData2 = str2;
return pAnalyzeStr;
}
}
return NULL;
}
/*************************************************************************
*
* GetGraphDataStr()
*
* 功 能: 取得图形数据字符串
*
* 参 数: CString dest: 目标字符串
* CString &str1: 结果字符串1
* CString &str2: 结果字符串2
*
* 返回值: 无
*
*************************************************************************/
void CCVenusApp::GetGraphDataStr(CString dest, CString &str1, CString &str2)
{
char ch;
BOOL bFirst = TRUE;
for(int i = 0; i < dest.GetLength(); i++)
{
ch = dest.GetAt(i);
if(i == 0 && ch == ' ') continue;
if(ch != ' ' && bFirst && ch != '\t')
{
str1.Insert(str1.GetLength(), ch);
}
else
{
bFirst = FALSE;
}
if(ch != ' ' && !bFirst && ch != '\n' && ch != '\t')
{
str2.Insert(str2.GetLength(), ch);
}
}
}
/*************************************************************************
*
* OnDispGraph1()
*
* 功 能: 显示图形
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CCVenusApp::OnDispGraph1()
{
if(m_btProjectType == 0x00)
{
Beep(650, 50);
AfxMessageBox("请选择工程!", MB_ICONINFORMATION);
return;
}
// m_btSaveType = 0x03;
CWaitCursor wait;
CStringList pGraphData;
if(!ReadGraphData(&pGraphData))
return;
m_pMainDlg->ShowWindow(SW_HIDE);
m_pResultDlg->ShowWindow(SW_HIDE);
DisplayGraph(&pGraphData);
pGraphData.RemoveAll();
/*
str.Format("共%d幅图形,第1幅", m_iGraphNum);
m_pGraphDlg->SetWindowText(str);
static BOOL first = TRUE;
if(first)
{
m_pGraphDlg->DrawGraph(m_pGraphData, 0, 0);
first = FALSE;
}
else
{
m_pGraphDlg->DrawGraph(m_pGraphData, 1, 0);
}
m_iGraphLoc = 0x01;
delete pGraphData;
*/
}
/*************************************************************************
*
* OnDispGraph2()
*
* 功 能: 设置线条颜色
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CCVenusApp::OnDispGraph2()
{
if(m_btProjectType == 0x00)
{
Beep(650, 50);
AfxMessageBox("请选择工程!", MB_ICONINFORMATION);
return;
}
if(m_pGraphData == NULL) return;
CGraphCtrl dlg;
dlg.DoModal();
}
/*************************************************************************
*
* GraphCtrl()
*
* 功 能: 执行图形控制操作
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CCVenusApp::GraphCtrl()
{
CStdioFile file;
CString str;
sAnalyzeStr *pAnalyzeStr;
int intX = 0, iGraphLoc = 0, iLineLoc = 0;
BOOL bLineEnd = FALSE, bGraphEnd = FALSE, bAdd = TRUE;
if( file.Open(m_pGraphDlg->m_cGraphFileName, CFile::modeReadWrite | CFile::typeText) )
{
while(TRUE)
{
try
{
if(m_iGraphLoc == iGraphLoc + 1)
{
if(bLineEnd)
{// 写绘制参数
CString str1;
bLineEnd = FALSE;
DWORD pos = file.GetPosition();
file.Seek(pos, CFile::begin);
// 计算字符串长度
if(!iLineLoc)
{
bAdd = FALSE;
iLineLoc++;
}
str.Format(" %d", m_pGraphData[iGraphLoc].pLineParm[iLineLoc - 1].cColor);
for(int i = str.GetLength(); i < 15; i++)
{
str.Insert(str.GetLength(), ' ');
}
str1.Format("%d\n", m_pGraphData[iGraphLoc].pLineParm[iLineLoc - 1].iWidth);
str += str1;
file.Write(str, 17);
file.Seek(pos, CFile::begin);
}
}
intX++;
if( file.ReadString(str) )
{
pAnalyzeStr = AnalyzeGraphStr(str, intX, bLineEnd);
if(pAnalyzeStr == NULL) continue;
switch(pAnalyzeStr->iType)
{
case 0x04: // 线条数据结束
if(bAdd)
{
iLineLoc++;
}
else
{
bAdd = TRUE;
}
bLineEnd = TRUE;
bGraphEnd = FALSE;
break;
case 0x05: // 图形数据结束
if(m_iGraphLoc == iGraphLoc + 1)
{
file.Close();
m_pGraphDlg->DrawGraph(&m_pGraphData[m_iGraphLoc - 1], m_pGraphData[m_iGraphLoc - 1].iLineNum, m_iGraphLoc);
return;
}
iGraphLoc++;
iLineLoc = 0;
bGraphEnd = TRUE;
intX = 0;
break;
}
delete pAnalyzeStr;
}
else
{// 到文件尾
return;
}
}
catch (CFileException exception1)
{
Beep(650, 50);
AfxMessageBox("读文件出错!", MB_ICONINFORMATION);
return;
}
}
}
file.Close();
}
/*************************************************************************
*
* OnBitmap()
*
* 功 能: 保存为位图
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CCVenusApp::OnBitmap()
{
if(m_btProjectType == 0x00)
{
Beep(650, 50);
AfxMessageBox("请选择工程!", MB_ICONINFORMATION);
return;
}
if(m_pGraphData == NULL) return;
CString fileFilterStr, fileExtStr;
fileFilterStr = "Data files (*.BMP)|*.BMP|All files (*.*)|*.*||";
fileExtStr = "BMP";
CFileDialog fileDialog( FALSE, fileExtStr, NULL, 0, fileFilterStr );
fileDialog.m_ofn.lpstrTitle="保存为位图";
if( fileDialog.DoModal() == IDOK )
{
m_pGraphDlg->SaveAsBitmap(fileDialog.GetFileName());
}
}
/*************************************************************************
*
* OnDispGraph3()
*
* 功 能: 上一个图
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CCVenusApp::OnDispGraph3()
{
if(m_btProjectType == 0x00)
{
Beep(650, 50);
AfxMessageBox("请选择工程!", MB_ICONINFORMATION);
return;
}
if(m_pGraphData == NULL) return;
if(m_iGraphLoc != 0x01)
{
m_iGraphLoc--;
m_pGraphDlg->DrawGraph(&m_pGraphData[m_iGraphLoc - 1], m_pGraphData[m_iGraphLoc - 1].iLineNum, m_iGraphLoc);
CString str;
str.Format("共%d幅图形,第%d幅", m_iGraphNum, m_iGraphLoc);
m_pGraphDlg->SetWindowText(str);
}
else
{
AfxMessageBox("已到第一幅图!", MB_ICONINFORMATION);
}
}
/*************************************************************************
*
* OnDispGraph4()
*
* 功 能: 下一个图
*
* 参 数: 无
*
* 返回值: 无
*
*************************************************************************/
void CCVenusApp::OnDispGraph4()
{
if(m_btProjectType == 0x00)
{
Beep(650, 50);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -