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

📄 selection.h

📁 一个完全使用MFC框架开发的C++编译器的代码。功能十分强大可以编译大型程序。
💻 H
字号:
// ---- Selection.h
#ifndef SELECTION_H
#define SELECTION_H
namespace DDJCProgrammingColumnSelection	{
//////////////////////////////////////////////////////////////////////
// P is a user-defined iterator type that indexes the item 
//     (char, e.g.) in the view
// P must support assignment and operator<
// P must support p(0) to initialize a P object to a null value 
//   which is the lowest relational value that a P object can have
// V is the view class, which must provide this function:
//   void InvertDisplayItems(P begin, P end);
//
template <class P, class V>
class Selection	{
	V& view;		// reference to the document's view
	P anchor;		// the first event of a marked selection
	P terminal;		// the last event of a marked selection
	P saveanchor;	// for saving first event of marked selection
	P saveterminal;	// for saving last event of marked selection
	bool marking;	// true when marking with mouse or keyboard
public:
	Selection(V& rV);
	bool IsSelectionMarked() const
		{ return !(anchor == terminal); }
	bool IsMarking() const
		{ return marking; }
	bool IsItemInSelection(P pos);
	void RestoreSelection();
	void SaveSelection();
	void GetSelectionMarkers(P& begin, P& end) const;
	void ExtendSelection(P pos);
	void UnmarkSelection();
	void SetMarking(P pos);
	void StopMarking();
};
template <class P, class V>
Selection<P, V>::Selection(V& rV) : 
	view(rV), anchor(0), terminal(0), marking(false)
{
}
template <class P, class V>
bool Selection<P, V>::IsItemInSelection(P pos)
{
	P begin, end;
	GetSelectionMarkers(begin, end);
	return !(pos < begin) && (pos < end);
}
template <class P, class V>
void Selection<P,V>::SaveSelection()
{
	saveanchor = anchor;
	saveterminal = terminal;
}
template <class P, class V>
void Selection<P,V>::RestoreSelection()
{
	anchor = saveanchor;
	terminal = saveterminal;
	P begin, end;
	GetSelectionMarkers(begin, end);
	view.InvertDisplayItems(begin, end);
}
template <class P, class V>
void Selection<P,V>::GetSelectionMarkers(P& begin, P& end) const
{
	begin = anchor;
	end = terminal;
	if (end < begin)	{
		P temp = begin;
		begin = end;
		end = temp;
	}
}
template <class P, class V>
void Selection<P,V>::ExtendSelection(P pos)
{
	if (pos < terminal)	{
		view.InvertDisplayItems(pos, terminal);
	}
	else
		view.InvertDisplayItems(terminal, pos);
	terminal = pos;
}
template <class P, class V>
void Selection<P,V>::UnmarkSelection()
{
	if (IsSelectionMarked())	{
		P begin, end;
		GetSelectionMarkers(begin, end);
		view.InvertDisplayItems(begin, end);
		marking = false;
		anchor = terminal = 0;
	}
}
template <class P, class V>
void Selection<P,V>::SetMarking(P pos)
{
	if (!marking)	{
		UnmarkSelection();
		marking = true;
		terminal = anchor = pos;
	}
}
template <class P, class V>
void Selection<P,V>::StopMarking()
{
	marking = false;
}

}		// namespace DDJCProgrammingColumnSelection
#endif	// SELECTION_H

⌨️ 快捷键说明

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