孙鑫视频文本编程

首先来创建一个插入符,由于是在窗口创建完成之后才有的,所以在视图类里要加一个
消息WM_CREATE。用函数CreateSolidCaret(20,100),当然默认是隐藏的,还得用
ShowCaret()显示它。当然(20,100)这样产生的插入符好宽啊,丑.....
插入符的尺寸应该根据当前字体的大小来确定的,比如在word中那样。
根据我们当前设备描述表中的字体的大小来改变。首先我们要获取当前设备描述表中字体,即文本的信息。当然,又是用一个函数GetTextMetrics(LPTEXTMETRIC lpMetrics) const;
Retrieves the metrics for the current font using the attribute device context.
用属性设备描述表获得当前字体的度量(怎么感觉我翻译的比词霸还烂,囧)
接下来解释一下怎么用这个函数
首先介绍一下
字体的信息
gh基线往上叫做升序tmAscent的高度,往下叫降序tmDescent的高度,升序的高度加上降序的高度等于整个字体的高度。我们输入下一行文字的时候才不会覆盖掉上一行


我们先得构造一个DC
CClientDC dc(this);
再定义一个
TEXTMETRIC tm;
利用dc去调用
dc.GetTextMetrics(&tm)
字体宽度可以这样设定tm.tmAveCharWidth/8(除以8是孙老师实验出来的),高度:tm.tmHeight.它两可以直接作为CreateSolidCaret的参数。


那么图形的插入符怎么创建呢?
我们用一个函数CWnd::CreateCaret
void CreateCaret(CBitmap *pBitmap);
Creates a new shape for the system caret and claims ownership of the caret
The bitmap must have previously been created by the CBitmap::CreateBitmap member function, theCreateDIBitmap Windows function, or the CBitmap::LoadBitmap member function. 
函数创建一个新的系统图形插入符,。。。。(这句咋翻译啊),位图必须用CBitmap::CreateBitmap成员函数,theCreateDIBitmap windows函数,或者CBitmap::LoadBitmap 成员函数在使用CreateCaret之前创建好


CreateCaret automatically destroys the previous caret shape, if any, regardless of which window owns the caret. Once created, the caret is initially hidden. To show the caret, the ShowCaret member function must be called.
如果有必要,不管插入符属于哪个窗口,CreateCaret将自动销毁之前的插入符。一旦创建了,插入符将默认隐藏,必须调用ShowCaret函数来显示。
The system caret is a shared resource. CWnd should create a caret only when it has the input focus or is active. It should destroy the caret before it loses the input focus or becomes inactive.
系统插入符是一个共享资源,Cwnd应该仅仅在他拥有输入焦点或激活的时候创建它。当丢失输入焦点或没被激活的时候, 插入符应该被销毁。


代码:
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap);
ShowCaret();
但是我们发现什么都没有
因为我们的bitmap是局部的对象。当OnCreate执行完成之后它将发生析构
所以我们要把CBitmap bitmap定义为CTextView的成员变量,这时候就有了,一闪一闪的。呵呵


下面我们要在我们的窗口上输出一串文字
我们可以用TextOut函数。窗口重绘的时候就会被擦除
为了让我们的文字保存起来,一直显示。我们就可以在OnDraw函数中进行处理
每次窗口重绘都会调用OnDraw这个函数,把处理过程放里边,就会一直显示了。


先介绍一个类Cstring,跟C++string类似,可变长度,自动改变大小,而不是字符数组那种自己定义数组大小。
重载了普通操作符。

举例吧:
CString str("老婆我爱你!");
pDC->TextOut(0,0,str);
窗口就输出文字了。而且由于是在OnDraw函数里的函数,所以文字会一直显示。

还有一个成员函数LoadString
他的作用就是直接根据ID来调用文字。
  例如           
先在资源视图里的String table下得字串表里定义好了自己的
  CString str2;
str2.LoadString(IDS_ZIDONGQING);
pDC->TextOut(100,100,str2);


下面介绍一个函数


CSize sz=pDC->GetTextExtent(str2);//获取文本所占高度宽度,然后返回一个CSize值。
48:40
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值