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

 

posted @ 2012-02-14 22:33  飞向梦  阅读(509)  评论(0编辑  收藏  举报