TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
int nLineHeight=tm.tmHeight+tm.tmExternnalLeading;
得到字的高度;

解决方案 »

  1.   

    第二个问题
    OnChar(......)
    {
     CSize SizeText,Caretsize;
     static CPoint pt=GetCarePos();
     HideCaret();
     CClientDC dc(this);
     dc.TextOut(pt.x,pt.y.(LPCTSTR)&nChar,1);
     SizeText=dc.GetTextExtent((LPCTSTR)&nChar,1);
     pt.x+=SizeText.cx;
     CaretSize=dc.GetTextExtent("A",1);
     ::CreateCaret(m_hWnd,NULL,CaretSize.cx/2,CaretSize.cy);
     SetCaretPos(pt);
     ShowCaret();
     CView::OnChar(....);
    }
      

  2.   

    1. CWinApp::LoadStandardCursor2. CDC::GetTextMetrics  3. OnDraw( CDC* pDC )
    {
       // set m_bDraw = false then call Invalidate()
       if( m_bDraw )
       {
          pDC->Draw....
       }
    }
      

  3.   

    1.CreateSolidCaret
    2.CDC *pdc = GetDC();
      CFont *pOldFont = pdc->SelectObject(&m_Font);
      CSize szCharExt = pdc->GetTextExtent(_T("X"));
      pdc->SelectObject(pOldFont);
      m_LineHeight = szCharExt.cy;
    3.在OnEraseBkGnd中画,所画内容用一块内存区或链表储存,要清空view就清空内存,再Invalidate(TRUE);