• 插入符的创建


    本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6218597.html

    1、插入符(Caret)的创建与显示

          插入符用于标定输入信息位置的闪烁竖线,MFC中创建插入符可以直接使用CWnd类的CreateSolidCaret()函数来完成,其函数原型为void CreateSolidCaret(int nWidth,int nHeight),两个参数分别表示插入符的宽度和高度。

          新建一个工程,添加WM_CREATE消息的响应函数OnCreate(),添加创建插入符函数,运行,结果并没有出现插入符。因为我们所创建的插入符在初始时是隐藏状态,如需显示还要调用ShowCaret()函数进行显示。结果如图示,插入符已经显示出来了。

    代码:

     

     

    2、插入符的格式设置

      插入符的格式即其大小主要是由当前文本格式决定,因此需要获取当前文本格式。调用CDC类的GetTextMetrics成员函数可以获得设备描述表中当前字体的度量信息,其参数是一个TEXTMETRIC结构体类型的变量,计算插入符的高度和宽度用的是字体的高度和平均宽度,这两个正是结构体的成员tmMaxCharWidth和tmAveCharWidth。

    代码如下:

    //创建设备描述表
    CClientDC dc(this);
    //定义文本信息结构体变量
    TEXTMETRIC tm;
    //获得设备描述表中的文本信息
    dc.GetTextMetrics(&tm);
    //根据字体大小创建合适的插入符
    CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
    //显示已创建的插入符
    ShowCaret();

    运行,结果如图所示:

    备注:字体的平均宽度除以8得到插入符的宽度只是一个经验值。

    3、创建图形插入符

    要创建图形插入符,可以用CreateCaret函数实现,首先要创建一个位图资源,在View菜单下打开Resource View,在资源视图的资源文件上右击选择Add Resource,选择Bitmap->New,利用Pencil Tool工具在位图面板进行绘制,如图示:

    代码如下:

    CBitmap bitmap;
    bitmap.LoadBitmapW(IDB_BITMAP1);
    CreateCaret(&bitmap);
    ShowCaret();

      运行发现并没有出现预期结果,为什么呢?因为bitmap是一个局部变量,当OnCreate函数执行完成后,此bitmap对象会发生析构。通常,与资源关联的对象在析构时会把与之关联的资源销毁,于是就没有出现位图插入符。解决方法是将局部位图对象修改为CTextView类的成员变量,将其定义放到CTextView的头文件中。

    运行,结果如图所示: 

     

      说明图形插入符已经实现了。

    如果有疑问,可以联系giserdev@163.com,更多内容请参考:http://www.cnblogs.com/mxbs/,技术交流请加QQ群:586571286。

  • 相关阅读:
    28SQL 撤销索引、表以及数据库
    常见漏洞利用讲解
    6JavaScript 输出
    29_SQL ALTER TABLE 语句
    【首发】入门必看,性能测试指标详解,小白从零入门性能测试
    使用阿里云oss,在小程序端部分图片有时候显示,有时候不显示
    (0 , _auth.default) is not a function的问题
    uniapp开发小程序onReachBottom只触发一次
    Httprunner环境搭建
    4、vite创建vue项目
  • 原文地址:https://www.cnblogs.com/mxbs/p/6218597.html
Copyright © 2020-2023  润新知