您的位置:首页 > 编程语言 > C语言/C++

孙鑫vc++学习(vs2008)笔记之第五课文字处理程序

2012-02-14 22:33 483 查看
1.字体的信息:字体的高度 = 升序的高度 + 降序的高度

View Code

void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: 在此处为本机数据添加绘制代码
CString str(_T("河南科技大学"));
pDC->TextOut(50,50,str);

CSize sz = pDC->GetTextExtent(str);   //返回字符串的尺寸

str.LoadString(IDS_HANFEI);
pDC->TextOut(0,200,str);

pDC->BeginPath();       //开始路径层
pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
pDC->EndPath();
pDC->SelectClipPath(RGN_AND);  //路径层模式选择

for (int i = 0;i < 300;i += 10)
{
pDC->MoveTo(0,i);
pDC->LineTo(300,i);
pDC->MoveTo(i,0);
pDC->LineTo(i,300);
}

}

int CTestView::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);   // 插字符创建默认隐藏

//CBitmap bitmap;                    //局部变量不显示,在函数结束的时候析构
bitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap);             //创建位图插入符
ShowCaret();                // 显示插字符

SetTimer(1,100,NULL);

return 0;
}

void CTestView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//回车需要处理
CClientDC dc(this);
CFont font;
font.CreatePointFont(300,_T("华文行楷"),NULL);  //字体初始化
CFont *pOldfont = dc.SelectObject(&font);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if(0x0d == nChar)      //回车处理
{
m_strLine.Empty();        //字符串清空
m_ptOrigin.y += tm.tmHeight;
}
else if (0x08 == nChar)  //退格键处理
{
COLORREF clr = dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
m_strLine = m_strLine.Left(m_strLine.GetLength() - 1);
dc.SetTextColor(clr);
}
else
{
m_strLine.Insert(m_strLine.GetLength(),nChar);
}
CSize sz = dc.GetTextExtent(m_strLine);

CPoint pt;
pt.x = m_ptOrigin.x + sz.cx;
pt.y = m_ptOrigin.y;

SetCaretPos(pt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);   //输出

dc.SelectObject(pOldfont);           //还原字体

CView::OnChar(nChar, nRepCnt, nFlags);
}

void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

CView::OnLButtonDown(nFlags, point);
m_strLine.Empty();       //光标换位置,字符串清空
m_ptOrigin = point;
SetCaretPos(point);      //定位新光标位置
}

void CTestView::OnTimer(UINT_PTR nIDEvent)  //nIDEvent定时器标识
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_nWidth += 5;

CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CRect rect;
rect.left = 0;
rect.top = 200;
rect.right = m_nWidth;
rect.bottom = rect.top + tm.tmHeight;

dc.SetTextColor(RGB(255,0,0));          //字体变色滚动输出
CString str;
str.LoadString(IDS_HANFEI);
dc.DrawText(str,rect,DT_LEFT);

rect.top = 150;
rect.bottom = rect.top + tm.tmHeight;
dc.DrawText(str,rect,DT_RIGHT);

CSize sz = dc.GetTextExtent(str);
if (m_nWidth > sz.cx)
{
m_nWidth = 0;
dc.SetTextColor(RGB(0,255,0));
dc.TextOut(0,200,str);
}

CView::OnTimer(nIDEvent);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: