问个关于关于c++中CRect类的问题:比如 CRect rc(300,400,400,450); 1.rc+=CRect(10,0,-10,0); 2.rc.left-=10;rc.right-=10;经过测试 第一种方法和第二种方法所得的rc结果是一样的;所以在此请教第一种方法是怎么

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/13 14:11:50

问个关于关于c++中CRect类的问题:比如 CRect rc(300,400,400,450); 1.rc+=CRect(10,0,-10,0); 2.rc.left-=10;rc.right-=10;经过测试 第一种方法和第二种方法所得的rc结果是一样的;所以在此请教第一种方法是怎么
问个关于关于c++中CRect类的问题:
比如 CRect rc(300,400,400,450);
1.rc+=CRect(10,0,-10,0);
2.rc.left-=10;
rc.right-=10;
经过测试 第一种方法和第二种方法所得的rc结果是一样的;所以在此请教第一种方法是怎么计算的?希望能用简单点回答,举点例子最好了.
可能我表述的不大严谨,我这里的疑问是 当CRect有负数数值时 相互之间怎么进行加减运算.不要复制MSDN的内容!

问个关于关于c++中CRect类的问题:比如 CRect rc(300,400,400,450); 1.rc+=CRect(10,0,-10,0); 2.rc.left-=10;rc.right-=10;经过测试 第一种方法和第二种方法所得的rc结果是一样的;所以在此请教第一种方法是怎么
MFC不会使用
1.重载了operator+=函数.
rc+=CRect(10,0,-10,0);MFC实现是这样的顺序
构造
ATLTYPES_INLINE CRect::CRect(int l, int t, int r, int b) throw()
{ left = l; top = t; right = r; bottom = b; }
转换
ATLTYPES_INLINE CRect::operator LPRECT() throw()
{ return this; }
ATLTYPES_INLINE void CRect::operator+=(LPCRECT lpRect) throw()
{ InflateRect(lpRect); }
ATLTYPES_INLINE void CRect::InflateRect(LPCRECT lpRect) throw()
{
left -= lpRect->left;top -= lpRect->top;
right += lpRect->right;bottom += lpRect->bottom;
}
看看这个operator+=是怎么计算的