📄 visdrawdoc.cpp
字号:
// VisDrawDoc.cpp : CVisDrawDoc 类的实现
//
#include "stdafx.h"
#include "VisDraw.h"
#include "VisDrawDoc.h"
#include "VisDrawView.h"
#include "RightView.h"
#include "figureobj.h"
#include "DistancePage.h"
#include "ShebeiDlg.h"
#include "yunxingDlg.h"
#include "gongshiDlg.h"
#include "PropertySheetWithLogoDlg.h"
#include ".\visdrawdoc.h"
#include "techcourse.h"
//#include "Dlgbar.h"
//#include "OLEContainItem.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CVisDrawDoc
IMPLEMENT_DYNCREATE(CVisDrawDoc, CDocument)
BEGIN_MESSAGE_MAP(CVisDrawDoc, CDocument)
ON_COMMAND(ID_FILE_SEND_MAIL, OnFileSendMail)
ON_UPDATE_COMMAND_UI(ID_FILE_SEND_MAIL, OnUpdateFileSendMail)
ON_COMMAND(ID_VIEW_JUDGEDISTANCE, OnViewJudgedistance)
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditCut)
ON_LBN_SELCHANGE(IDC_LIST2, &CVisDrawDoc::OnLbnSelchangeList2)
ON_COMMAND(ID_BACK_COLOR, &CVisDrawDoc::OnBackColor)
END_MESSAGE_MAP()
// CVisDrawDoc 构造/析构
CVisDrawDoc::CVisDrawDoc()
{
//EnableCompoundFile();
// TODO: 在此添加一次性构造代码
//设定文档大小
m_size.SetSize(1970,2880);
m_paperColor=RGB(255,255,255); //设定文档背景颜色
//设定映射模式
m_GridDistance = 100;
m_SelectDistance = 6;
m_nMapMode = MM_TEXT;
//m_nMapMode=MM_TEXT; //设定映射模式
// ComputePageSize(); //设定文档大小
m_string_techview= "";
m_string_rightview="kjkj";
m_strLanguage=_T("在X(数量)个工位上,Y(加工方法),Z(加工特征),保持Q(加工要求),P(加工尺寸和精度)");
}
CVisDrawDoc::~CVisDrawDoc()
{
POSITION pos=m_objects.GetHeadPosition();
while(pos !=NULL)
delete m_objects.GetNext(pos);
}
BOOL CVisDrawDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: 在此添加重新初始化代码
// (SDI 文档将重用该文档)
return TRUE;
}
// CVisDrawDoc 序列化
void CVisDrawDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring()) //保存数据
{
// TODO: 在此添加存储代码
ar<<m_paperColor; //保存文档成员变量
m_objects.Serialize(ar); //保存图元对象
//ar<<m_Dlgbar->m_EditStrGB;
ar<<m_strLanguage;
}
else //读数据
{
// TODO: 在此添加加载代码
ar>>m_paperColor; //读文档成员变量
m_objects.Serialize(ar); //读图元对象
// ar>>m_Dlgbar.m_EditStrGB;
ar>>m_strLanguage;
}
//m_VisDrawObList.Serialize(ar);
}
// CVisDrawDoc 诊断
#ifdef _DEBUG
void CVisDrawDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CVisDrawDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
// CVisDrawDoc 命令
void CVisDrawDoc::Draw(CDC* pDC, CVisDrawView* pView)
{
POSITION pos = m_objects.GetHeadPosition();
POSITION pos1= m_obj.GetHeadPosition();
while (pos != NULL)
{
CFigureObj* pObj = m_objects.GetNext(pos);
pObj->Draw(pView, pDC);
if (pView->IsSelected(pObj))
pObj->DrawTracker(pView, pDC, CFigureObj::selected);
}
while (pos1 != NULL)
{
CTextObj* pObj1 = m_obj.GetNext(pos);
pObj1->Draw(pView, pDC);
//if (pView->IsSelected(pObj))
//pObj->DrawTracker(pView, pDC, CFigureObj::selected);
}
/*DrawDibRealize(m_hDD,pDC->GetSafeHdc(),TRUE);
DrawDibDraw(m_hDD,pDC->GetSafeHdc(),0,0,m_pBMIH->biWidth,m_pBMIH->biHeight,
m_pBMIH,NULL,0,0,m_pBMIH->biWidth,m_pBMIH->biHeight,DDF_BACKGROUNDPAL);*/
}
void CVisDrawDoc::Add(CFigureObj* pObj)
{
m_objects.AddTail(pObj);
pObj->m_pDocument = this;
SetModifiedFlag();
}
void CVisDrawDoc::Addtext(CTextObj* pObj)
{
m_obj.AddTail(pObj);
pObj->m_pDocument=this;
SetModifiedFlag();
}
void CVisDrawDoc::Remove(CFigureObj* pObj)
{
// Find and remove from document
POSITION pos = m_objects.Find(pObj);
if (pos != NULL)
m_objects.RemoveAt(pos);
// set document modified flag
SetModifiedFlag();
// call remove for each view so that the view can remove from m_selection
// pos = GetFirstViewPosition();
// while (pos != NULL)
// ((CVisDrawView*)GetNextView(pos))->Remove(pObj);
}
void CVisDrawDoc::Removetext(CTextObj* ptObj)
{
// Find and remove from document
POSITION pos = m_obj.Find(ptObj);
if (pos != NULL)
m_obj.RemoveAt(pos);
// set document modified flag
SetModifiedFlag();
}
void CVisDrawDoc::ComputePageSize()
{
CSize new_size(850, 1100); // 8.5" x 11" default
CPrintDialog dlg(FALSE);
if (AfxGetApp()->GetPrinterDeviceDefaults(&dlg.m_pd))
{
// GetPrinterDC returns a HDC so attach it
CDC dc;
HDC hDC= dlg.CreatePrinterDC();
ASSERT(hDC != NULL);
dc.Attach(hDC);
// Get the size of the page in loenglish
new_size.cx = MulDiv(dc.GetDeviceCaps(HORZSIZE), 1000, 254);
new_size.cy = MulDiv(dc.GetDeviceCaps(VERTSIZE), 1000, 254);
}
// if size changed then iterate over views and reset
/* if (new_size != m_size)
{
m_size = new_size;
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
((CVisDrawView*)GetNextView(pos))->SetPageSize(m_size);
}*/
}
// point 为逻辑坐标
CFigureObj* CVisDrawDoc::ObjectAt(CVisDrawView* pView,const CPoint& point)
{
//拾取矩形
CRect rect(point, CSize(1, 1));
//遍历对象指针链表
POSITION pos = m_objects.GetTailPosition();
while (pos != NULL)
{
CFigureObj* pObj = m_objects.GetPrev(pos);
//如果鼠标落在图元对象边界矩形内
if (pObj->Intersects(pView, rect))
//判断图元是否被拾取
if(pObj->IsSelected(pView, point)) return pObj;
}
return NULL;
}
CTextObj* CVisDrawDoc::ObjAt(CVisDrawView* pView,const CPoint& point)
{
//拾取矩形
CRect rect(point, CSize(1, 1));
//遍历对象指针链表
POSITION pos = m_obj.GetTailPosition();
while (pos != NULL)
{
CTextObj* pObj = m_obj.GetPrev(pos);
//如果鼠标落在图元对象边界矩形内
if (pObj->Intersects(pView, rect))
//判断图元是否被拾取
if(pObj->IsSelected(pView, point)) return pObj;
}
return NULL;
}
void CVisDrawDoc::OnViewJudgedistance()
{
// TODO: 在此添加命令处理程序代码
CPropertySheetWithLogoDlg dlg("识别精度");
CDistancePage FirstPage;
dlg.SetLogoText("VisDraw");
dlg.AddPage(&FirstPage);
FirstPage.m_Distance = m_SelectDistance;
int nResponse = (int)dlg.DoModal();
if (nResponse == IDOK)
{
m_SelectDistance = FirstPage.m_Distance;
UpdateAllViews(NULL);
}
else if (nResponse == IDCANCEL)
{
return;
}
}
void CVisDrawDoc::OnUpdateEditPaste(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
//pCmdUI->Enable(::IsClipboardFormatAvailable());
}
void CVisDrawDoc::OnUpdateEditCut(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
//pCmdUI->Enable(!m_selection.IsEmpty());
}
//BOOL CVisDrawDoc::OnOpenDocument(LPCTSTR lpszPathName)
//{
// if (!CDocument::OnOpenDocument(lpszPathName))
// return FALSE;
//
// // TODO: 在此添加您专用的创建代码
// /*CFile f;
// CFileException e;
// TCHAR message[256];
// if(!f.Open(lpszPathName,CFile::modeRead,&e))
// {
// e.GetErrorMessage(message,256);
// AfxMessageBox(message);
// return FALSE;
// }
// SizeOfFile=(UINT)(f.GetLength());
// pFileData=new char[SizeOfFile];
// if(!pFileData)
// {
// f.Close();
// AfxMessageBox("无法分配足够内存");
// return FALSE;
// }
// f.Read(pFileData,SizeOfFile);
// f.Close();
//
// m_pBMFH=(BITMAPFILEHEADER*)pFileData;
// if((pFileData[0] !='V')||(pFileData[1] !='D'))
// {
// AfxMessageBox("无法识别格式");
// return FALSE;
// }
// m_pBMIH=(BITMAPINFOHEADER*)(pFileData+sizeof(BITMAPFILEHEADER));
// if(m_pBMIH->biSize !=sizeof(BITMAPINFOHEADER))
// {
// AfxMessageBox("无法识别格式");
// return FALSE;
//
// }
// m_hDD = DrawDibOpen();
// open_doc =TRUE;*/
//
//
// return TRUE;
//}
//void CVisDrawDoc::OnCloseDocument()
//{
// // TODO: 在此添加专用代码和/或调用基类
// /*if(m_hDD)
// {
//DrawDibClose(m_hDD);
//m_hDD=0;
// }
// if(pFileData)
// {
// delete[] pFileData;
// pFileData = NULL;
// }*/
//
// CDocument::OnCloseDocument();
//}
//CSize CVisDrawDoc::GetImageSize(void)
//{
// return CSize(m_pBMIH->biWidth,m_pBMIH->biHeight);
//}
bool CVisDrawDoc::GetStringFromRightView(CString m_string1)
{
if((m_string_stream=m_string1)!="")
return 1;
return 0;
}
bool CVisDrawDoc::SetStringToTechView(CString m_string2)
{
//CTechCourse* m_techCourse;
m_string_techview=m_string2;
//IAtlStringMgr* pMgr;
// CString str;
//LPTSTR p = str.GetBuffer( 10 );
//if(m_string_techview)
// str.CopyChars(str.GetBuffer(),m_string_techview,20);
m_string_rightview=m_string_techview;
//if(m_string_rightview != "")
// m_techCourse->GetRightViewString();
/* char* pszSrc= NULL;
pszSrc= new char(12);
if(pszSrc)
pszSrc= "Hello world!";
printf_s("%s\n", str);
str.CopyChars(str.GetBuffer(), pszSrc, 12);
printf_s("%s\n", str);*/
UpdateAllViews(NULL);
return 1;
}
void CVisDrawDoc::GetStringRightview(CString m_string3)
{
m_string3=m_string_rightview;
// CRightView* Rightview;
// //if(Rightview->m_gongxu !="")
// m_string_rightview=Rightview->m_gongxu;
// //UpdateAllViews(NULL);
//
}
void CVisDrawDoc::OnLbnSelchangeList2()
{
// TODO: 在此添加控件通知处理程序代码
}
void CVisDrawDoc::OnBackColor()
{
// TODO: 在此添加命令处理程序代码
//CVisDrawDoc* pDoc = GetDocument();
//CPaintDC dc;
CColorDialog clrDlg;
if(clrDlg.DoModal()==IDOK)
{
m_paperColor=clrDlg.GetColor();
// dc.d(m_cuurentColor);
//SetModifiedFlag();
SetModifiedFlag();
UpdateAllViews(NULL);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -