| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2262 人关注过本帖, 1 人收藏
标题:关于(孙老师第5课中)Cbitmap类的释放问题
只看楼主 加入收藏
cumtzdhlx
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-7-8
收藏(1)
 问题点数:0 回复次数:2 
关于(孙老师第5课中)Cbitmap类的释放问题

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);

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

SetTimer(1,100,NULL);
return 0;
}
孙老师在上面插入符的讲解中说对象Bitmap是一个局部变量,函数OnCreate执行完成之后对象Bitmap要发生析构通常C++的对象是一个和资源相关的一个对象,在它析构的时候它都会把和它相关联的一个资源销毁,所以就看不见位图的插入符了,所以要把局部变量Bitmap改为一个全局的VIEW类的成员变量,只能在我们创建的声明部分去建立一个全局数据成员Bitmap,这样就可以显示插入符了.
但是孙老师在下面一段代码我就有点疑问了,在OnDraw函数中,
void CTextView::OnDraw(CDC* pDC)
{
CTextDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//CString str("维新科学技术培训中心");
CString str;
str="维新科学技术培训中心";
pDC->TextOut(50,50,str);
}
其中定义了一个CString类对象,孙老师在上面插入符的讲解中说CBitmap类创建的对象要是局部变量就会在它析构的时候就会销毁,那么CString类是不是也应该像上面那样理解呢,如果那样理解那不是str在函数结束时也被销毁了,那为什么客户区还有字存在呢?
我对上面确实不太理解,可能是我看书看得不够,希望各位朋友给予解释!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

搜索更多相关主题的帖子: Cbitmap 老师 释放 
2007-07-11 14:55
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
CString 不是资源,是一个字符串,TextOut将字画到了50,50的地方,然后OnDraw函数返回,str也就没了,但先前的字已经画到了窗口50,50的地方,注意,这里是画的,不是资源,如果是资源,那就没了,比如载入一幅图,它是局部变量CBitmap载入的,然后用BitBlt画到窗口中,然后OnDraw返回对应的资源释放了,但窗口仍然可以看到图片,原因是画出来的,你上面的那种改变光标的是一种插入的方式
这只是个人看法,也许不正确,呵呵

2007-07-11 17:32
cumtzdhlx
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-7-8
收藏
得分:0 
谢谢 解释的还行,多谢你回我这么多帖子哦!!!!!!!!
2007-07-11 17:46
快速回复:关于(孙老师第5课中)Cbitmap类的释放问题
数据加载中...
 
   



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

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