【VC++】004插入符

这一周事比较多,又是上课,又是学车的,继续学习...

1.创建文本插入符

在程序中想创建插入符,可以利用CWnd类的CreateSolidCaret()函数完成:

void CreateSolidCaret( int nWidth, intnHeight );

其中,nWidth是插入符的宽度,nHeight则是高度;

创建一个MFC的工程,如Project3

在CProject3View类中创建一个响应函数OnCreate中

在函数中添加

//创建插入符
//CreateSolidCaret(20, 100);

//显示插入符
ShowCaret();

其中ShowCaret()函数是用来显示插入符的,因为插入符的初始是隐藏的

这时我们发现插入符的大小有点不正常,和我们平时在word里面看得不一样,那是因为我们设的宽度和高度不好,不过CDC类中的GetTextMetrics函数可以得到设备描述表中当前字体的度量信息;

BOOL GetTextMetrics( LPTEXTMETRIClpMetrics ) const;

函数的参数是TEXTMETRICD结构体的指针;

typedef struct tagTEXTMETRIC {  /* tm */
    int  tmHeight;
    int  tmAscent;
    int  tmDescent;
    int  tmInternalLeading;
    int  tmExternalLeading;
    int  tmAveCharWidth;
    int  tmMaxCharWidth;
    int  tmWeight;
    BYTE tmItalic;
    BYTE tmUnderlined;
    BYTE tmStruckOut;
    BYTE tmFirstChar;
    BYTE tmLastChar;
    BYTE tmDefaultChar;
    BYTE tmBreakChar;
    BYTE tmPitchAndFamily;
    BYTE tmCharSet;
    int  tmOverhang;
    int  tmDigitizedAspectX;
    int  tmDigitizedAspectY;
} TEXTMETRIC;

信息众多,不一一解释,字体的高度是tmHeight,平均宽度是tmAveCharWidth

将前面代码,加入如下代码:

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

其中,ShowCaret()每个插入符里面都需要,用来显示插入符的,CreateSolidCaret()中的高度和宽度是tm.tmAveCharWidth/8tm.tmHeight,宽度是tm.tmAveCharWidth/8是一个经验值,适合大众使用,当然,大家也可以试试别的;

结果如下:


2.创建图形插入符

【VC++】002使用画刷绘图中有了创建使用位图的说明,可以选择自己新建一个位图;

当然,也可以自己选择导入:

选择【insert】插入->【resource】资源会弹出个窗口,选择Bitmap,选择【import】引入即可实现:

然后贴入下面代码:

CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap);

//显示插入符
ShowCaret();

我们会发现没有反应,这是因为bitmap是一个局部变量,当函数执行完之后bitmap就析构了,所以将bitmap改为Project3View的成员变量:

private:
	CBitmap bitmap;


再次运行:

这样,图形插入符也就出来了,想要更漂亮,自己可以将位图做得漂亮点....

 

小工程可见:http://download.csdn.net/detail/xjm199/6778839

继续学习...o(∩_∩)o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值