2017.5.13插入符

本文介绍了如何在MFC应用程序中创建字符光标和位图光标,包括使用CreateSolidCaret函数创建与字体大小相匹配的插入符,以及如何加载位图并使用CreateCaret函数创建位图光标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道打开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可以创建位图的插入符,参数是一个位图指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangxiaobei2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值