MFC 학습용 노트 3 삽입점 커서(Caret) 추가

2100 단어
주의: 커서라는 중국어는 자주 혼용됩니다. 사실 커서의 영어는cursor이고 마우스의 위치를 가리킵니다.여기서 말하는 것은 삽입점이고 영어는 카드이며 입력한 문자를 어느 위치에 두었는지 나타낸다.
대상: 현재 문자의 위치를 표시하기 위해 이전 프로그램에 카드를 추가합니다.
1. MFC의 단일 문서 프로그램 프로젝트를 만들고 카트라고 이름을 짓고 다른 것은 필기 2와 같이 입력한 문자를 표시한다.
2. 두 변수를 만들어서 카드 생성 여부의 표지와 카드 위치를 저장한다.
논리적으로 보면 이것은 디스플레이와만 관련이 있기 때문에 문서가 아닌 보기에 세워야 한다.
클래스 CCaretView 정의에서(caretView.h) 쓰기 코드:
class CCaretView : public CView
{
protected: // create from serialization only
	CCaretView();
	DECLARE_DYNCREATE(CCaretView)
	boolean Flag;//          
	CPoint CaretPosition;//     
// Attributes
public:
	CCaretDoc* GetDocument();

// Operations

클래스 CCaretView 구조 함수에서 Flag(
CaretPosition은 여기서 초기화할 필요가 없습니다):
4
CCaretView::CCaretView()
{
	// TODO: add construction code here
	Flag=false;//    false,    true,     Caret

}
처리 카드
Ondraw 함수에 코드 쓰기
void CCaretView::OnDraw(CDC* pDC)
{
	CCaretDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	if (!Flag)//     Caret   
	{
	TEXTMETRIC textmetric;//The TEXTMETRIC structure contains basic information about a physical font.
	pDC->GetTextMetrics(&textmetric);//The GetTextMetrics function fills the specified buffer with the metrics for the currently selected font. 
	CreateSolidCaret(textmetric.tmAveCharWidth/8,textmetric.tmHeight);//Creates a solid rectangle for the system caret and claims ownership of the caret.
																	  //The caret shape can be a line or block. 
																	  //      tmHeight,    tmAveCharWidth 1/8	
	CaretPosition.x=CaretPosition.y=0;//   0,           ,         
	SetCaretPos(CaretPosition);//Sets the position of the caret. 
	ShowCaret();//Shows the caret on the screen at the caret’s current position. 
	Flag=true;//     ,      
	}

	HideCaret();//
	pDC->TextOut(0,0,pDoc->StringData);//     StringData
	CSize charsize=pDC->GetTextExtent(pDoc->StringData);//    ,        !
	CaretPosition.x=charsize.cx;//
	SetCaretPos(CaretPosition);//
	ShowCaret();//
}

좋은 웹페이지 즐겨찾기