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

📄 cquakedemodoc.cpp

📁 本程序源码是为日本一家地震监测机构编写的
💻 CPP
字号:
// CQuakeDemoDoc.cpp : implementation of the CCQuakeDemoDoc class
//

#include "stdafx.h"
#include "CQuakeDemo.h"
#include "CQuakeDemoDoc.h"
#include "CQuakeDemoView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CCriticalSection g_StatusLock;

void StepInt(int nPos)
{
	::PostMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_STATUSMESSAGE,1,nPos);
}

/********************************************************************
Does  : 线程加载数据函数
~~~~~~
Time  : 2005:4:14   21:47
~~~~~~	
Mark  : 0 - 进度条初始化,设置范围
~~~~~~~ 1 - 进度条设置进度
		2 - 进度条复位
		3 - 设置进度条文字
*********************************************************************/
UINT MyLoadFunction(LPVOID pParam)
{
	HWND HFramWnd = AfxGetMainWnd()->GetSafeHwnd();

	CCQuakeDemoDoc* pDoc = (CCQuakeDemoDoc*)pParam;
	CQuakeFileManager* pFileManager = &(pDoc->m_QuakeFileList);
	CQuakeDrawManager* pDrawManager = &(pDoc->m_QuakeDrawList);
	//Set Data Status is not Ready
	pDoc->SetDataStatus(FALSE);
	//加载文件数据
	::PostMessage(HFramWnd,WM_STATUSMESSAGE,3,0);
	::PostMessage(HFramWnd,WM_STATUSMESSAGE,0,pFileManager->GetFileCount());
	pFileManager->Load(StepInt);
	//加载图像数据
	::PostMessage(HFramWnd,WM_STATUSMESSAGE,3,1);
	pDrawManager->Load(StepInt);
	::PostMessage(HFramWnd,WM_STATUSMESSAGE,2,0);
	//Set Data Status is Ready
	pDoc->SetDataStatus(TRUE);
	//加载完毕通知视图刷新
	pDoc->GetDefaultView()->PostMessage(WM_UPDATEVIEW,0,0);
	return 0;
}
/////////////////////////////////////////////////////////////////////////////
// CCQuakeDemoDoc

IMPLEMENT_DYNCREATE(CCQuakeDemoDoc, CDocument)

BEGIN_MESSAGE_MAP(CCQuakeDemoDoc, CDocument)
	//{{AFX_MSG_MAP(CCQuakeDemoDoc)
	ON_COMMAND(ID_MENUITEM_FILESETTING, OnMenuitemFilesetting)
	ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave)
	ON_COMMAND(ID_MENUITEM_WARNINGSETTINGS, OnMenuitemWarningsettings)
	ON_UPDATE_COMMAND_UI(ID_FILE_OPEN, OnUpdateFileOpen)
	ON_UPDATE_COMMAND_UI(ID_FILE_NEW, OnUpdateFileNew)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCQuakeDemoDoc construction/destruction

CCQuakeDemoDoc::CCQuakeDemoDoc()
{
	// TODO: add one-time construction code here
	m_bIsDataReady = TRUE;
}

CCQuakeDemoDoc::~CCQuakeDemoDoc()
{
	Clear();
}

BOOL CCQuakeDemoDoc::OnNewDocument()
{	
	if (!CDocument::OnNewDocument())
		return FALSE;
	//通知View结束震动绘图
	GetDefaultView()->SendMessage(WM_ENDQUAKE,0,0);
	//清空上次数据
	Clear();	
	return TRUE;
}

void CCQuakeDemoDoc::Clear()
{
	m_QFList.RemoveAll();
	m_QuakeFileList.Clear();
	m_QuakeDrawList.Clear();
}
/////////////////////////////////////////////////////////////////////////////
// CCQuakeDemoDoc serialization

void CCQuakeDemoDoc::Serialize(CArchive& ar)
{
	m_QFList.Serialize(ar);						//路径加载
	m_QuakeDrawList.m_WarnList.Serialize(ar);	//警告数据加载
	if (ar.IsStoring())
	{// TODO: add storing code here		
	}
	else
	{// TODO: add loading code here		
	}
}

/////////////////////////////////////////////////////////////////////////////
// CCQuakeDemoDoc diagnostics

#ifdef _DEBUG
void CCQuakeDemoDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CCQuakeDemoDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CCQuakeDemoDoc commands

void CCQuakeDemoDoc::DeleteContents() 
{
	CDocument::DeleteContents();
}

void CCQuakeDemoDoc::OnMenuitemFilesetting() 
{
	CDlgFileSet dlg;
	dlg.m_QFListSet = m_QFList;
	if(dlg.DoModal() == IDOK)
	{
		//判断数据是否改变m_QFList.Copy(dlg.m_QFListSet);
		if(m_QFList != dlg.m_QFListSet)
		{
			SetModifiedFlag();
			//保存更新数据
			m_QFList = dlg.m_QFListSet;
			//通知View关闭定时器
			GetDefaultView()->SendMessage(WM_ENDQUAKE,0,0);
			//更新数据文件
			Load();
			//同步警示链表信息
			CheckList(m_QFList, m_QuakeDrawList.m_WarnList);
			//调用视图更新
			GetDefaultView()->OnInitialUpdate();
		}
	}
}

BOOL CCQuakeDemoDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
	if (!CDocument::OnOpenDocument(lpszPathName))
		return FALSE;
	//通知视图
	GetDefaultView()->SendMessage(WM_ENDQUAKE,0,0);
	//更新数据文件	
	Load();	
	//同步警示链表信息
	CheckList(m_QFList, m_QuakeDrawList.m_WarnList,TRUE);
	return TRUE;
}

void CCQuakeDemoDoc::OnMenuitemWarningsettings() 
{
	CDlgWarnSet dlg;
	dlg.m_WarnList = m_QuakeDrawList.m_WarnList;
	if(dlg.DoModal() == IDOK)
	{
		//判断数据是否改变
		if(m_QuakeDrawList.m_WarnList != dlg.m_WarnList)
		{
			SetModifiedFlag();
			//保存更新数据
			m_QuakeDrawList.m_WarnList = dlg.m_WarnList;
			//更新图像文件
			GetDefaultView()->SendMessage(WM_UPDATEVIEW,0,0);
		}
	}
}

void CCQuakeDemoDoc::CheckList(CQFArray &QFList, CWarnArray &WarnList, BOOL bSError /*= FALSE*/)
{
	CString strTitle, strText;
	strTitle.LoadString(IDS_STRING_DOC_2);
	strText.LoadString(IDS_STRING_DOC_1);
	if(WarnList.GetSize() != QFList.GetSize())
	{
		if(bSError)
			MessageBox(AfxGetMainWnd()->m_hWnd,strText,strTitle,MB_OK);
		WarnList.SetSize(QFList.GetSize());
		if(WarnList.GetSize() < QFList.GetSize())
		{
			for(int i = WarnList.GetSize(); i < QFList.GetSize(); i++)
			{
				WarnList[i].fYellow = 0.0;
				WarnList[i].fRed    = 0.0;
			}
		}
	}	
}

BOOL CCQuakeDemoDoc::IsDataReady()
{
	g_StatusLock.Lock();
	m_bForReturn = m_bIsDataReady;
	g_StatusLock.Unlock();
	return m_bForReturn;
}

void CCQuakeDemoDoc::SetDataStatus(BOOL bStatus)
{
	g_StatusLock.Lock();
	m_bIsDataReady = bStatus;
	g_StatusLock.Unlock();
}

void CCQuakeDemoDoc::Load()
{
	m_QuakeFileList.GetPNArray(m_QFList);
	m_QuakeDrawList.GetPNArray(m_QFList);
	AfxBeginThread(MyLoadFunction,this);
}

CCQuakeDemoView* CCQuakeDemoDoc::GetDefaultView()
{
	POSITION Pos = GetFirstViewPosition();
	CCQuakeDemoView* pView = (CCQuakeDemoView*)GetNextView(Pos);
	ASSERT(pView->IsKindOf(RUNTIME_CLASS(CCQuakeDemoView)));
	return pView;
}

void CCQuakeDemoDoc::OnUpdateFileSave(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(IsModified());
}

void CCQuakeDemoDoc::OnUpdateFileOpen(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(IsDataReady());
}

void CCQuakeDemoDoc::OnUpdateFileNew(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(IsDataReady());
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -