『VC++技术内幕』学习笔记(6)(3)
问题1: CRect是什么?
CRect是类,是从RECT结构派生的,和它类似的还有从POINT结构派生的CPoint、从SIZE派生的CSize。因此它们继承了结构中定义的公有整数数据成员,并且由于三个类的一些操作符被重载所以可以直接在三个类之间进行类的运算。
//重载operator +
CRect operator +( POINT point ) const;
CRect operator +( LPCRECT lpRect ) const;
CRect operator +( SIZE size ) const;
//重载operator -
CRect operator -( POINT point ) const;
CRect operator -( SIZE size ) const;
CRect operator -( LPCRECT lpRect ) const;
......
更多的请在MSDN中查看
■第三步:修改由AppWizard生成的OnIntitalUpdate函数
void CMyApp6View::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal(20000,30000);
CSize sizePage(sizeTotal.cx /2,sizeTotal.cy /2);
CSize sizeLine(sizeTotal.cx /50,sizeTotal.cy/50);
SetScrollSizes(MM_HIMETRIC,sizeTotal,sizePage,sizeLine);//设置滚动视图的逻辑尺寸和映射模式
}
问题2: 关于void CMyApp6View::OnInitialUpdate()
函数OnInitialUpdate()是一个非常重要的虚函数,在视图窗口完全建立后框架用的第一个函数,框架在第一次调用OnDraw前会调用它。因此这个函数是设置滚动视图的逻辑尺寸和映射模式的最佳地点。
■第四步:编辑CMyApp6View构造函数和OnDraw函数
//*********************************************
// CMyApp6View构造函数
//
CMyApp6View::CMyApp6View():m_rectEllipse(0,0,4000,-4000)//椭圆矩形为4*4厘米。
{
m_nColor=GRAY_BRUSH;//设定刷子颜色
}
//*********************************************
// CMyApp6View的OnDraw函数
//
void CMyApp6View::OnDraw(CDC* pDC)
{
pDC->SelectStockObject (m_nColor);
pDC->Ellipse(m_rectEllipse);
}
问题3:
CMyApp6View::CMyApp6View():m_rectEllipse(0,0,4000,-4000)为什么不能这样写:
CMyApp6View::CMyApp6View()
{
m_rectEllipse(0,0,4000,-4000);
m_nColor=GRAY_BRUSH;
}
我从CSDN上得到的答案:两者实际上没有区别。有两个原因使得我们选择第一种语法,它被称为成员初始化列表:
一个原因是必须的,另一个只是出于效率考虑。
让我们先看一下第一个原因――必要性。设想你有一个类成员,它本身是一个类或者结构,而且只有一个带一个参数的构造函数。
class CMember {
public:
CMember(int x) { ... }
};
- 上一篇:『VC++技术内幕』学习笔记(7)
- 下一篇:『VC++技术内幕』学习笔记(5)