📄 ena---mfcdoc.cpp
字号:
// ENA---MFCDoc.cpp : implementation of the CENAMFCDoc class
//
#include "stdafx.h"
#include "ENA---MFC.h"
#include "ENA---MFCDoc.h"
#include "ENA---MFCView.h"
#include"WSTSPENA.h"
#include <process.h>
#include ".\ena---mfcdoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
bool g_bSimula = false;
// CENAMFCDoc
void WorkingThread(void *p_pView);
void WorkingThread2(void *_NULL);
CString g_FileName = "";
bool isThreadOn = true;
bool isOpenOn = false;
bool g_OpenOnce = false;
bool g_RunOn = false;
bool g_Pause = false;
bool g_Stop = true;
IMPLEMENT_DYNCREATE(CENAMFCDoc, CDocument)
BEGIN_MESSAGE_MAP(CENAMFCDoc, CDocument)
ON_COMMAND(IDM_SIMULA, OnSimula)
ON_UPDATE_COMMAND_UI(IDM_SIMULA, OnUpDataSimula)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_UPDATE_COMMAND_UI(ID_FILE_OPEN, OnUpdateFileOpen)
ON_COMMAND(ID_PAUSE, OnPause)
ON_UPDATE_COMMAND_UI(ID_PAUSE, OnUpdatePause)
ON_COMMAND(ID_STOP, OnStop)
ON_UPDATE_COMMAND_UI(ID_STOP, OnUpdateStop)
END_MESSAGE_MAP()
// CENAMFCDoc construction/destruction
CENAMFCDoc::CENAMFCDoc()
{
// TODO: add one-time construction code here
}
CENAMFCDoc::~CENAMFCDoc()
{
}
BOOL CENAMFCDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
// CENAMFCDoc serialization
void CENAMFCDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
// CENAMFCDoc diagnostics
#ifdef _DEBUG
void CENAMFCDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CENAMFCDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
// CENAMFCDoc commands
void CENAMFCDoc::OnUpDataSimula(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!g_RunOn);
}
void CENAMFCDoc::OnSimula()
{
g_RunOn = true;
isOpenOn = true;
isThreadOn = true;
g_Pause = false;
g_Stop = false;
//WSTSPENA l_TSP;
//l_TSP.Initial("51.txt");
//int i;
//int l_max = 0;
//for(i = 0; i < l_TSP.m_CityNum; ++i)
//{
// if(l_max < l_TSP.m_pCity[i].x) l_max = l_TSP.m_pCity[i].x;
// if(l_max < l_TSP.m_pCity[i].y) l_max = l_TSP.m_pCity[i].y;
//}
//((CENAMFCView*)(m_viewList.GetHead()))->m_pTvRate = (1.0*500)/l_max;
//((CENAMFCView*)(m_viewList.GetHead()))->m_pTSP = &l_TSP;
//((CENAMFCView*)(m_viewList.GetHead()))->StartDraw();
//do{
// l_TSP.AdjustTempPoint();
// l_TSP.AdjustParament();
// //((CENAMFCView*)(m_viewList.GetHead()))->StartDraw();
// this->UpdateAllViews(((CENAMFCView*)(m_viewList.GetHead())));
// ((CENAMFCView*)(m_viewList.GetHead()))->m_pTSP = &l_TSP;
// //int a = m_viewList.GetSize();
// ((CENAMFCView*)(m_viewList.GetHead()))->StartDraw();
// this->UpdateAllViews(((CENAMFCView*)(m_viewList.GetHead())));
// //l_TSP.FitCity();
// //AfxMessageBox(_T("Next!"));
// //Sleep(1000);
//}while(!l_TSP.FitCity());
//((CENAMFCView*)(m_viewList.GetHead()))->m_pTSP = &l_TSP;
//((CENAMFCView*)(m_viewList.GetHead()))->StartDraw();
//CString str;
//str.Format(_T("所有的路径总长为:%f"), l_TSP.ComputeCityRouteDist());
//((CENAMFCView*)(m_viewList.GetHead()))->TextDraw(200, 0, str);
CENAMFCView *l_pCurView = (CENAMFCView *)(m_viewList.GetHead());
_beginthread(WorkingThread, NULL, (void *)l_pCurView);
//WSTSPENA l_TSP;
//l_TSP.Initial("51.txt");
//int i;
//int l_max = 0;
//for(i = 0; i < l_TSP.m_CityNum; ++i)
//{
// if(l_max < l_TSP.m_pCity[i].x) l_max = l_TSP.m_pCity[i].x;
// if(l_max < l_TSP.m_pCity[i].y) l_max = l_TSP.m_pCity[i].y;
//}
//l_pCurView->m_pTvRate = (1.0*500)/l_max;
//l_pCurView->m_pTSP = &l_TSP;
//l_pCurView->StartDraw();
//do{
// l_TSP.AdjustTempPoint();
// l_TSP.AdjustParament();
// //((CENAMFCView*)(m_viewList.GetHead()))->StartDraw();
// this->UpdateAllViews(((CENAMFCView*)(m_viewList.GetHead())));
// l_pCurView->m_pTSP = &l_TSP;
// //int a = m_viewList.GetSize();
// l_pCurView->StartDraw();
// this->UpdateAllViews(((CENAMFCView*)(m_viewList.GetHead())));
// //l_TSP.FitCity();
// //AfxMessageBox(_T("Next!"));
// //Sleep(1000);
//}while(!l_TSP.FitCity());
//l_pCurView->m_pTSP = &l_TSP;
//l_pCurView->StartDraw();
//CString str;
//str.Format(_T("所有的路径总长为:%f"), l_TSP.ComputeCityRouteDist());
//l_pCurView->TextDraw(200, 0, str);
//char *str = new char[100];
//sprintf(str, "说的路径总长为:%f", l_TSP.ComputeCityRouteDist());
//AfxMessageBox(_T((LPCTSTR)str));
}
char *MakePathStr(char *str)
{
int i = 0;
char *newStr = new char[255];
while(*str)
{
if(*str == '\\')
{
newStr[i++] = '\\';
}
newStr[i++] = *str++;
}
newStr[i] = 0;
return newStr;
}
void WorkingThread(void *p_pView)
{
CENAMFCView *l_pCurView =(CENAMFCView*)p_pView;
g_bSimula = !g_bSimula;
//if(g_FileName.Compare("") == 0){return ;}
WSTSPENA l_TSP;
char fileName[255] = {0};
PCHAR fileName2;
//fileName = (LPTSTR)(LPCTSTR)g_FileName;
sprintf(fileName, "%s", g_FileName);
fileName2 = MakePathStr(fileName);
//AfxMessageBox(fileName);
if(!l_TSP.Initial(fileName2))
{
AfxMessageBox(_T("文件打开失败"));
g_RunOn = false;
isOpenOn = false;
_endthread();
return ;
}
//l_TSP.Initial(_T("F:\\研究生\\代码测试\\48.txt"));
int i;
int l_max = 0;
for(i = 0; i < l_TSP.m_CityNum; ++i)
{
if(l_max < l_TSP.m_pCity[i].x) l_max = l_TSP.m_pCity[i].x;
if(l_max < l_TSP.m_pCity[i].y) l_max = l_TSP.m_pCity[i].y;
}
l_pCurView->m_pTvRate = (1.0*500)/l_max;
l_pCurView->m_pTSP = &l_TSP;
l_pCurView->StartDraw();
do{
//if(!isThreadOn)
//{
// g_RunOn = false;
// isOpenOn = false;
// return ;
//}
while(g_Pause)
{
Sleep(50);
}
if(g_Stop)
{
g_RunOn = false;
isOpenOn = false;
_endthread();
return ;
}
l_TSP.AdjustTempPoint();
l_TSP.AdjustParament();
//((CENAMFCView*)(m_viewList.GetHead()))->StartDraw();
l_pCurView->m_pTSP = &l_TSP;
//int a = m_viewList.GetSize();
l_pCurView->StartDraw();
//l_TSP.FitCity();
//AfxMessageBox(_T("Next!"));
//Sleep(1000);
}while(!l_TSP.FitCity());
l_pCurView->m_pTSP = &l_TSP;
l_pCurView->StartDraw();
CString str;
str.Format(_T("所有的路径总长为:%f"), l_TSP.ComputeCityRouteDist());
l_pCurView->TextDraw(200, 0, str);
l_TSP.ShowResultRoute();
g_RunOn = false;
isOpenOn = false;
_endthread();
return ;
}
void CENAMFCDoc::OnFileOpen()
{
if(isOpenOn) return ;
isOpenOn = true;
_beginthread(WorkingThread2, NULL, NULL);
}
void WorkingThread2(void *_NULL)
{
// TODO: 在此添加命令处理程序代码
CFileDialog l_FileDlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, "CityFiles|*.txt||*.*||");
if(l_FileDlg.DoModal() == IDOK)
{
isThreadOn = false;
g_FileName = l_FileDlg.GetPathName();
}
else
{
g_FileName = "";
}
isOpenOn = false;
}
void CENAMFCDoc::OnUpdateFileOpen(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->Enable(!g_OpenOnce);
}
void CENAMFCDoc::OnPause()
{
// TODO: 在此添加命令处理程序代码
g_Pause = !g_Pause;
}
void CENAMFCDoc::OnUpdatePause(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->Enable(g_RunOn);
if(g_Pause) pCmdUI->SetText("继续执行");
else pCmdUI->SetText("算法暂停");
}
void CENAMFCDoc::OnStop()
{
// TODO: 在此添加命令处理程序代码
g_Stop = true;
}
void CENAMFCDoc::OnUpdateStop(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
if(g_Stop)
{
g_RunOn = false;
g_bSimula = false;
}
pCmdUI->Enable(!g_Pause && g_RunOn);
if(g_RunOn) g_OpenOnce = true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -