掌握CDC的文字处理程序的编写,如何产生自定义字体和自定义插入符,熟悉对CString类的使用。
通过对卡拉OK程序的编写,讲解定时器的使用和DrawText函数的巧妙运用。讲解如何使用CDC的裁减功能。
创建插入符
int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 CreateSolidCaret(20,100); ShowCaret(); return 0; }
结果图:
问题:光标太大,应该随着字体变化
字体的信息
基线以上到最高点叫升序的高度,基线以下到最低点叫做降序的高度
字体的高度=升序的高度+降序的高度
当回车输入下一行文字时,才不会覆盖上一行的文字
调整插入符大小
int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics(&tm); CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight); ShowCaret(); return 0; }
在屏幕上显示文字
void CTextView::OnDraw(CDC* pDC) { CTextDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 //CString str("杨宇晴"); CString str; str="武建朋"; //输出到屏幕上,第一个参数x坐标,第二个参数y坐标 pDC->TextOut(50,50,str); }
问题点:找字符串资源
点击Text.rc
通过ID加载字符串资源
void CTextView::OnDraw(CDC* pDC) { CTextDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 //CString str("杨宇晴"); CString str; str="武建朋"; //输出到屏幕上,第一个参数x坐标,第二个参数y坐标 pDC->TextOut(50,50,str); str.LoadString(IDS_YANGYUQING);//自定义ID值 pDC->TextOut(0,200,str); }