C ++ realiza un programa de múltiples documentos con puntos de interrupción

 1 Cree un nuevo MDI y agréguelo al archivo de encabezado de CView

#include <list>

using namespace std;
typedef list<int> IntList;

2 Agregar miembros en CView

public:
	int m_LineHeight;			
	BOOL m_ldown;	
	IntList lBreakPoint;

	void PaintLeft();
	void AddRemoveBP(int point);

3 Modifique otros códigos de la siguiente manera

void CBreakPointDemoView::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	m_ldown = TRUE;
	PaintLeft();

	CEditView::OnLButtonDown(nFlags, point);
}


void CBreakPointDemoView::PaintLeft()
{
	CBrush brushb(RGB(245, 245, 230));
	int m_breakpoint;
	CDC* hdc;
	hdc = GetWindowDC();
	CRect rect;
	GetClientRect(&rect);
	hdc->FillRect(CRect(rect.left + 2, rect.top + 2, rect.left + m_LineHeight + 7, rect.Height() + 2), &brushb);//画底色
	brushb.DeleteObject();

	CEdit& theEdit = GetEditCtrl();
	int nFirstVisible = theEdit.GetFirstVisibleLine();							
//*
	CBrush OrigBrush, brushf(RGB(255, 0, 0));
	CBrush* oldBrush = (CBrush*)hdc->SelectObject(brushf);
	OrigBrush.FromHandle((HBRUSH)oldBrush);

	IntList::iterator it;
	for (it = lBreakPoint.begin(); it != lBreakPoint.end(); it++)
	{
		m_breakpoint = *it;
		if (m_breakpoint > nFirstVisible)
		{
			int point = (m_breakpoint - 1 - nFirstVisible) * m_LineHeight + 3;				

			if (point < (rect.bottom - m_LineHeight + 1))
			{
				hdc->Ellipse(rect.left + 5, point, rect.left + m_LineHeight + 4, point + m_LineHeight);
			}
		}
	}
	hdc->SelectObject(&OrigBrush);
	OrigBrush.DeleteObject();
	brushf.DeleteObject();


}


void CBreakPointDemoView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CRect rect;
	GetClientRect(&rect);
	InvalidateRect(CRect(rect.left + 2, rect.top + 2, rect.left + m_LineHeight + 7, rect.Height() + 2));

	CEditView::OnKeyDown(nChar, nRepCnt, nFlags);
}


void CBreakPointDemoView::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if (m_ldown == TRUE)
		PaintLeft();

	CEditView::OnMouseMove(nFlags, point);
}


void CBreakPointDemoView::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	m_ldown = FALSE;
	if (point.x < m_LineHeight + 6)
	{
		point.x += 20;
		CEdit& theEdit = GetEditCtrl();
		int n = theEdit.CharFromPos(point);
		AddRemoveBP(HIWORD(n) + 1);
	}
	PaintLeft();

	CEditView::OnLButtonUp(nFlags, point);
}

void CBreakPointDemoView::AddRemoveBP(int point)
{
	IntList::iterator it;
	it = find(lBreakPoint.begin(), lBreakPoint.end(), point);

	if (it != lBreakPoint.end())	
		lBreakPoint.erase(it);
	else
		lBreakPoint.push_back(point);
}


void CBreakPointDemoView::OnPaint()
{
	CPaintDC dc(this); // device context for painting
					   // TODO: 在此处添加消息处理程序代码
					   // 不为绘图消息调用 CEditView::OnPaint()
	PaintLeft();
}

 

Supongo que te gusta

Origin blog.csdn.net/dxm809/article/details/114229742
Recomendado
Clasificación