第5课 文本编程
来源:互联网 发布:lomo拍立得知乎 编辑:程序博客网 时间:2024/06/01 17:01
1.CWnd::CreateSolidCaret创建插入符, ShowCaret()显示插入符。
GetTextMetrics(),获得当前字体的一些信息。 CWnd::CreateCaret()创建图象插入符
bitmap.LoadBitmap(IDB_BITMAP1);// 此处的bitmap为成员变量!!!
CreateCaret(&bitmap);
ShowCaret();
TEXTMETRIC tm;// 字体结构体
dc.GetTextMetrics(&tm);//
m_ptOrigin.y+=tm.tmHeight;// 获得字体高度。
2.VC中CString::LoadString(ID 号),比较方便。
3.路径层的概念:有两种方法创建路径层:
(1 )
pDC->BeginPath();
pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
pDC->EndPath();
pDC->SelectClipPath(RGN_DIFF);
(2)
CSize sz=pDC->GetTextExtent(str);
CRgn rn;
rn.CreateRectRgn(0,50,sz.cx,sz.cy);
pDC->SelectClipRgn(&rn,RGN_DIFF);
路径层有什么作用?可以保护我们先前的文本或者图像不被后来画的覆盖。
4.在View 上输入文字的步骤。
CFont font;// 创建字体对象
font.CreatePointFont(300," 华文行楷 ",NULL);//设置
CFont *pOldFont=dc.SelectObject(&font);// 将字体选择到 DC中
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+=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);//将原先的字体选择回去。
5.模拟卡啦OK 变色的步骤。
(1)设置定时器
(2)在定时器中加入如下代码
//DEL m_nWidth+=5;// 此为view的成员变量,初始值为 0
//DEL
//DEL
//DEL CClientDC dc(this);
//DEL TEXTMETRIC tm;
//DEL dc.GetTextMetrics(&tm);
//DEL CRect rect;
//DEL rect.left=0;
//DEL rect.top=200;
//DEL rect.right=m_nWidth;
//DEL rect.bottom=rect.top+tm.tmHeight;// 此长方形的长度随着定时器的触发,逐渐增大
//DEL
//DEL dc.SetTextColor(RGB(255,0,0));
//DEL CString str;
//DEL str.LoadString(IDS_WEIXIN);
//DEL dc.DrawText(str,rect,DT_LEFT); 此函数的作用是将字符串输出到长方形中,但如果字符串的长度超过长方形的长度,多余的字符将被截断
//DEL
//DEL rect.top=150;
//DEL rect.bottom=rect.top+tm.tmHeight;
//DEL dc.DrawText(str,rect,DT_RIGHT);
//DEL
//DEL CSize sz=dc.GetTextExtent(str); 获得字符串的长度
//DEL if(m_nWidth>sz.cx) 当长方形的长度大于字符串的长度后,将其重新归 0
//DEL {
//DEL m_nWidth=0;
//DEL dc.SetTextColor(RGB(0,255,0));
//DEL dc.TextOut(0,200,str);
//DEL }
//DEL
//DEL CView::OnTimer(nIDEvent);
6.SetTimer也可以用回调函数来操作,但并不方便。以下是步骤
(1 ) 在 View的OnCreate 消息响应函数中: SetTimer(1,1000,Timer2Proc);
(2 ) 回调函数的实现:
void CALLBACK EXPORT Timer2Proc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT nIDEvent, // timer identification
DWORD dwTime // system time
)
{
// MessageBox((((CMainFrame *)AfxGetMainWnd())->m_hWnd),"ddfaf","weixin",0);
;
CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;// 获得MainFrame的指针
CTextView *pView=(CTextView *)pMain->GetActiveView();// 获得view的指针
CClientDC dc(pView);// 构造DC
dc.TextOut(333,222,"hello world");}// 我们可以看出,使用回调函数时要获得窗口或者 APP的指针,给我们的操作带来麻烦。并不方便。
0 0
- 第5课 文本编程
- 孙鑫VC++第5章文本编程
- 【Unix编程艺术】第5章 文本化
- [连载]VC++深入详解(孙鑫视频)第5章-文本编程 笔记
- 《VC++深入详解》学习笔记[4]——第5章 文本编程
- 利用随机单词生成文本(《编程珠玑》第15章)
- Python编程入门-第11章 案例研究:文本统计
- 文本编程
- 文本编程
- 文本编程
- 文本编程
- 文本编程
- 文本编程
- 文本编程
- 文本编程
- 文本编程
- 孙鑫VC++讲座笔记-(5)文本编程
- 孙鑫VC++讲座笔记-(5)文本编程
- Apache Phoenix的Array类型
- Nginx源代码分析之群惊问题(十七)
- oracle.jbo.RowInconsistentException: JBO-25014: Another user has changed the row with primary key or
- 第4课 简单绘图
- C#之运算符重载学习案例
- 第5课 文本编程
- Maven基础配置—上传jar包到私服
- 主线程消息循环机制本质
- 比较有用的正则
- 第6课 菜单
- Alphabet旗下Nest重组:开发团队并入谷歌
- SpringMVC项目接收Json数据报406错误
- 第7课 对话框1
- 生活锁率