zoukankan      html  css  js  c++  java
  • MFC画文字DrawText,GetTextExtent,GetTextMetrics

    // TextView.cpp : implementation of the CTextView class
    //
    
    #include "stdafx.h"
    #include "Text.h"
    
    #include "TextDoc.h"
    #include "TextView.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // CTextView
    
    IMPLEMENT_DYNCREATE(CTextView, CView)
    
    BEGIN_MESSAGE_MAP(CTextView, CView)
    	//{{AFX_MSG_MAP(CTextView)
    	ON_WM_CREATE()
    	ON_WM_CHAR()
    	ON_WM_LBUTTONDBLCLK()
    	ON_WM_TIMER()
    	//}}AFX_MSG_MAP
    	// Standard printing commands
    	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()
    
    /////////////////////////////////////////////////////////////////////////////
    // CTextView construction/destruction
    
    CTextView::CTextView()
    {
    	// TODO: add construction code here
    	m_strLine="";
    	m_ptStart=CPoint(0,0);	
    	m_iWidth=0;
    }
    
    CTextView::~CTextView()
    {
    }
    
    BOOL CTextView::PreCreateWindow(CREATESTRUCT& cs)
    {
    	// TODO: Modify the Window class or styles here by modifying
    	//  the CREATESTRUCT cs
    
    	return CView::PreCreateWindow(cs);
    }
    
    /////////////////////////////////////////////////////////////////////////////
    // CTextView drawing
    
    void CTextView::OnDraw(CDC* pDC)
    {
    	CTextDoc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);	
    
    	CString str("吴xxabc Hello World");
    	pDC->TextOut(0,200,str);
    }
    
    /////////////////////////////////////////////////////////////////////////////
    // CTextView printing
    
    BOOL CTextView::OnPreparePrinting(CPrintInfo* pInfo)
    {
    	// default preparation
    	return DoPreparePrinting(pInfo);
    }
    
    void CTextView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
    	// TODO: add extra initialization before printing
    }
    
    void CTextView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
    	// TODO: add cleanup after printing
    }
    
    /////////////////////////////////////////////////////////////////////////////
    // CTextView diagnostics
    
    #ifdef _DEBUG
    void CTextView::AssertValid() const
    {
    	CView::AssertValid();
    }
    
    void CTextView::Dump(CDumpContext& dc) const
    {
    	CView::Dump(dc);
    }
    
    CTextDoc* CTextView::GetDocument() // non-debug version is inline
    {
    	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTextDoc)));
    	return (CTextDoc*)m_pDocument;
    }
    #endif //_DEBUG
    
    /////////////////////////////////////////////////////////////////////////////
    // CTextView message handlers
    
    int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    	if (CView::OnCreate(lpCreateStruct) == -1)
    		return -1;
    	CClientDC dc(this);
    	TEXTMETRIC metric;
    	dc.GetTextMetrics(&metric);
    	//CreateSolidCaret(metric.tmAveCharWidth,metric.tmHeight);
    	m_bmpCaret.LoadBitmap(IDB_WU);
    	CreateCaret(&m_bmpCaret);
    	ShowCaret();	
    
    	SetTimer(1,100,NULL);
    
    	return 0;
    }
    
    void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    	CFont font;
    	font.CreatePointFont(300,"华文行楷",NULL);
    
    	CClientDC dc(this);
    	CFont *pOldFont = dc.SelectObject(&font);
    	if(0x0d==nChar){			//Enter
    		TEXTMETRIC mt;
    		dc.GetTextMetrics(&mt);
    		m_ptStart.y += mt.tmHeight;
    		m_strLine.Empty();
    	}
    	else if(0x08 == nChar){		//BackSpace		
    		COLORREF colorOld = dc.SetTextColor( dc.GetBkColor() );
    		dc.TextOut(m_ptStart.x,m_ptStart.y,m_strLine);
    		m_strLine=m_strLine.Left( m_strLine.GetLength()-1 );
    		dc.SetTextColor(colorOld);
    	}
    	else{
    		m_strLine+=nChar;
    	}
    
    	dc.TextOut(m_ptStart.x,m_ptStart.y,m_strLine);
    
    	CSize sz = dc.GetTextExtent(m_strLine);
    	
    	SetCaretPos(CPoint(m_ptStart.x+sz.cx,m_ptStart.y));
    	dc.SelectObject( pOldFont );
    	CView::OnChar(nChar, nRepCnt, nFlags);
    }
    
    void CTextView::OnLButtonDblClk(UINT nFlags, CPoint point) 
    {
    	SetCaretPos( m_ptStart=point );
    	m_strLine.Empty();
    	CView::OnLButtonDblClk(nFlags, point);
    }
    
    void CTextView::OnTimer(UINT nIDEvent) 
    {
    	if(nIDEvent==1){
    		m_iWidth+=5;
    		CClientDC dc(this);
    		CString str("吴XXabc Hello World");
    		CSize sz = dc.GetTextExtent(str);
    
    		CRect rect(0,200,m_iWidth,200+sz.cy);
    		dc.SetTextColor(RGB(0xff,0,0));
    		dc.DrawText(str,&rect,DT_LEFT);
    	}
    	CView::OnTimer(nIDEvent);
    }
    
    

  • 相关阅读:
    Docker 相关资源
    ReferenceFinder 学习
    AssetBundle 复习
    Coroutine 复习
    Unreal 相关资源
    Houdini 相关资源
    MySQL多数据库合并到一个数据库
    Module is not specified
    idea导入多maven项目
    redis-cluster部署遇到为问题记录
  • 原文地址:https://www.cnblogs.com/wucg/p/1949497.html
Copyright © 2011-2022 走看看