📄 genericserializedemoview.cpp
字号:
// GenericSerializeDemoView.cpp : implementation of the CGenericSerializeDemoView class
//
#include "stdafx.h"
#include "GenericSerializeDemo.h"
#include "GenericSerializeDemoDoc.h"
#include "GenericSerializeDemoView.h"
#include "SerializeAccess.h"
#include "DlgInsert.h"
#include "WndGraph.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGenericSerializeDemoView
IMPLEMENT_DYNCREATE(CGenericSerializeDemoView, CFormView)
BEGIN_MESSAGE_MAP(CGenericSerializeDemoView, CFormView)
//{{AFX_MSG_MAP(CGenericSerializeDemoView)
ON_COMMAND(ID_EDIT_INSERTTREEITEM, OnEditInserttreeitem)
ON_COMMAND(ID_EDIT_DELETETREEITEM, OnEditDeletetreeitem)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
ON_MESSAGE(WM_MODIFIED,SetModified)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGenericSerializeDemoView construction/destruction
CGenericSerializeDemoView::CGenericSerializeDemoView()
: CFormView(CGenericSerializeDemoView::IDD),m_bInitDialog(false)
{
//{{AFX_DATA_INIT(CGenericSerializeDemoView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CGenericSerializeDemoView::~CGenericSerializeDemoView()
{
m_vecGraph.clear();
}
void CGenericSerializeDemoView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGenericSerializeDemoView)
DDX_Control(pDX, IDC_TREE, m_Tree);
//}}AFX_DATA_MAP
}
BOOL CGenericSerializeDemoView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CGenericSerializeDemoView::InitTreeCtrl()
{
m_Tree.DeleteAllItems();
HTREEITEM hItemRoot= m_Tree.InsertItem(_T("Root"));
HTREEITEM hItemChild= m_Tree.InsertItem(_T("Child 1"),hItemRoot);
m_Tree.InsertItem(_T("Child 2"),
m_Tree.GetParentItem(hItemChild),hItemChild);
m_Tree.InsertItem(_T("Child 12"),hItemChild);
m_Tree.InsertItem(_T("Child 3"),hItemRoot);
m_Tree.InsertItem(_T("Sibling 1"));
m_Tree.Expand(hItemRoot,TVE_EXPAND);
m_Tree.Expand(hItemChild,TVE_EXPAND);
}
void CGenericSerializeDemoView::CreateFromStatic()
{
CStatic wndStatic;
if(!wndStatic.SubclassDlgItem(IDC_STATIC_PLACEHOLDER,this)){
return;
}
CRect rc;
wndStatic.GetWindowRect(&rc);
ScreenToClient(&rc);
wndStatic.DestroyWindow();
CWndGraph* pWndGraph= new CWndGraph(m_vecGraph,
this,IDC_STATIC_PLACEHOLDER,rc);
m_bInitDialog= true;
}
int CGenericSerializeDemoView::SetRandomConnections(Graph* pGraph)
{
if( rand()%5 <3 ) return 0;
int nOfConnections= rand()%2;
for(int i=0;i<nOfConnections;i++){
pGraph->vecConnections.push_back(m_vecGraph[rand()%m_vecGraph.size()]);
}
return nOfConnections;
}
void CGenericSerializeDemoView::InitGraph()
{
if( !m_bInitDialog ){
CreateFromStatic();
}
static int a[]={
10,10,50,20,30,90,90,10,60,40,150,60,200,230,180,190,50,260
};
m_vecGraph.clear();
unsigned i;
for(i=0;i+1<sizeof(a)/sizeof(int);i+=2){
m_vecGraph.push_back(new Graph(a[i],a[i+1]));
}
for(i=0;i<5;i++){
int nOfConnections=0;
for(i=0;i<m_vecGraph.size();i++){
nOfConnections+=SetRandomConnections(m_vecGraph[i]);
}
if( nOfConnections==0 ){
srand( (unsigned)time( NULL )+i*10 );
}else{
break;
}
}
}
void CGenericSerializeDemoView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
if( GetDocument()->GetPathName().IsEmpty() ){
srand( (unsigned)time( NULL ) );
InitTreeCtrl();
InitGraph();
}
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
/////////////////////////////////////////////////////////////////////////////
// CGenericSerializeDemoView printing
BOOL CGenericSerializeDemoView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CGenericSerializeDemoView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CGenericSerializeDemoView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
void CGenericSerializeDemoView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
// TODO: add customized printing code here
}
/////////////////////////////////////////////////////////////////////////////
// CGenericSerializeDemoView diagnostics
#ifdef _DEBUG
void CGenericSerializeDemoView::AssertValid() const
{
CFormView::AssertValid();
}
void CGenericSerializeDemoView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CGenericSerializeDemoDoc* CGenericSerializeDemoView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGenericSerializeDemoDoc)));
return (CGenericSerializeDemoDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CGenericSerializeDemoView message handlers
void CGenericSerializeDemoView::ApplyItemStates(HTREEITEM hItem)
{
if(hItem){
DWORD state= m_Tree.GetItemData(hItem);
m_Tree.SetItemState(hItem,state,TVIF_STATE);
if( state&TVIS_EXPANDED ){
m_Tree.Expand(hItem,TVE_EXPAND);
}
ApplyItemStates(m_Tree.GetNextSiblingItem(hItem));
ApplyItemStates(m_Tree.GetChildItem(hItem));
}
}
void CGenericSerializeDemoView::GraphSerialize(CArchive& ar)
{
GraphAccess access(m_vecGraph,ar);
if(ar.IsStoring()){
GenericSerialize(access);
}else{
m_vecGraph.clear();
GenericDeserialize(access);
}
}
void CGenericSerializeDemoView::TreeSerialize(CArchive& ar)
{
TreeAccess access(m_Tree,ar);
if (ar.IsStoring())
{
GenericSerialize(access);
}
else
{
m_Tree.DeleteAllItems();
GenericDeserialize(access);
ApplyItemStates(m_Tree.GetRootItem());
}
}
void CGenericSerializeDemoView::Serialize(CArchive& ar)
{
TreeSerialize(ar);
GraphSerialize(ar);
}
void CGenericSerializeDemoView::OnEditInserttreeitem()
{
HTREEITEM hItem= m_Tree.GetSelectedItem();
if(hItem){
CDlgInsert dlg;
if( dlg.DoModal()==IDOK ){
if( dlg.m_nRadioNo==0 ){
m_Tree.InsertItem(dlg.m_strItemText,hItem);
}else{
m_Tree.InsertItem(dlg.m_strItemText,m_Tree.GetParentItem(hItem),hItem);
}
GetDocument()->SetModifiedFlag();
}
}
}
void CGenericSerializeDemoView::OnEditDeletetreeitem()
{
HTREEITEM hItem= m_Tree.GetSelectedItem();
if( hItem
&& AfxMessageBox(_T("Delete selected tree item"),MB_YESNO)==IDYES){
m_Tree.DeleteItem(hItem);
GetDocument()->SetModifiedFlag();
}
}
LPARAM CGenericSerializeDemoView::SetModified(WPARAM wParam,LPARAM lParam)
{
GetDocument()->SetModifiedFlag();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -