在字符串的指定位置添加字符

常用的文本处理程序有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是字体信息的部分示意图。


知秋君
上一篇 2024-08-04 12:48
下一篇 2024-08-04 12:12

相关推荐