2017.5.13插入符

来源:互联网 发布:zeroclipboard.js下载 编辑:程序博客网 时间:2024/06/05 10:47

我们知道打开TXT文本后有一个光标闪烁,意味着你可以从这里输入文本。现在我们利用MFC创建这个光标(字符光标和位图光标)。
首先在View窗口下创建一个WM_CREATE消息事件

int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct) {    if (CView::OnCreate(lpCreateStruct) == -1)        return -1;    // TODO: Add your specialized creation code here    return 0;}

然后利用CreateSolidCaret(int nWidth ,int nHeight)函数来创建插入符。第一个参数是指定插入符的宽度,第二个参数是指定插入符的高度。当这两个参数为零时,系统默认的插入符的宽度和高度为系统窗口边界的宽度和高度。而系统窗口边界的宽度和高度可以通过GetSystemMetrics函数获得。
要注意的是插入符一旦被创建就立即隐藏了,需要调用ShowCaret函数来显示这个插入符。

int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct) {    if (CView::OnCreate(lpCreateStruct) == -1)        return -1;    // TODO: Add your specialized creation code here    /****************wjl************************        <*字处理程序中的插入符*>    CClientDC dc(this);    TEXTMETRIC tm;    dc.GetTextMetrics(&tm);    CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);    ShowCaret();    *****************wjl***********************/    return 0;}

TEXTMETRIC是一个结构体,里面包含了文本的一些属性,比如字体的两个高度 升序 tmAscent 和降序tmDescent,平均高度之类的。
TEXTMETRIC结构体
为了使插入符能随着字体的大小改变。我们首先要获得字体的大小,这时需要一个函数GetTextMetrics,参数是一个结构体的指针。这里将TEXTMETRIC结构体的对象tm传递进去。


接下来是创建位图插入符,就是用一个位图来代表光标,一闪一闪的(不理解为啥要这样。。。)
这里的bitmap要放在CTextView中,作为全局变量。

class CTextView : public CView...private:    CBitmap bitmap;

首先要创建一个位图,再通过bitmap.LoadBitmap(IDB_BITMAP1);调用位图。

int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct) {    if (CView::OnCreate(lpCreateStruct) == -1)        return -1;    // TODO: Add your specialized creation code here    /****************wjl************************        <*位图的插入符*>    *****************wjl***********************/    CClientDC dc(this);    bitmap.LoadBitmap(IDB_BITMAP1);    CreateCaret(&bitmap);    ShowCaret();    return 0;}

函数CreateCaret可以创建位图的插入符,参数是一个位图指针。

0 0