📄 cquakedemodoc.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 + -