2025年文本编程之插入符

文本编程之插入符常用的文本处理程序有 word 记事本 IDE 集成开发环境等 它们都可以文本的编辑 鼠标点击之处都有一条闪烁的竖线 这个竖线就是插入符 Caret 该插入符用于提示用户输入文字 下面就演示插入符的应用实例 接口函数 在 Cwindow 成员中有一个 Caret Methods 在这个 Caret

大家好,我是讯享网,很高兴认识大家。

常用的文本处理程序有word,记事本、IDE集成开发环境等,它们都可以文本的编辑,鼠标点击之处都有一条闪烁的竖线,这个竖线就是插入符(Caret)。该插入符用于提示用户输入文字,下面就演示插入符的应用实例。


接口函数


在Cwindow成员中有一个Caret Methods,在这个Caret Methods中介绍了插入符的创建和使用,其接口函数如下:

//方法1:Creates a solid rectangle for the system caret. BOOL CreateSolidCaret(int nWidth,int nHeight) throw(); //方法2:Creates a gray rectangle for the system caret. BOOL CreateGrayCaret(int nWidth,int nHeight) throw(); //方法3:Creates a new shape for the system caret. BOOL CreateCaret(HBITMAP pBitmap) throw(); //Hides the system caret. BOOL HideCaret( ) throw(); //Displays the system caret. BOOL ShowCaret( ) throw();

讯享网



讯享网

插入符需要在窗口上显示,在单文档工程中有两个窗口,一个是框架类窗口和视类窗口,我们应该在视类窗口上进行操作,当创建了视类窗口后,就可以创建和显示插入符了。我们需要手动添加WM_CREATE消息响应函数,具体代码如下:

讯享网int CMFC_TestView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; CreateGrayCaret(3,20);//创建 ShowCaret();//显示 return 0; }

                          图1 插入符运行效果

为了插入符能够跟随文本字体大小而发生变化,我们需要获得设备描述表中字体结构。在CDC类中有个GetTextMertics成员函数可以得到设备描述表中字体信息,其函数声明如下:

BOOL GetTextMetrics(LPTEXTMETRIC lpMetrics) const;

其中,入参是TEXTMETRIC结构的指针,该结构包含了字体基本信息,但是常见有用信息就只有几个,具体结构体如下:

讯享网typedef struct tagTEXTMETRIC { LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; TCHAR tmFirstChar; TCHAR tmLastChar; TCHAR tmDefaultChar; TCHAR tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet; } TEXTMETRIC;
其中tmHeight是字符高度,tmHeight = tmAscent + tmDescent, tmAveCharWidth是平均宽度,因为每个字符宽度都不同,只有一个平均宽度,如图2是字体信息的部分示意图。
小讯
上一篇 2025-01-28 10:58
下一篇 2025-03-21 22:09

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/36518.html