有些朋友反映视频看不清楚,下面提供两个视频源文件下载地址,非常清晰:
DBANK网盘下载地址:孙鑫C++视频教程(全20讲).rar
VeryCD(电驴)资源地址:《孙鑫VC++视频教程 20集全》[RMVB]
注:有些朋友反映在线观看的视频看不清楚,而提供的DBANK下载地址和电驴下载地址下载速度又太慢。如果大家有相似情况,可以在本文下方评论中留下邮箱地址,注明“需要C++学习视频孙鑫20集教程,邮箱地址xxxx@xxx”。我会在看到评论后将视频给大家发送到邮箱。
有些朋友反映视频看不清楚,下面提供两个视频源文件下载地址,非常清晰:
DBANK网盘下载地址:孙鑫C++视频教程(全20讲).rar
VeryCD(电驴)资源地址:《孙鑫VC++视频教程 20集全》[RMVB]
注:有些朋友反映在线观看的视频看不清楚,而提供的DBANK下载地址和电驴下载地址下载速度又太慢。如果大家有相似情况,可以在本文下方评论中留下邮箱地址,注明“需要C++学习视频孙鑫20集教程,邮箱地址xxxx@xxx”。我会在看到评论后将视频给大家发送到邮箱。
在听到BeginPath()和EndPath()部分时,一直听着孙鑫老师说的是“路进程”,非常不理解,在网上也没搜到关于“路进程”的结果。后来,仔细想了想,才知道孙鑫老师可能说的是“路径层”O(∩_∩)O
希望大家看的时候能明白。
创建插入符
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CreateSolidCaret(tm.tmAveCharWidth / 8, tm.tmHeight);
ShowCaret();
CreateSolidCaret(int nWidth, int nHeight); —— 如果这两个参数设为0,那么将被设置成系统定义的宽度和高度
GetSystemMetrics —— 获得系统定义的一些信息,比如系统定义的插入符的宽高
GetTextMetrics —— 获得设备描述表里关于文本的维度信息
创建图形插入符 —— CreateCaret(CBitmap * pBitmap)
m_caretBitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&m_caretBitmap);
ShowCaret();
CString类
CString是个类,一般写法是CString str(“renrenstudy”); —— CString str = “renrenstudy”; ——为什么能够这么写 —— CString类重载了等号
str.LoadString(UINT nID); —— 加载一个字符串的资源
GetTextExtent(const CString& str) —— 获取字符串高度和宽度 —— 返回一个CSize类型的对象
GetTextMetrics 和 GetTextExtent 区别?—— GetTextMetrics得到的是所使用字体的维度信息,GetTextExtent得到的是特定字符串所占用的区域尺寸。
路径层 —— 可以理解为图层的概念 —— 为了在VC++中更好的控制绘图区域而设置的一个概念
BeginPath —— 打开路径层 EndPath —— 关闭路径层
SelectClipPath(int nMode); —— nMode的取值:RGN_AND RGN_COPY RGN_DIFF RGN_OR RGN_XOR
这些取值该怎么理解呢 —— 设定的路径与绘图区域的运算 —— 比如RGN_DIFF,就是将路径从绘图区域中排除 —— 又比如RGN_AND,将路径与绘图区域取交集
pDC->BeginPath();
pDC->Rectangle(50, 50, , 50 + sz.cy);
pDC->EndPath();
pDC->SelectClipPath(RGN_DIFF);
for(int i=0; i<300; i+=10){
pDC->MoveTo(0, i);
pDC->LineTo(300, i);
pDC->MoveTo(i, 0);
pDC->LineTo(i, 300);
}
上面这个实现的就是在一个网格中,有一块区域显示的是空白(默认空白画刷)。
设置插入符位置
SetCaretPos(point); —— 将插入符设置到某个点的位置 —— 比如将这个函数放在鼠标左键按下消息中,那么就可以实现鼠标点击时插入符位置改变。
CString常用函数总结
str.Empty(); —— 清空某一个CString对象
str.GetLength(); —— 获取字符串的长度
str.Left(int nCount) —— 获取从字符串最左端开始的长度为nCount的子字符串
文本输入中退格键的实现
原理 —— 先用背景色的文字再输出一遍,这样就相当于在屏幕上擦除了原来的文本 —— 然后使取原文本长度-1的文本,再用原色输出 ——
这样显示效果上就是字符串被删了一个
COLORREF clr = dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrigin.x, m_ptOrigin.y, m_textInput);
m_textInput = m_textInput.Left(m_textInput.GetLength() – 1);
dc.SetTextColor(clr);
dc.TextOut(m_ptOrigin.x, m_ptOrigin.y, m_textInput);
插入符随着文本输入而移动
CSize sz = dc.GetTextExtent(m_textInput);
CPoint pt;
pt.x = m_ptOrigin.x + sz.cx;
pt.y = m_ptOrigin.y;
SetCaretPos(pt);
字体的创建
CFont font;
font.CreatePointFont(120, “微软雅黑”, NULL);
CFont * pOldFont = dc.SelectObject(&font);
CEditView 和 CRichEditView —— 让View类直接从这两个类派生出来,就已经具有了初步的文本编辑功能。
字体平滑变色 —— 字幕效果
DrawText 为何能实现平滑变色 —— 在于第二个参数:一个矩形区域 —— 超过矩形区域的不可见 —— 因此通过不断修改矩形区域的大小,即可平滑渐变。
设置个定时器,然后在定时器处理中:
m_nWidth += 5;
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CRect rect;
rect.top = 50;
rect.left = 50;
rect.bottom = rect.top + tm.tmHeight;
rect.right = m_nWidth;
CString str;
str.LoadString(IDS_RENRENSTUDY);
dc.SetTextColor(RGB(255, 0, 0));
dc.DrawText(str, &rect, DT_LEFT);