⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cellview.cpp

📁 类似Excel的设计器源代码,基本实现电子图表的功能
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// CellView.cpp : implementation of the CCellView class
//

#include "stdafx.h"
#include "Cell.h"
#include "MainFrm.h"
#include "CellDoc.h"
#include "CellView.h"
#include <math.h> 
#include <stdlib.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

void No2Abc(int nNo,CString &szTxt)
{
	int ndiv;
	ndiv=nNo;
	char cc;
	szTxt.Empty();
	
	do
	{
		cc=(ndiv%26)+'A';
		szTxt.Insert(0,cc);
		ndiv/=26;
		
	}while(ndiv!=0);
}

BOOL Abc2Int(LPCTSTR lpszAbc,int *pn)
{
	CString szt=lpszAbc;
	if(szt.IsEmpty())
		return FALSE;

	CString sztt="";
	int i;
	for(i=0;i<szt.GetLength();i++)
	{
		sztt.Insert(0,szt[i]);
		if((szt[i] < 'A')||(szt[i]>'Z'))
			return FALSE;
	}
	
	int n=0;
	for(i=0;i<sztt.GetLength();i++)
	{

		int nttt=1;
		for(int k=0;k<i;k++)
			nttt*=26;
		n+=int(sztt[i] -'A') * nttt;
	}
	*pn=n;
	return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CDlgMyColor

IMPLEMENT_DYNAMIC(CDlgMyColor, CColorDialog)

CDlgMyColor::CDlgMyColor(COLORREF clrInit, DWORD dwFlags, CWnd* pParentWnd) :
	CColorDialog(clrInit, dwFlags, pParentWnd)
{
		m_szTitle="颜色";
}


BEGIN_MESSAGE_MAP(CDlgMyColor, CColorDialog)
	//{{AFX_MSG_MAP(CDlgMyColor)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


BOOL CDlgMyColor::OnInitDialog() 
{
	CColorDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	SetWindowText(m_szTitle);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

/////////////////////////////////////////////////////////////////////////////
// CCellView

IMPLEMENT_DYNCREATE(CCellView, CView)

BEGIN_MESSAGE_MAP(CCellView, CView)
	//{{AFX_MSG_MAP(CCellView)
	ON_WM_VSCROLL()
	ON_WM_HSCROLL()
	ON_WM_ERASEBKGND()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_COMMAND(ID_EDIT_INSERTROW, OnEditInsertrow)
	ON_UPDATE_COMMAND_UI(ID_EDIT_INSERTROW, OnUpdateEditInsertrow)
	ON_COMMAND(ID_EDIT_INSERTCOL, OnEditInsertcol)
	ON_UPDATE_COMMAND_UI(ID_EDIT_INSERTCOL, OnUpdateEditInsertcol)
	ON_COMMAND(ID_EDIT_ADDROW, OnEditAddrow)
	ON_UPDATE_COMMAND_UI(ID_EDIT_ADDROW, OnUpdateEditAddrow)
	ON_COMMAND(ID_EDIT_ADDCOL, OnEditAddcol)
	ON_UPDATE_COMMAND_UI(ID_EDIT_ADDCOL, OnUpdateEditAddcol)
	ON_COMMAND(ID_EDIT_DELROW, OnEditDelrow)
	ON_UPDATE_COMMAND_UI(ID_EDIT_DELROW, OnUpdateEditDelrow)
	ON_COMMAND(ID_EDIT_DELCOL, OnEditDelcol)
	ON_UPDATE_COMMAND_UI(ID_EDIT_DELCOL, OnUpdateEditDelcol)
	ON_WM_CONTEXTMENU()
	ON_WM_LBUTTONDBLCLK()
	ON_COMMAND(ID_TXT_LEFT, OnTxtLeft)
	ON_COMMAND(ID_TXT_RIGHT, OnTxtRight)
	ON_COMMAND(ID_TXT_TOP, OnTxtTop)
	ON_COMMAND(ID_TXT_VMIN, OnTxtVmin)
	ON_COMMAND(ID_TXT_HMID, OnTxtHmid)
	ON_COMMAND(ID_TXT_BOTTOM, OnTxtBottom)
	ON_COMMAND(ID_TXT_AUTO, OnTxtAuto)
	ON_COMMAND(ID_FONT_FAT, OnFontFat)
	ON_UPDATE_COMMAND_UI(ID_FONT_FAT, OnUpdateFontFat)
	ON_COMMAND(ID_FONT_UNDERLINE, OnFontUnderline)
	ON_UPDATE_COMMAND_UI(ID_FONT_UNDERLINE, OnUpdateFontUnderline)
	ON_COMMAND(ID_FONT_XT, OnFontXt)
	ON_UPDATE_COMMAND_UI(ID_FONT_XT, OnUpdateFontXt)
	ON_COMMAND(ID_CELLFRM_LEFT, OnCellfrmLeft)
	ON_UPDATE_COMMAND_UI(ID_CELLFRM_LEFT, OnUpdateCellfrmLeft)
	ON_COMMAND(ID_CELLFRM_RIGHT, OnCellfrmRight)
	ON_UPDATE_COMMAND_UI(ID_CELLFRM_RIGHT, OnUpdateCellfrmRight)
	ON_COMMAND(ID_CELLFRM_TOP, OnCellfrmTop)
	ON_UPDATE_COMMAND_UI(ID_CELLFRM_TOP, OnUpdateCellfrmTop)
	ON_COMMAND(ID_CELLFRM_LT2RB, OnCellfrmLt2rb)
	ON_UPDATE_COMMAND_UI(ID_CELLFRM_LT2RB, OnUpdateCellfrmLt2rb)
	ON_COMMAND(ID_CELLFRM_LB2RT, OnCellfrmLb2rt)
	ON_UPDATE_COMMAND_UI(ID_CELLFRM_LB2RT, OnUpdateCellfrmLb2rt)
	ON_COMMAND(ID_CELLFRM_BOTTOM, OnCellfrmBottom)
	ON_UPDATE_COMMAND_UI(ID_CELLFRM_BOTTOM, OnUpdateCellfrmBottom)
	ON_COMMAND(ID_CELLFRM_NONE, OnCellfrmNone)
	ON_UPDATE_COMMAND_UI(ID_CELLFRM_NONE, OnUpdateCellfrmNone)
	ON_COMMAND(ID_TXT_COLOR, OnTxtColor)
	ON_COMMAND(ID_TXT_BKCOLOR, OnTxtBkcolor)
	ON_COMMAND(ID_EDIT_CAL, OnEditCal)
	ON_COMMAND(ID_CELL_DOTNUM0, OnCellDotnum0)
	ON_COMMAND(ID_CELL_DOTNUM1, OnCellDotnum1)
	ON_COMMAND(ID_CELL_DOTNUM2, OnCellDotnum2)
	ON_COMMAND(ID_CELL_DOTNUM3, OnCellDotnum3)
	ON_COMMAND(ID_CELL_DOTNUM4, OnCellDotnum4)
	ON_COMMAND(ID_CELL_DOTNUM5, OnCellDotnum5)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_EN_CHANGE(ID_EDIT_CELL, OnChangeEdit)//编辑改变
	ON_CBN_SELCHANGE(ID_COMBO_FONT, OnSelchangeComboFont)
	ON_CBN_SELCHANGE(ID_COMBO_FONTSIZE, OnSelchangeComboFontsize)
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCellView construction/destruction

CCellView::CCellView()
{
	// TODO: add construction code here
	m_nCurFixColNo=-1;
	m_nCurFixRowNo=-1;//当前选中的固定行列

	m_nCurEditRow=-1;
	m_nCurEditCol=-1;

	m_bFontFat=FALSE;
	m_bFontUnderLine=FALSE;
	m_bFontXt=FALSE;

	m_bCellFrmLeft=FALSE;
	m_bCellFrmRight=FALSE;
	m_bCellFrmTop=FALSE;
	m_bCellFrmBottom=FALSE;
	m_bCellFrmLT2RB=FALSE;
	m_bCellFrmLB2RT=FALSE;
}

CCellView::~CCellView()
{
}

BOOL CCellView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CCellView drawing

//0:Normal,1:选中,2:反白
#define FIX_LEFT_WHITE	0X00000001
#define FIX_TOP_WHITE   0X00000002
#define FIX_HAS_SELECT	0X00000008
#define FIX_ALL_SELECT	0X00000010



void CCellView::DrawEditLine(CDC *pDC)//画编辑时网格线
{
	CCellDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	CRect rctClient;
	GetClientRect(&rctClient);

	int nCol=pDoc->m_warrayCol.GetSize();
	int nRow=pDoc->m_warrayRow.GetSize();
	
	int nSCol,nSRow;
	nSCol=pDoc->m_nTopLeftColNo;
	nSRow=pDoc->m_nTopLeftRowNo;
	int i;
	//求日right
	int nRight=pDoc->m_nTopX-1;
	for(i=nSCol;(i<nCol)&&(nRight<rctClient.right);i++)
		nRight+=(int)(pDoc->m_warrayCol[i]);

	//求日bottom
	int nBottom=pDoc->m_nTopY-1;
	for(i=nSRow;(i<nRow)&&(nBottom<rctClient.bottom);i++)
		nBottom+=(int)(pDoc->m_warrayRow[i]);

	COLORREF clrLine=::GetSysColor(COLOR_3DLIGHT);
	CPen pen(PS_SOLID,0,clrLine);
	CPen *oldPen;
	oldPen=pDC->SelectObject(&pen);
	//画竖线
	int nt=pDoc->m_nTopX-1;
	for(i=nSCol;(i<nCol)&&(nt<rctClient.right);i++)
	{
		nt+=(int)(pDoc->m_warrayCol[i]);
		pDC->MoveTo(nt,pDoc->m_nTopY-1);
		pDC->LineTo(nt,nBottom);
	}

	nt=pDoc->m_nTopY-1;
	for(i=nSRow;(i<nRow)&&(nt<rctClient.bottom);i++)
	{
		nt+=(int)(pDoc->m_warrayRow[i]);
		pDC->MoveTo(pDoc->m_nTopX-1,nt);
		pDC->LineTo(nRight,nt);
	}
	pDC->SelectObject(oldPen);

}

void CCellView::DrawFixCell(CDC *pDC,
							   LPCTSTR lpszText,
							   CRect &rctCell,
							   DWORD nStyle)//画固定CELL外框0-10 ROW,10-20COL

{
	CFont fontTxt,*oldFont;
	CBrush *oldBrush;
	int oldbkMode;
	int oldTxtColor;

	int fntWeight=400;
	if(((nStyle & FIX_HAS_SELECT)!=0)||((nStyle & FIX_ALL_SELECT)!=0))
		fntWeight=800;
	fontTxt.CreateFont(14,0,// int nHeight, int nWidth,
						0,0,//int nEscapement, int nOrientation, 
						fntWeight,//int nWeight,
						0,0,//BYTE bItalic, BYTE bUnderline, 
						0,GB2312_CHARSET,//BYTE cStrikeOut, BYTE nCharSet, 
						OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,//BYTE nOutPrecision, BYTE nClipPrecision,
						1,2,//BYTE nQuality, BYTE nPitchAndFamily, 
						"宋体");//LPCTSTR lpszFacename
	CPen pen1(PS_SOLID,0,RGB(128,128,128));
	CPen pen2(PS_SOLID,0,RGB(255,255,255));
	CPen pen3(PS_SOLID,0,RGB(0,0,0));
	CPen *oldPen;

	
	COLORREF bkColor=::GetSysColor(COLOR_3DLIGHT);
	COLORREF txtColor=RGB(0,0,0);


	if(nStyle & FIX_ALL_SELECT)
	{
		bkColor=RGB(0,0,0);
		txtColor=RGB(255,255,255);
	}

	CBrush brhbk(bkColor);
	oldbkMode=pDC->SetBkMode(TRANSPARENT);
	oldPen=pDC->SelectObject(&pen1);
	oldTxtColor=pDC->SetTextColor(RGB(0,0,0));
	oldBrush=pDC->SelectObject(&brhbk);

	pDC->FillSolidRect(rctCell,bkColor);
	CString szt=lpszText;
	oldFont=pDC->SelectObject(&fontTxt);
	pDC->DrawText(szt,rctCell,DT_SINGLELINE|DT_CENTER |DT_VCENTER);

	pDC->SelectObject(&pen2);
	if(nStyle & FIX_TOP_WHITE)
	{
		pDC->MoveTo(rctCell.left,rctCell.top);
		pDC->LineTo(rctCell.right,rctCell.top);
	}
	if(nStyle &FIX_LEFT_WHITE)
	{
		pDC->MoveTo(rctCell.left,rctCell.top);
		pDC->LineTo(rctCell.left,rctCell.bottom);
	}
	
	pDC->SelectObject(&pen1);
	if((nStyle & FIX_ALL_SELECT)==0)
	{
		pDC->MoveTo(rctCell.left,rctCell.bottom);
		pDC->LineTo(rctCell.right,rctCell.bottom);
		pDC->LineTo(rctCell.right,rctCell.top-1);
	}
		
	pDC->SetBkMode(oldbkMode);
	pDC->SelectObject(oldPen);
	pDC->SetTextColor(oldTxtColor);
	pDC->SelectObject(oldBrush);
	pDC->SelectObject(oldFont);
}

void CCellView::DrawFixRowCol(CDC *pDC)
{
	CCellDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	CRect rctClient;
	GetClientRect(&rctClient);

	int nCol=pDoc->m_warrayCol.GetSize();
	int nRow=pDoc->m_warrayRow.GetSize();


	
	int i;


	CRect rtCell;
	CString szCellName;


	rtCell.top=0;
	rtCell.left=0;
	rtCell.right=pDoc->m_nWidthFixCol;
	rtCell.bottom=pDoc->m_nHigthFixRow;

	DrawFixCell(pDC,
						"",
						rtCell,
						FIX_LEFT_WHITE | FIX_TOP_WHITE );//画固定CELL外框0-10 ROW,10-20COL
	int nLeft=pDoc->m_nWidthFixCol+1;
	for(i=pDoc->m_nTopLeftColNo;i<nCol;i++)
	{
		rtCell.top=0;
		rtCell.left=nLeft;
		rtCell.right=nLeft+(int)(pDoc->m_warrayCol[i])-1;
		rtCell.bottom=pDoc->m_nHigthFixRow;

		if((rctClient & rtCell).IsRectNull())
			break;
		No2Abc(i,szCellName);
		DrawFixCell(pDC,
						szCellName,
						rtCell,
						FIX_LEFT_WHITE );//画固定CELL外框0-10 ROW,10-20COL
		nLeft+=(int)(pDoc->m_warrayCol[i]);
	}
	int nTop=pDoc->m_nHigthFixRow+1;
	for(i=pDoc->m_nTopLeftRowNo;i<nRow;i++)
	{
		rtCell.top=nTop;
		rtCell.left=0;
		rtCell.right=pDoc->m_nWidthFixCol;
		rtCell.bottom=nTop+(int)(pDoc->m_warrayRow[i])-1;

		if((rctClient & rtCell).IsRectNull())
			break;
		szCellName.Format("%d",i+1);
		
		DrawFixCell(pDC,
						szCellName,
						rtCell,
						FIX_TOP_WHITE );//画固定CELL外框0-10 ROW,10-20COL
		nTop+=pDoc->m_warrayRow[i];
	}

}

void CCellView::OnDraw(CDC* pDC)
{
	CCellDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	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(!pDC->IsPrinting())
		pDrawDC->FillSolidRect(client,RGB(255,255,255));

	if(!pDC->IsPrinting())
		DrawFixRowCol(pDrawDC);

	if(!pDC->IsPrinting())
		DrawEditLine(pDrawDC);//画编辑时网格线	

	if(!pDC->IsPrinting())
		pDoc->DrawAllCell(pDrawDC,client);
	else
		pDoc->DrawAllCell(pDrawDC,client,TRUE);

	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);
	}
}

/////////////////////////////////////////////////////////////////////////////
// CCellView printing

BOOL CCellView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	pInfo->SetMaxPage(1);
	return DoPreparePrinting(pInfo);
}

void CCellView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CCellView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CCellView diagnostics

#ifdef _DEBUG
void CCellView::AssertValid() const
{
	CView::AssertValid();
}

void CCellView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CCellDoc* CCellView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCellDoc)));
	return (CCellDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CCellView message handlers

void CCellView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	CCellDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if(nSBCode==SB_LINEDOWN)
	{
		if(pDoc->m_nTopLeftRowNo<pDoc->m_warrayRow.GetSize()-1)
		{
			pDoc->m_nTopLeftRowNo++;
			SetScrollPos(SB_VERT,pDoc->m_nTopLeftRowNo);
			Invalidate();
		}
		return;
	}
	else if(nSBCode==SB_LINEUP)
	{
		if(pDoc->m_nTopLeftRowNo>0)
		{
			pDoc->m_nTopLeftRowNo--;
			SetScrollPos(SB_VERT,pDoc->m_nTopLeftRowNo);	
			Invalidate();
		}
		return;
	}
	else if(nSBCode==SB_PAGEUP)
	{
		if(pDoc->m_nTopLeftRowNo==0)
			return;
		if(pDoc->m_nTopLeftRowNo>=5)
			pDoc->m_nTopLeftRowNo-=5;
		else
			pDoc->m_nTopLeftRowNo=0;

		SetScrollPos(SB_VERT,pDoc->m_nTopLeftRowNo);	
		Invalidate();
	}

	else if(nSBCode==SB_PAGEDOWN)
	{
		if(pDoc->m_nTopLeftRowNo==pDoc->m_warrayRow.GetSize())
			return;
		if(pDoc->m_warrayRow.GetSize() - pDoc->m_nTopLeftRowNo>5)
			pDoc->m_nTopLeftRowNo+=5;
		else
			pDoc->m_nTopLeftRowNo=pDoc->m_warrayRow.GetSize();

		SetScrollPos(SB_VERT,pDoc->m_nTopLeftRowNo);	
		Invalidate();
	}
	else if(nSBCode==SB_THUMBPOSITION)//SB_THUMBTRACK)
	{
		if(pDoc->m_nTopLeftRowNo == (INT)nPos)
			return;
		pDoc->m_nTopLeftRowNo = nPos;
		SetScrollPos(SB_VERT,pDoc->m_nTopLeftRowNo);
		Invalidate();
	}
	else if(nSBCode==SB_BOTTOM)
	{
		if(pDoc->m_nTopLeftRowNo!=pDoc->m_warrayRow.GetSize() -1)
		{
			pDoc->m_nTopLeftRowNo=pDoc->m_warrayRow.GetSize() -1;
			SetScrollPos(SB_VERT,pDoc->m_nTopLeftRowNo);
		}
		Invalidate();
	}

	else if(nSBCode==SB_TOP)
	{
		if(pDoc->m_nTopLeftRowNo!=0)
		{
			pDoc->m_nTopLeftRowNo=0;
			SetScrollPos(SB_VERT,pDoc->m_nTopLeftRowNo);
		}
		Invalidate();
	}
//	CView::OnVScroll(nSBCode, nPos, pScrollBar);
}

void CCellView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	CCellDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if(nSBCode==SB_LINERIGHT)
	{
		if(pDoc->m_nTopLeftColNo<pDoc->m_warrayCol.GetSize()-1)
		{
			pDoc->m_nTopLeftColNo++;
			SetScrollPos(SB_HORZ,pDoc->m_nTopLeftColNo);
			Invalidate();
		}
		return;
	}
	else if(nSBCode==SB_LINELEFT)
	{
		if(pDoc->m_nTopLeftColNo>0)
		{
			pDoc->m_nTopLeftColNo--;
			SetScrollPos(SB_HORZ,pDoc->m_nTopLeftColNo);	
			Invalidate();
		}
		return;
	}
	else if(nSBCode==SB_PAGELEFT)
	{
		if(pDoc->m_nTopLeftColNo==0)
			return;
		if(pDoc->m_nTopLeftColNo>=5)
			pDoc->m_nTopLeftColNo-=5;
		else
			pDoc->m_nTopLeftColNo=0;

		SetScrollPos(SB_HORZ,pDoc->m_nTopLeftColNo);	
		Invalidate();
	}

	else if(nSBCode==SB_PAGERIGHT)
	{
		if(pDoc->m_nTopLeftColNo==pDoc->m_warrayCol.GetSize())
			return;
		if(pDoc->m_warrayCol.GetSize() - pDoc->m_nTopLeftColNo>5)
			pDoc->m_nTopLeftColNo+=5;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -