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在函数结束时也被销毁了,那为什么客户区还有字存在呢?
我对上面确实不太理解,可能是我看书看得不够,希望各位朋友给予解释!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!