📄 visdrawview.cpp
字号:
// VisDrawView.cpp : CVisDrawView 类的实现
#include "stdafx.h"
#include "comdef.h"
#include "CApplication.h"
#include "CRange.h"
#include "CWorkbook.h"
#include "CWorksheet.h"
#include "CWorkbooks.h"
#include "CWorksheets.h"
#include "CFont0.h"
#include "VisDraw.h"
#include <afxpriv.h>
#include <afxole.h>
#include "visdrawdoc.h"
#include "VisDrawView.h"
#include ".\visdrawview.h"
#include "drawtool.h"
#include "textwritedlg.h"
#include "ShebeiDlg.h"
#include "GongshiDlg.h"
#include "YunxingDlg.h"
#include "SBGLSheet.h"
#include "RightView.h"
//#include "FrmShow.h"
//#include "textobj.h"
#include "GongshiDlg.h"
#include "ProcessShowDlg.h"
#include "MainFrm.h"
//#include "TextWriteDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
//#define ZOOM_ONE 1000
#endif
//using namespace VisDraw;
extern CDialogBar m_wndDlgBar;
extern CDialogBar m_wndDlgBarLanguage;
extern CDialogBar m_wndSBDlgBar;
// 私有剪切板格式 (图形对象链表)
CLIPFORMAT CVisDrawView::m_cfDraw = (CLIPFORMAT)
#ifdef _MAC
::RegisterClipboardFormat(_T("VISDRAW"));
#else
::RegisterClipboardFormat(_T("MFC Draw Sample"));
#endif
//CLIPFORMAT CVisDrawView::m_cfObjectDescriptor = NULL;
const int MapMode = MM_TEXT;
// CVisDrawView
IMPLEMENT_DYNCREATE(CVisDrawView, CVisDrawScrollView)
BEGIN_MESSAGE_MAP(CVisDrawView, CVisDrawScrollView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, CVisDrawScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CVisDrawScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CVisDrawScrollView::OnFilePrintPreview)
ON_COMMAND(ID_DRAW_LINE, OnDrawLine)
ON_COMMAND(ID_DRAW_RECTANGLE, OnDrawRectangle)
// ON_COMMAND(ID_DRAW_ELLIPSE, OnDrawEllipse)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_COMMAND(ID_DRAW_CIRCLE, OnDrawCircle)
ON_COMMAND(ID_DRAW_HORIZEN, OnDrawHorizen)
ON_COMMAND(ID_DRAW_POINT, OnDrawPoint)
ON_COMMAND(ID_DRAW_POLYGON, OnDrawPolygon)
ON_COMMAND(ID_DRAW_POLYLINE, OnDrawPolyline)
ON_COMMAND(ID_DRAW_SEC, OnDrawSec)
ON_COMMAND(ID_DRAW_SELECTION, OnDrawSelection)
ON_COMMAND(ID_DRAW_TRIPOINT, OnDrawTripoint)
ON_COMMAND(ID_DRAW_VERTICAL, OnDrawVertical)
ON_UPDATE_COMMAND_UI(ID_DRAW_TRIPOINT, OnUpdateDrawTripoint)
ON_COMMAND(ID_ZOOM_IN, OnZoomIn)
ON_COMMAND(ID_ZOOM_OUT, OnZoomOut)
ON_COMMAND(ID_ZOOM_FIT, OnZoomFit)
ON_COMMAND(ID_ZOOM_WINDOW, OnZoomWindow)
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDBLCLK()
ON_COMMAND(ID_DRAW_CSE, OnDrawCse)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateEditCopy)
ON_COMMAND(ID_EDIT_CUT, OnEditCut)
ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditCut)
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
ON_COMMAND(ID_EDIT_DELETE, OnEditDelete)
ON_UPDATE_COMMAND_UI(ID_EDIT_DELETE, OnUpdateEditDelete)
ON_COMMAND(ID_EDIT_SELECTALL, OnEditSelectall)
ON_UPDATE_COMMAND_UI(ID_EDIT_SELECTALL, OnUpdateEditSelectall)
ON_UPDATE_COMMAND_UI(ID_DRAW_LINE, OnUpdateDrawLine)
ON_UPDATE_COMMAND_UI(ID_DRAW_POINT, OnUpdateDrawPoint)
ON_UPDATE_COMMAND_UI(ID_DRAW_SEC, OnUpdateDrawSec)
ON_UPDATE_COMMAND_UI(ID_DRAW_CSE, OnUpdateDrawCse)
ON_UPDATE_COMMAND_UI(ID_DRAW_POLYLINE, OnUpdateDrawPolyline)
ON_UPDATE_COMMAND_UI(ID_DRAW_RECTANGLE, OnUpdateDrawRectangle)
ON_UPDATE_COMMAND_UI(ID_DRAW_CIRCLE, OnUpdateDrawCircle)
ON_UPDATE_COMMAND_UI(ID_DRAW_POLYGON, OnUpdateDrawPolygon)
ON_UPDATE_COMMAND_UI(ID_DRAW_HORIZEN, OnUpdateDrawHorizen)
ON_UPDATE_COMMAND_UI(ID_DRAW_VERTICAL, OnUpdateDrawVertical)
ON_UPDATE_COMMAND_UI(ID_DRAW_SELECTION, OnUpdateDrawSelection)
ON_WM_CONTEXTMENU()
//ON_COMMAND(ID_CHE, OnChe)
//ON_UPDATE_COMMAND_UI(ID_CHE, OnUpdateChe)
//ON_COMMAND(ID_CHE, OnChe)
//ON_COMMAND(ID_OPEN_BMP, OnOpenBmp)
ON_COMMAND(ID_BAO, OnBao)
//ON_COMMAND(ID_CHE, OnChe)
ON_COMMAND(ID_CHONG, OnChong)
ON_COMMAND(ID_JU, OnJu)
ON_COMMAND(ID_MO, OnMo)
ON_COMMAND(ID_TANG, OnTang)
ON_COMMAND(ID_ZUAN, OnZuan)
ON_COMMAND(ID_ZHONGXIN, OnZhongxin)
ON_COMMAND(ID_ZHEWAN, OnZhewan)
ON_COMMAND(ID_XI, OnXi)
//ON_COMMAND(ID_XUANZE, OnXuanze)
ON_COMMAND(ID_DRAW_CHE, OnDrawChe)
//ON_UPDATE_COMMAND_UI(ID_CHE, OnUpdateChe)
ON_COMMAND(ID_DRAW_TEXT, OnDrawText)
ON_UPDATE_COMMAND_UI(ID_DRAW_TEXT, OnUpdateDrawText)
//ON_WM_CHAR()
//ON_WM_TIMER()
//ON_WM_CREATE()
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_TOOLVIEWER, OnToolviewer)
ON_UPDATE_COMMAND_UI(ID_DRAW_CHE, OnUpdateDrawChe)
ON_UPDATE_COMMAND_UI(ID_BAO, OnUpdateBao)
ON_UPDATE_COMMAND_UI(ID_XI, OnUpdateXi)
ON_UPDATE_COMMAND_UI(ID_MO, OnUpdateMo)
ON_UPDATE_COMMAND_UI(ID_CHONG, OnUpdateChong)
ON_UPDATE_COMMAND_UI(ID_TANG, OnUpdateTang)
ON_UPDATE_COMMAND_UI(ID_ZHEWAN, OnUpdateZhewan)
ON_UPDATE_COMMAND_UI(ID_ZHONGXIN, OnUpdateZhongxin)
ON_UPDATE_COMMAND_UI(ID_ZUAN, OnUpdateZuan)
ON_UPDATE_COMMAND_UI(ID_JU, OnUpdateJu)
ON_COMMAND(ID_EDIT_PROPERTIES, OnEditProperties)
ON_UPDATE_COMMAND_UI(ID_EDIT_PROPERTIES, OnUpdateEditProperties)
//ON_STN_ENABLE(IDC_PICTUREBOX, OnStnEnablePicturebox)
//ON_COMMAND(ID_GONGYIGUOCHENGKA, &CVisDrawView::OnGongyiguochengka)
//ON_COMMAND(ID_GOYIGUIHUA, &CVisDrawView::OnGoyiguihua)
//ON_COMMAND(ID_ZHISHIKU, &CVisDrawView::OnZhishiku)
//ON_BN_CLICKED(IDC_BUTTON_GBSC, &CVisDrawView::OnBnClickedButtonGbsc)
ON_BN_CLICKED(IDC_BUTTON_GBSC1, &CVisDrawView::OnBnClickedButtonGbsc1)
ON_BN_CLICKED(IDC_BUTTON1, &CVisDrawView::OnBnClickedButton1)
ON_COMMAND(ID_GRID_EDIT, &CVisDrawView::OnGridEdit)
//ON_COMMAND(ID_BACK_COLOR, &CVisDrawView::OnBackColor)
ON_WM_RBUTTONUP()
ON_BN_CLICKED(IDC_BUTTON_LANGUAGE, &CVisDrawView::OnBnClickedButtonLanguage)
ON_BN_CLICKED(IDC_BUTTON_GXSC, &CVisDrawView::OnBnClickedButtonGxsc)
ON_BN_CLICKED(IDC_BUTTON_GSJS, &CVisDrawView::OnBnClickedButtonGsjs)
//ON_BN_CLICKED(IDC_PROCESS_SHOW, &CVisDrawView::OnBnClickedProcessShow)
ON_BN_CLICKED(IDC_BUTTON_ADDGONGXU, &CVisDrawView::OnBnClickedButtonAddgongxu)
//ON_BN_CLICKED(IDC_PROCESS_SHOW, &CVisDrawView::OnBnClickedProcessShow)
//ON_BN_CLICKED(IDC_GX_SHOW, &CVisDrawView::OnBnClickedGxShow)
ON_BN_CLICKED(IDC_BUTTON_GBWC, &CVisDrawView::OnBnClickedButtonGbwc)
//ON_BN_CLICKED(IDC_BUTTON_SBNL, &CVisDrawView::OnBnClickedButtonSbnl)
//ON_BN_CLICKED(IDC_BUTTON_SBNLPZ, &CVisDrawView::OnBnClickedButtonSbnlpz)
ON_COMMAND(ID_GONGXUKA, &CVisDrawView::OnGongxuka)
ON_COMMAND(ID_EDIT_UNDO, &CVisDrawView::OnEditUndo)
ON_COMMAND(ID_EDIT_REDO, &CVisDrawView::OnEditRedo)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, &CVisDrawView::OnUpdateEditUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_REDO, &CVisDrawView::OnUpdateEditRedo)
//ON_COMMAND(ID_BACK_COLOR, &CVisDrawView::OnBackColor)
END_MESSAGE_MAP()
// CVisDrawView 构造/析构
//#include <stdlib.h>
//#include <time.h>
CVisDrawView::CVisDrawView()
: m_picID(0)
//, m_picPath(_T(""))
, m_picIDbao(0)
,m_picIDxi(0)
, m_picIDmo(0)
,m_picIDtang(0),m_picIDzuan(0),m_picIDchong(0),m_picIDju(0),m_picIDjia(0),m_picIDzhe(0)
{
// TODO: 在此处添加构造代码
//m_pSelection = NULL;
//鼠标句柄
m_HCursor = AfxGetApp()->LoadStandardCursor(IDC_CROSS);
m_Scale = m_Zoom = ZOOM_ONE;
m_ZoomMin = 1;
m_ZoomMax = LONG_MAX / 2960;
m_bGrid = TRUE;
m_deletepic=0;
m_RedoUndo=FALSE;
m_bEnable=FALSE;
m_gridColor = RGB(128, 128, 128);
m_GridDistance = 100;
m_bActive = FALSE;
m_strDrawing = "Untitled drawing";
m_bdoing=FALSE;
m_pmdc=new CDC;
// pTextDlg=NULL;
//m_FontHeight=20,m_FontWide=10,m_FontBetween=1,m_TextAngle=0,m_FontAngle=0;
//m_TextString.Empty();
//m_Text1=new CText();
m_pID=m_picIDmo;
// m_type=0;
m_mouseStep=0;
// m_cuurentColor=RGB(0,0,0);
//m_select.AddTail()
pTextObj=new CTextObj;
m_select.AddTail(pTextObj);
}
CVisDrawView::~CVisDrawView()
{
// delete m_Text1;
}
BOOL CVisDrawView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
// 样
// cs.style=WS_MAXMIZE;
cs.style = WS_CHILD | WS_VISIBLE | FWS_ADDTOTITLE | WS_OVERLAPPEDWINDOW | WS_MAXIMIZE;
// return CMDIChildWnd::PreCreateWindow(cs);
return CVisDrawScrollView::PreCreateWindow(cs);
}
// CVisDrawView 绘制
void CVisDrawView::OnDraw(CDC* pDC)
{
CVisDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC dc;
CDC* pDrawDC = pDC;
CBitmap bitmap;
CBitmap* pOldBitmap;
// only paint the rect that needs repainting
CRect client;
pDC->GetClipBox(client);
CRect rect = client;
DocToClient(rect);
if (!pDC->IsPrinting())
{
// draw to offscreen bitmap for fast looking repaints
if (dc.CreateCompatibleDC(pDC))
{
if (bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height()))
{
OnPrepareDC(&dc, NULL);
pDrawDC = &dc;
// offset origin more because bitmap is just piece of the whole drawing
dc.OffsetViewportOrg(-rect.left, -rect.top);
pOldBitmap = dc.SelectObject(&bitmap);
dc.SetBrushOrg(rect.left % 8, rect.top % 8);
// might as well clip to the same rectangle
dc.IntersectClipRect(client);
}
}
}
//if (m_pSelection != NULL)
//{
// CSize size;
// CRect rect(10, 10, 210, 210);
//
// if (SUCCEEDED(m_pSelection->GetExtent(&size, m_pSelection->m_nDrawAspect)))
// {
// pDC->HIMETRICtoLP(&size);
// rect.right = size.cx + 10;
// rect.bottom = size.cy + 10;
// }
// m_pSelection->Draw(pDC, rect);
//}
// paint background
CBrush brush;
if (!brush.CreateSolidBrush(pDoc->GetPaperColor()))
return;
brush.UnrealizeObject();
pDrawDC->FillRect(client, &brush);
/*if (!pDC->IsPrinting() && m_bGrid)
*/
if(m_bGrid)
DrawGrid(pDrawDC);
pDoc->Draw(pDrawDC, this);
//this->Invalidate();
//pDoc->Draw(m_pmdc,this);
// CBitmap* poldbmp=m_pmdc->SelectObject(m_pbmp);
// m_pmdc->SelectObject(poldbmp);
if (pDrawDC != pDC)
{
pDC->SetViewportOrg(0, 0);
pDC->SetWindowOrg(0,0);
pDC->SetMapMode(MM_TEXT);
dc.SetViewportOrg(0, 0);
dc.SetWindowOrg(0,0);
dc.SetMapMode(MM_TEXT);
pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
&dc, 0, 0, SRCCOPY);
dc.SelectObject(pOldBitmap);
}
//Invalidate();
// pDoc->SetModifiedFlag();
}
// CVisDrawView 打印
BOOL CVisDrawView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
pInfo->SetMaxPage(2);
return DoPreparePrinting(pInfo);
}
void CVisDrawView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: 打印前添加额外的初始化
int nHorzSize = pDC->GetDeviceCaps(HORZSIZE);
int nVertSize = pDC->GetDeviceCaps(VERTSIZE);
m_nPageWidth = nHorzSize/25.4*100.0;
m_nPageHeight = nVertSize/25.4*100.0;
}
void CVisDrawView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印后添加清除过程
}
// CVisDrawView 诊断
#ifdef _DEBUG
void CVisDrawView::AssertValid() const
{
CVisDrawScrollView::AssertValid();
}
void CVisDrawView::Dump(CDumpContext& dc) const
{
CVisDrawScrollView::Dump(dc);
}
CVisDrawDoc* CVisDrawView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CVisDrawDoc)));
return (CVisDrawDoc*)m_pDocument;
}
#endif //_DEBUG
void CVisDrawView::OnDrawSelection()
{
// TODO: 在此添加命令处理程序代码
CDrawTool::c_drawShape = selectTool;
}
// CVisDrawView 消息处理程序
void CVisDrawView::OnDrawPoint()
{
// TODO: 在此添加命令处理程序代码
CDrawTool::c_drawShape = pointTool;
}
void CVisDrawView::OnDrawLine()
{
// TODO: 在此添加命令处理程序代码
CDrawTool::c_drawShape = lineTool;
}
void CVisDrawView::OnDrawHorizen()
{
// TODO: 在此添加命令处理程序代码
CDrawTool::c_drawShape = hlineTool;
}
void CVisDrawView::OnDrawVertical()
{
// TODO: 在此添加命令处理程序代码
CDrawTool::c_drawShape = vlineTool;
}
void CVisDrawView::OnDrawRectangle()
{
// TODO: 在此添加命令处理程序代码
CDrawTool::c_drawShape = rectTool;
}
void CVisDrawView::OnDrawCircle()
{
// TODO: 在此添加命令处理程序代码
CDrawTool::c_drawShape = circleTool;
}
void CVisDrawView::OnDrawTripoint()
{
// TODO: 在此添加命令处理程序代码
CDrawTool::c_drawShape = tparcTool;
}
void CVisDrawView::OnDrawPolyline()
{
// TODO: 在此添加命令处理程序代码
CDrawTool::c_drawShape = polylineTool;
}
void CVisDrawView::OnDrawPolygon()
{
// TODO: 在此添加命令处理程序代码
CDrawTool::c_drawShape = polygonTool;
}
void CVisDrawView::OnUpdateDrawTripoint(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetRadio(CDrawTool::c_drawShape == tparcTool);
}
void CVisDrawView::OnDrawSec()
{
// TODO: 在此添加命令处理程序代码
CDrawTool::c_drawShape = secarcTool;
}
void CVisDrawView::OnDrawCse()
{
// TODO: 在此添加命令处理程序代码
CDrawTool::c_drawShape = csearcTool;
}
void CVisDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CMainFrame*pMF=(CMainFrame*)AfxGetMainWnd();
CPoint devPoint=GetLogPosition(point);
double pointx,pointy;
ClientToWorld(devPoint,pointx,pointy);
pMF->m_xd=pointx;
pMF->m_yd=pointy;
CDrawTool* pTool = CDrawTool::FindTool(CDrawTool::c_drawShape);
if (pTool != NULL)
pTool->OnMouseMove(this, nFlags, point);
}
void CVisDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//ps=point;
CVisDrawDoc* pDoc =GetDocument();
ASSERT_VALID(pDoc);
CDrawTool* pTool = CDrawTool::FindTool(CDrawTool::c_drawShape);
if (pTool != NULL)
{
pTool->OnLButtonDown(this, nFlags, point);
}
/*if(m_pID == m_picIDmo)
{
}*/
/* CFigureObj* pObj = CFigureObj::FindObj(CFigureObj::c_drawObj);
POSITION pos = m_selection.GetHeadPosition();
if(m_selection.GetCount()==1 && CDrawTool::c_drawShape==selectTool)
{
if(CFigureObj::c_drawObj==baoObj)
{
// if(m_pID == m_picIDmo)
m_wndDlgBarLanguage.SetDlgItemTextA(IDC_EDIT_LANGUAGE,(LPCTSTR)(pDoc->m_strLanguage));
CFigureObj::c_drawObj=cheObj;
//m_wndDlgBarLanguage.UpdateData();
pDoc->SetModifiedFlag();
pDoc->UpdateAllViews(NULL);
// CFigureObj::c_objs.RemoveTail()
}
if(CFigureObj::c_drawObj==moObj)
{
// if(m_pID == m_picIDmo)
m_wndDlgBarLanguage.SetDlgItemTextA(IDC_EDIT_LANGUAGE,(LPCTSTR)(pDoc->m_strLanguage));
CFigureObj::c_drawObj=cheObj;
//m_wndDlgBarLanguage.UpdateData();
pDoc->SetModifiedFlag();
pDoc->UpdateAllViews(NULL);
// CFigureObj::c_objs.RemoveTail();
// m_wndDlgBarLanguage.SetDlgItemTextA(IDC_EDIT_LANGUAGE,_T(""));
}
//else
m_selection.RemoveAll();
{
m_wndDlgBarLanguage.SetDlgItemTextA(IDC_EDIT_LANGUAGE,_T(""));
pDoc->SetModifiedFlag();
pDoc->UpdateAllViews(NULL);
}
}*/
//
//CFigureObj* pObj = CFigureObj::FindObj(CFigureObj::c_drawObj);
/*else
{
CSelectTool* pSelTool;
pSelTool->OnLButtonDown(this, nFlags, point);
}*/
/*if(m_Draw=1)
{
VPtoDP(point.x,point.y,&m_TextX,&m_TextY);
if(!pTextDlg)
{
pTextDlg=new TextWriteDlg(this,m_TextString);
ASSERT(pTextDlg);
}
if(!pTextDlg->))
}*/
// CClientDC dc;
/*
if(m_type=3)
{
}
*/
}
void CVisDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CVisDrawDoc* pDoc =GetDocument();
ASSERT_VALID(pDoc);
// pDoc->UpdateAllViews();
CDrawTool* pTool = CDrawTool::FindTool(CDrawTool::c_drawShape);
if (pTool != NULL)
pTool->OnLButtonUp(this, nFlags, point);
/*CFigureObj* pObj = CFigureObj::FindObj(CFigureObj::c_drawObj);
if(m_selection.GetCount()==1 && CDrawTool::c_drawShape==selectTool)
{
if(CFigureObj::c_drawObj==baoObj)
{
// if(m_pID == m_picIDmo)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -