![]() ![]() |
||
Steps: Initial the canvas and create record nodes: void CRecordSampleView::OnInitialUpdate() { SetCurrentModel(GetDocument()->m_pDataModel); CFODrawView::OnInitialUpdate(); CPoint ptStart = CPoint(100,100); CSize sz = CSize(160,150); CFOListCtrlShape *pNode1 = NULL; CFOListCtrlShape *pNode2 = NULL; CFOListCtrlShape *pNode3 = NULL; CFOListCtrlShape *pNode4 = NULL; CFOListCtrlShape *pNode5 = NULL; CFOListCtrlShape *pNode6 = NULL; //#1 CRect rcPos = CRect(ptStart,sz); CFOListCtrlShape *pNode = new CFOListCtrlShape; pNode->AddRef(); pNode->Create(rcPos,_T("Customers")); GetCurrentModel()->GetShapes()->AddTail(pNode); int nIdx = 1000; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("CustomerID")); // 1000 nIdx ++; pNode->AddNewItem(nIdx,FALSE,FALSE,_T("Company")); nIdx ++; pNode->AddNewItem(nIdx,FALSE,FALSE,_T("Address")); nIdx ++; pNode->AddNewItem(nIdx,FALSE,FALSE,_T("Phone")); nIdx ++; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("ShipToID")); // 1004 pNode->UpdateComp(); pNode->Release(); pNode1 = pNode; //#2 sz = CSize(160,130); rcPos = CRect(ptStart,sz); rcPos.OffsetRect(CPoint(sz.cx + 40,sz.cy)); pNode = new CFOListCtrlShape; pNode->AddRef(); pNode->Create(rcPos,_T("Sales")); GetCurrentModel()->GetShapes()->AddTail(pNode); nIdx = 1000; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("SalesID")); // 1000 nIdx ++; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("OrderID")); // 1001 nIdx ++; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("CustomerID")); // 1002 pNode->UpdateComp(); pNode->Release(); pNode2 = pNode; //#3 sz = CSize(160,130); rcPos = CRect(ptStart,sz); rcPos.OffsetRect(CPoint(sz.cx *2 + 80,0)); pNode = new CFOListCtrlShape; pNode->AddRef(); pNode->Create(rcPos,_T("Orders")); GetCurrentModel()->GetShapes()->AddTail(pNode); nIdx = 1000; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("OrderID")); // 1000 nIdx ++; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("CustomerID")); // 1001 nIdx ++; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("DetailID")); // 1002 nIdx ++; pNode->AddNewItem(nIdx,FALSE,FALSE,_T("ShipDate")); pNode->UpdateComp(); pNode->Release(); pNode3 = pNode; //#4 sz = CSize(160,130); rcPos = CRect(ptStart,sz); rcPos.OffsetRect(CPoint(sz.cx *3 + 160,sz.cy)); pNode = new CFOListCtrlShape; pNode->AddRef(); pNode->Create(rcPos,_T("Items")); GetCurrentModel()->GetShapes()->AddTail(pNode); nIdx = 1000; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("ItemID")); // 1000 nIdx ++; pNode->AddNewItem(nIdx,FALSE,FALSE,_T("ProductName")); nIdx ++; pNode->AddNewItem(nIdx,FALSE,FALSE,_T("ProductPrice")); pNode->UpdateComp(); pNode->Release(); pNode4 = pNode; //#5 sz = CSize(160,130); rcPos = CRect(ptStart,sz); rcPos.OffsetRect(CPoint(0,sz.cy * 2 + 40)); pNode = new CFOListCtrlShape; pNode->AddRef(); pNode->Create(rcPos,_T("ShipTo")); GetCurrentModel()->GetShapes()->AddTail(pNode); nIdx = 1000; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("ShipToID")); // 1000 nIdx ++; pNode->AddNewItem(nIdx,FALSE,FALSE,_T("Address")); nIdx ++; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("ShipInstID")); // 1002 pNode->UpdateComp(); pNode->Release(); pNode5 = pNode; //#6 sz = CSize(160,150); rcPos = CRect(ptStart,sz); rcPos.OffsetRect(CPoint(sz.cx + 50,sz.cy * 2 + 40)); pNode = new CFOListCtrlShape; pNode->AddRef(); pNode->Create(rcPos,_T("Details")); GetCurrentModel()->GetShapes()->AddTail(pNode); nIdx = 1000; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("DetailID")); // 1000 nIdx ++; pNode->AddNewItem(nIdx,FALSE,FALSE,_T("Fields1")); nIdx ++; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("ItemID")); // 1002 nIdx ++; pNode->AddNewItem(nIdx,FALSE,FALSE,_T("Fields3")); nIdx ++; pNode->AddNewItem(nIdx,TRUE,TRUE,_T("OrderID")); // 1004 pNode->UpdateComp(); pNode->Release(); pNode6 = pNode; CFOListPortShape *pFrom = NULL; CFOListPortShape *pTo = NULL; pFrom = pNode1->FindPortFromIndex(1000,TRUE); pTo = pNode2->FindPortFromIndex(1002,TRUE); AddLinkShape(pFrom,pTo); pFrom = pNode1->FindPortFromIndex(1000,FALSE); pTo = pNode3->FindPortFromIndex(1001,TRUE); AddLinkShape(pFrom,pTo); pFrom = pNode2->FindPortFromIndex(1001,FALSE); pTo = pNode3->FindPortFromIndex(1000,TRUE); AddLinkShape(pFrom,pTo); pFrom = pNode1->FindPortFromIndex(1004,FALSE); pTo = pNode5->FindPortFromIndex(1000,TRUE); AddLinkShape(pFrom,pTo); pFrom = pNode3->FindPortFromIndex(1000,FALSE); pTo = pNode6->FindPortFromIndex(1004,TRUE); AddLinkShape(pFrom,pTo); pFrom = pNode4->FindPortFromIndex(1000,TRUE); pTo = pNode6->FindPortFromIndex(1002,FALSE); AddLinkShape(pFrom,pTo); pNode1->SetBkColor(RGB(255,206,160)); } CFOLinkShape *CRecordSampleView::AddLinkShape(CFOListPortShape *pStart,CFOListPortShape *pEnd) { CFOPExtCornerLinkShape* pLinkComp = new CFOPExtCornerLinkShape; pLinkComp->AddRef(); CPoint ptPoints[2]; ptPoints[0] = pStart->GetLinkPoint(); ptPoints[1] = pEnd->GetLinkPoint(); pLinkComp->Create(ptPoints,2); pLinkComp->SetFromPort(pStart); pLinkComp->SetToPort(pEnd); pLinkComp->SetLineWidth(4); pLinkComp->SetShadow(FALSE); pStart->AddLinkShape(pLinkComp); pEnd->AddLinkShape(pLinkComp); // Set arrow type. int nType = 3; pLinkComp->SetEndArrowType(nType); GetCurrentModel()->GetShapes()->AddTail(pLinkComp); pLinkComp->UpdateComp(); pLinkComp->RelayoutPoints(); pLinkComp->Release(); return pLinkComp; } |
Copyright ?1998-2007 UCanCode.Net Software, all rights reserved.
Other product and company names herein may be the trademarks of their respective owners.
Please direct your questions or comments to webmaster@ucancode.com