zoukankan      html  css  js  c++  java
  • 孙鑫vc++学习(vs2008)笔记之第五课文字处理程序

    1.字体的信息:字体的高度 = 升序的高度 + 降序的高度

     

    2.局部变量不显示,在函数结束的时候析构

    3.文字始终保存:当窗口发生重绘的时候重新写文字OnDraw函数

    4.CString存入字符自动分配内存,能用 = 赋值因为它重载了 = 操作符

    5.资源里面string table可以添加字符串资源

    6,路径层(Path bracket):在绘图时,如果希望图的某一部分与其他部分分开处理,就可以利用路径层的独立性,调用SelectClipPath()函数,达到特殊效果。

    7.clipping region剪贴区域,可以控制在剪贴区域内绘图

    8.退格:将最后一个字符设置成背景色

    小知识:CString += nChar不行,默认的应该是w_char,宽字符,可以用m_strLine.Insert(m_strLine.GetLength(),nChar);

    变量初始化:CTestView::CTestView()

    : m_strLine(_T(""))

    , m_ptOrigin(0)

    , m_nWidth(0)           在构造函数里

    9.窗口发生局部重绘

    10.CEditView和CRichEditView文字处理类

    11.创建定时器

     

    View Code
      1 void CTestView::OnDraw(CDC* pDC)
    2 {
    3 CTestDoc* pDoc = GetDocument();
    4 ASSERT_VALID(pDoc);
    5 if (!pDoc)
    6 return;
    7
    8 // TODO: 在此处为本机数据添加绘制代码
    9 CString str(_T("河南科技大学"));
    10 pDC->TextOut(50,50,str);
    11
    12 CSize sz = pDC->GetTextExtent(str); //返回字符串的尺寸
    13
    14 str.LoadString(IDS_HANFEI);
    15 pDC->TextOut(0,200,str);
    16
    17 pDC->BeginPath(); //开始路径层
    18 pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
    19 pDC->EndPath();
    20 pDC->SelectClipPath(RGN_AND); //路径层模式选择
    21
    22 for (int i = 0;i < 300;i += 10)
    23 {
    24 pDC->MoveTo(0,i);
    25 pDC->LineTo(300,i);
    26 pDC->MoveTo(i,0);
    27 pDC->LineTo(i,300);
    28 }
    29
    30 }
    31
    32 int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    33 {
    34 if (CView::OnCreate(lpCreateStruct) == -1)
    35 return -1;
    36
    37 // TODO: 在此添加您专用的创建代码
    38 CClientDC dc(this);
    39 TEXTMETRIC tm; // 系统字符量度
    40 dc.GetTextMetrics(&tm); // 获取当前字符尺寸
    41
    42 //CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight); // 插字符创建默认隐藏
    43
    44 //CBitmap bitmap; //局部变量不显示,在函数结束的时候析构
    45 bitmap.LoadBitmap(IDB_BITMAP1);
    46 CreateCaret(&bitmap); //创建位图插入符
    47 ShowCaret(); // 显示插字符
    48
    49 SetTimer(1,100,NULL);
    50
    51 return 0;
    52 }
    53
    54 void CTestView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
    55 {
    56 // TODO: 在此添加消息处理程序代码和/或调用默认值
    57 //回车需要处理
    58 CClientDC dc(this);
    59 CFont font;
    60 font.CreatePointFont(300,_T("华文行楷"),NULL); //字体初始化
    61 CFont *pOldfont = dc.SelectObject(&font);
    62 TEXTMETRIC tm;
    63 dc.GetTextMetrics(&tm);
    64 if(0x0d == nChar) //回车处理
    65 {
    66 m_strLine.Empty(); //字符串清空
    67 m_ptOrigin.y += tm.tmHeight;
    68 }
    69 else if (0x08 == nChar) //退格键处理
    70 {
    71 COLORREF clr = dc.SetTextColor(dc.GetBkColor());
    72 dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
    73 m_strLine = m_strLine.Left(m_strLine.GetLength() - 1);
    74 dc.SetTextColor(clr);
    75 }
    76 else
    77 {
    78 m_strLine.Insert(m_strLine.GetLength(),nChar);
    79 }
    80 CSize sz = dc.GetTextExtent(m_strLine);
    81
    82 CPoint pt;
    83 pt.x = m_ptOrigin.x + sz.cx;
    84 pt.y = m_ptOrigin.y;
    85
    86 SetCaretPos(pt);
    87 dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine); //输出
    88
    89 dc.SelectObject(pOldfont); //还原字体
    90
    91 CView::OnChar(nChar, nRepCnt, nFlags);
    92 }
    93
    94 void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
    95 {
    96 // TODO: 在此添加消息处理程序代码和/或调用默认值
    97
    98 CView::OnLButtonDown(nFlags, point);
    99 m_strLine.Empty(); //光标换位置,字符串清空
    100 m_ptOrigin = point;
    101 SetCaretPos(point); //定位新光标位置
    102 }
    103
    104 void CTestView::OnTimer(UINT_PTR nIDEvent) //nIDEvent定时器标识
    105 {
    106 // TODO: 在此添加消息处理程序代码和/或调用默认值
    107 m_nWidth += 5;
    108
    109 CClientDC dc(this);
    110 TEXTMETRIC tm;
    111 dc.GetTextMetrics(&tm);
    112 CRect rect;
    113 rect.left = 0;
    114 rect.top = 200;
    115 rect.right = m_nWidth;
    116 rect.bottom = rect.top + tm.tmHeight;
    117
    118 dc.SetTextColor(RGB(255,0,0)); //字体变色滚动输出
    119 CString str;
    120 str.LoadString(IDS_HANFEI);
    121 dc.DrawText(str,rect,DT_LEFT);
    122
    123 rect.top = 150;
    124 rect.bottom = rect.top + tm.tmHeight;
    125 dc.DrawText(str,rect,DT_RIGHT);
    126
    127 CSize sz = dc.GetTextExtent(str);
    128 if (m_nWidth > sz.cx)
    129 {
    130 m_nWidth = 0;
    131 dc.SetTextColor(RGB(0,255,0));
    132 dc.TextOut(0,200,str);
    133 }
    134
    135
    136 CView::OnTimer(nIDEvent);
    137 }

     

  • 相关阅读:
    协议(五)-从电报机到智能手机
    协议(四)-通信发展史
    NDK历史版本
    android onKeyDown
    设计模式
    Android获取系统时间的多种方法
    USB 3.0规范中译本 第5章 机械结构
    ES6新特性
    08_SQLyog图形化工具介绍
    07_聚合函数,分组查询&limit关键字
  • 原文地址:https://www.cnblogs.com/quantumplan/p/2351910.html
Copyright © 2011-2022 走看看