VC++学习视频第5集 | 掌握CDC的文字处理程序的编写

有些朋友反映视频看不清楚,下面提供两个视频源文件下载地址,非常清晰:

DBANK网盘下载地址:孙鑫C++视频教程(全20讲).rar

VeryCD(电驴)资源地址:《孙鑫VC++视频教程 20集全》[RMVB]

注:有些朋友反映在线观看的视频看不清楚,而提供的DBANK下载地址和电驴下载地址下载速度又太慢。如果大家有相似情况,可以在本文下方评论中留下邮箱地址,注明“需要C++学习视频孙鑫20集教程,邮箱地址xxxx@xxx”。我会在看到评论后将视频给大家发送到邮箱。



13 thoughts to “VC++学习视频第5集 | 掌握CDC的文字处理程序的编写”

  1. 在听到BeginPath()和EndPath()部分时,一直听着孙鑫老师说的是“路进程”,非常不理解,在网上也没搜到关于“路进程”的结果。后来,仔细想了想,才知道孙鑫老师可能说的是“路径层”O(∩_∩)O

    希望大家看的时候能明白。

  2. 创建插入符

    CClientDC dc(this);

    TEXTMETRIC tm;

    dc.GetTextMetrics(&tm);

    CreateSolidCaret(tm.tmAveCharWidth / 8, tm.tmHeight);

    ShowCaret();

    CreateSolidCaret(int nWidth, int nHeight); —— 如果这两个参数设为0,那么将被设置成系统定义的宽度和高度

    GetSystemMetrics —— 获得系统定义的一些信息,比如系统定义的插入符的宽高

    GetTextMetrics —— 获得设备描述表里关于文本的维度信息

  3. 创建图形插入符 —— CreateCaret(CBitmap * pBitmap)

    m_caretBitmap.LoadBitmap(IDB_BITMAP1);

    CreateCaret(&m_caretBitmap);

    ShowCaret();

  4. CString类

    CString是个类,一般写法是CString str(“renrenstudy”); —— CString str = “renrenstudy”; ——为什么能够这么写 —— CString类重载了等号

    str.LoadString(UINT nID); —— 加载一个字符串的资源

  5. GetTextExtent(const CString& str) —— 获取字符串高度和宽度 —— 返回一个CSize类型的对象

    GetTextMetrics 和 GetTextExtent 区别?—— GetTextMetrics得到的是所使用字体的维度信息,GetTextExtent得到的是特定字符串所占用的区域尺寸。

  6. 路径层 —— 可以理解为图层的概念 —— 为了在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);

    }

    上面这个实现的就是在一个网格中,有一块区域显示的是空白(默认空白画刷)。

  7. 设置插入符位置

    SetCaretPos(point); —— 将插入符设置到某个点的位置 —— 比如将这个函数放在鼠标左键按下消息中,那么就可以实现鼠标点击时插入符位置改变。

  8. CString常用函数总结

    str.Empty(); —— 清空某一个CString对象

    str.GetLength(); —— 获取字符串的长度

    str.Left(int nCount) —— 获取从字符串最左端开始的长度为nCount的子字符串

  9. 文本输入中退格键的实现

    原理 —— 先用背景色的文字再输出一遍,这样就相当于在屏幕上擦除了原来的文本 —— 然后使取原文本长度-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);

  10. 插入符随着文本输入而移动

    CSize sz = dc.GetTextExtent(m_textInput);

    CPoint pt;
    pt.x = m_ptOrigin.x + sz.cx;
    pt.y = m_ptOrigin.y;
    SetCaretPos(pt);

  11. 字体的创建

    CFont font;

    font.CreatePointFont(120, “微软雅黑”, NULL);

    CFont * pOldFont = dc.SelectObject(&font);

  12. CEditView 和 CRichEditView —— 让View类直接从这两个类派生出来,就已经具有了初步的文本编辑功能。

  13. 字体平滑变色 —— 字幕效果

    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);

发表评论

邮箱地址不会被公开。