• 孙鑫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 }

     

  • 相关阅读:
    图书管理系统---基于form组件和modelform改造添加和编辑
    Keepalived和Heartbeat
    SCAN IP 解释
    Configure Active DataGuard and DG BROKER
    Oracle 11gR2
    我在管理工作中積累的九種最重要的領導力 (李開復)
    公募基金公司超融合基础架构与同城灾备建设实践
    Oracle 11g RAC for LINUX rhel 6.X silent install(静默安装)
    11gR2 静默安装RAC 集群和数据库软件
    Setting Up Oracle GoldenGate 12
  • 原文地址:https://www.cnblogs.com/quantumplan/p/2351910.html
Copyright © 2020-2023  润新知