孙鑫老师教学视频学习笔记——文字处理

创建一个插入符:
    CreateSolidCaret(10,100); //创建一个宽10,高100的插入符
    ShowCaret();      //显示该插入符
创建一个随字体大小改变的插入符:
    CClientDC dc(this);
    TEXTMETRIC tm;
    dc.GetTextMetrics(&tm);
    CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
    ShowCaret();
创建一个图标的插入符:
    CClientDC dc(this);
    bitmap.LoadBitmap(IDB_BITMAP1);   //为CView类添加一个bitmap成员变量
    CreateCaret(&bitmap);
    ShowCaret();
在屏幕上显示文字:为了不随窗口的重绘而消失,在CView类的函数中操作
    pDC->TextOut(0,100,"飞雪待剑");
或者   CString str;    //CString str("飞雪待剑");
       str="飞雪待剑";
       pDC->TextOut(0,100,str);
或者   CString str;
       str.LoadString(IDB_JAZKA);
       pDC->TextOut(0,200,str);
创建一个路径:
       CString str("飞雪待剑");
       pDC->TextOut(0,100,str);
       CSize sz=pDC->GetTextExtent(str);
       pDC->BeginPath();
       pDC->Rectangle(0,100,sz.cx,100+sz.cy);
       pDC->EndPath();
让某一部分内容的显示不同:
       pDC->SelectClipPath(RGN_DIFF);  //选择剪切区域模式
        for(int i=0;i<300;i+=5)        //画一些方格
 {
  pDC->MoveTo(0,i);
  pDC->LineTo(300,i);
  pDC->MoveTo(i,0);
  pDC->LineTo(i,300);
 }
插入符跟随鼠标位置变化:在OnLButtonDown函数的中添加以下函数
       SetCaretPos(point);
实现字符输入功能,包括回车和删除:在OnChar消息响应函数中实现
        CClientDC dc(this);       
 CFont font;                //创建字体类型
 font.CreatePointFont(200,"华文行楷",NULL);
 CFont *pOldFont=dc.SelectObject(&font);   
 TEXTMETRIC tm;           
 dc.GetTextMetrics(&tm);        //获得当前设备中字体描述
 if(0x0d==nChar)              //如果输入回车
 { 
  m_strLine.Empty();        //先清空字符串
  m_ptOrigin.y+=tm.tmHeight;    //插入符横坐标不变,纵坐标变化
 } 
 else if(0x08==nChar)          //如果输入删除
 {
                //获得当前背景色,并存储当前字体颜色
  COLORREF clr=dc.SetTextColor(dc.GetBkColor());   
                //以背景色输出字符串                
  dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
                //取字符串的有效部分,除掉删除的字符
  m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
  dc.SetTextColor(clr);   //选择原来的字体颜色
 }
 else         //如果输入其他字符
 { 
  m_strLine+=nChar;   //加入到字符串中
 }
 CSize sz=dc.GetTextExtent(m_strLine); //获得该字符串在设备中的长与高
 CPoint pt;
 pt.x=m_ptOrigin.x+sz.cx;   
 pt.y=m_ptOrigin.y+sz.cy;
        SetCaretPos(pt);   //更新鼠标位置
 dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine); //输出改变后的字符串
 dc.SelectObject(pOldFont);
实现卡拉OK式的字体变化:在OnTimer消息函数中实现
        void CTextjzkView::OnTimer(UINT nIDEvent) 
{
 // TODO: Add your message handler code here and/or call default
 m_nWidth+=5;          //每一定时间,改变颜色的字体扩大 
 CClientDC dc(this); 
 TEXTMETRIC tm; 
 dc.GetTextMetrics(&tm);     //获得当前设备中字体描述
 CRect rect;                 //创建改变字体颜色的矩形框
 rect.left=0;
 rect.top=200;
 rect.right=m_nWidth;
 rect.bottom=rect.top+tm.tmHeight;
 dc.SetTextColor(RGB(0,255,0));     //选择字体颜色
 CString str;
 str.LoadString(IDS_JAZKA);
 dc.DrawText(str,rect,DT_LEFT);  //利用该函数在给定的矩形区域内显示
 rect.top=150;
 rect.bottom=rect.top+tm.tmHeight;
 dc.DrawText(str,rect,DT_RIGHT);  //右对齐方式
 CSize sz=dc.GetTextExtent(str);
 if(m_nWidth>sz.cx)               //当字体全部改变完颜色后,重设字体颜色
 {
  m_nWidth=0;
  dc.SetTextColor(RGB(255,0,0));
  dc.TextOut(0,200,str);
 }
 CView::OnTimer(nIDEvent);
}


本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/168274,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值