VC文本编程

VC创建插入符


创建普通插入符
1.用此函数


CWnd::CreateSolidCaret


 
void CreateSolidCaret(
   int nWidth,
   int nHeight 
);
参数:
nWidth
指定插入符号的宽度(以逻辑单位)。 如果此参数是0,则宽度设置为SYSTEM定义的窗口边框宽度。


nHeight
指定插入符号的高度(以逻辑单位)。 如果此参数是0,则个高度设置为SYSTEM定义的窗口边框高度。
2.因为 调用上面的函数后,插入符默认是隐藏的,所以还要调用 
ShowCaret()

就可以 显示插入符了


一些字体信息

根据字体信息,调整一个合适的插入符.
BOOL GetTextMetrics(
   LPTEXTMETRIC lpMetrics 
) const;
//看第一个参数知道 此函数 会把 字体信息填入一个TEXTMETRIC的结构体中  我们调用的时候只需创建一个
TEXTMETRIC的对象然后 将地址传入此函数中.
TEXTMETRIC中有两个我们 可以用到的数据成员
tmAveCharWidth;//字体的平均宽度 .
tmHeight;     //字体的高度

而后 根据上面的信息 
我们 创建 可以创建一个 高度 和 宽度适合的 插入符  
见实例代码 : 
CClientDC dc(this); //创建 当前窗口的 设备句柄
TEXTMETRIC tx;    //定义这个结构体对象
dc.GetTextMetrics(&tx);//获取 字体信息
CreateSolidCaret(tx.tmAveCharWidth/8,tx.tmHeight);//为什么 插入符的第一个参数 是平均宽度/8 记住就行了.

ShowCaret();//显示插入符


获取字符串的 总长度和宽度

CSize GetTextExtent(
   LPCTSTR lpszString,
   int nCount 
) const;
CSize GetTextExtent(
   const CString& str 
) const;
 

创建图形插入符
void CWnd::CreateCaret(
   CBitmap* pBitmap 
); //看此函数 应该就懂了 传递个 CBitmap对象的地址给他 然后 ShowCaret()就OK了 CBitmap bmp bmp.LoadBitmap(资源ID号); CreateCaret(&bmp); ShowCaret();
路径层
路径层:路径的概念 就好像是当年割地一样 在地域上划分了界限,界限之内是各地的地盘。别人不能侵犯.
MFC中 用BeginPath和EndPath函数 来实现,先用BeginPath打开路劲层 ,然后调用写绘图函数 例如画点 园 矩形 .最后调用EndPath关闭路劲层.
例:
pDC->BeginPath();




pDC->Rectangle(0,0,300,300);
pDC->EndPath();


裁剪区域
裁剪区域 就是可以 绘图的区域 例如 一个客户区 就是一个大的裁剪区域 .
SelectClipPath()通过参数设置把当前的一个裁剪区域和路劲层进行一个互操作.


RNG_DIFF:新的裁剪区域=当前的裁剪区-路劲层的区 //结果是路劲层 这块不能画图
RNG_AND:新的裁剪区域=当前裁剪区和路劲层的区域的交集


设置字体
首先定义一个CFont对象 然后调用 
BOOL CreatePointFont(
   int nPointSize,
   LPCTSTR lpszFaceName,
   CDC* pDC = NULL 
);
第一个字体的大小,选用的 字体名 例如:华文行楷   最后一个默认为NULL 如果不传递表示使用 屏幕设备描述表进行字体的转换
最后 载入设备句柄 就行 SelectObject();
DrawText:可以再某矩形范围内输出文字
定时器:
UINT_PTR SetTimer(
   UINT_PTR nIDEvent,
   UINT nElapse,
   void (CALLBACK* lpfnTimer
)
nIDEvent
计时器的ID号  , 如果 你在其他地方 也用了 SetTimer并且 有些时间消息想分开处理的话  可以根据ID号来进行.并且SetTimer的返回值将会是此ID号 ,所以如果 你成功调用了 那么 就会返回此参数的值.


nElapse
以毫秒为单位指定超时值或间隔。


lpfnTimer
这是一个 函数指针 ,并且要求是 回调函数 。如果指定了 ,消息间隔到得时候  他就会调用 你传给他的函数处理 。否则 你可以再WM_TIMER消息 中 处理.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值