文本編程
5.1 插入符
插入符Caret用來提示用戶當前相應的位置。如果想要在程序中創(chuàng)建插入符,可以用CWnd類的CreateSolidCaret函數(shù)來完成,函數(shù)原型如下。
1 Void CreateSolidCaret(int nWidth,int nHeight);//兩個參數(shù)分別表示插入符的寬度和高度
在一個MFC的單文檔應用程序中,對文本的操作通常在View類中實現(xiàn),要在View窗口創(chuàng)建之后再創(chuàng)建一個插入符,需要使用OnCreate函數(shù)。插入符的寬度通常為當前設備表述表中字符的平均寬度的1/8,高度和字符高度相同。
01 int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
02 {
03 if (CView::OnCreate(lpCreateStruct) == -1)
04 return -1;
05 // TODO: Add your specialized creation code here
06 CClientDC dc(this);
07 TextMETRIC tm;
08 dc.GetTextMetrics(&tm);
09 CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
10 ShowCaret();
11 return 0;
12 }
5.2窗口重繪
View類窗口產生和重繪時都要調用OnDraw函數(shù)。
5.3字符輸入
1.消息捕獲
字符輸入屬于WM_CHAR消息,可以通過捕獲WM_CHAR消息來獲取鍵盤輸入信息。
2.應該在插入符的位置輸出鍵盤輸入信息,輸入之前需要先設定插入符位置,輸出的時候相應修改插入符位置,以便下次輸入輸出,在View類區(qū)域的任何位置點擊鼠標,設定插入符位置。
1 void CTextView::OnLButtonDown(UINT nFlags, CPoint point)
2 {
3 // TODO: Add your message handler code here and/or call default
4 m_ptOrigin=point;
5 SetCaretPos(point);
6 //SetCaretPos(m_ptSecond);一個類中同時只能有一個插入符
7 m_strLine.Empty();
8 CView::OnLButtonDown(nFlags, point);
9 }
3.回車與退行,字體
01 void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
02 {
03 // TODO: Add your message handler code here and/or call default
04 CClientDC dc(this); //設置字體
05 CFont font;
06 font.CreatePointFont(200,"華文楷體",NULL);
07 CFont *pOldFont=dc.SelectObject(&font);
08 TextMETRIC tm;
09 dc.GetTextMetrics(&tm);
10 if(0x0d==nChar)//回車
11 {
12 m_strLine.Empty();
13 m_ptOrigin.y+=tm.tmHeight;
14 }
15 else if(0x08==nChar)//退行
16 {
17 COLORREF clr=dc.SetTextColor(dc.GetBkColor());
18 dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
19 m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
20 dc.SetTextColor(clr);
21 }
22 else
23 {
24 m_strLine+=nChar;
25 }
相關推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |