| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 957 人关注过本帖
标题:在窗口中显示插入符的问题?
只看楼主 加入收藏
不会编程
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-7-8
收藏
 问题点数:0 回复次数:4 
在窗口中显示插入符的问题?
int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
//CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
//ShowCaret();
CBitmap bm;
bm.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bm);
ShowCaret();
return 0;
}
这是在窗口创建一个插入符,为什么用固定插入符CreateSolidCaret()可以在窗口显示插入符,而用位图却无法显示该位图插入符?
搜索更多相关主题的帖子: 窗口 IDB OnCreate ShowCaret return 
2007-08-14 11:08
Lenying
Rank: 1
等 级:禁止访问
帖 子:16
专家分:5
注 册:2006-11-25
收藏
得分:0 

  这样写代码当然不能显示位图插入符,你定义的bm是一个局部变量,当执行完CTextView::OnCreate后,bm的生命周期到了,图象资源也就被释放了。如果要显示位图插入符,你可以把bm定义为CTextView的成员变量,也可以在CreateCaret(&bm);后调用bm.Detach();以断开bm对象和其资源的连接,这样即使bm生命周期到了,其资源也不会被销毁。


蓝鹰----Lenying
2007-08-14 11:45
不会编程
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-7-8
收藏
得分:0 

那tm也是一个局部变量,同样执行完CTextView::OnCreate后,tm的生命周期到了,被析够,tm.tmAveCharWidth/8,tm.tmHeight这两个值也没有,那怎么会显示插入符?

2007-08-14 15:32
红专三少
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2007-7-14
收藏
得分:0 
CBitmap是一个资源类,而你定义的TEXTMETRIC tm中的TEXTMETRIC是一个结构体.
2007-08-14 17:31
Lenying
Rank: 1
等 级:禁止访问
帖 子:16
专家分:5
注 册:2006-11-25
收藏
得分:0 
tm的生命周期到了,被析够,tm.tmAveCharWidth/8,tm.tmHeight这两个值也没有了,这不假,但是这不涉及到资源,插入符创建完了之后,即使tm生命周期到了,也没有什么,它用的仅仅是tm的一个值。而用图象,对象生命周期到了,其图象资源也被销毁了,还怎么显示图象呢?

蓝鹰----Lenying
2007-08-14 17:55
快速回复:在窗口中显示插入符的问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016644 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved