CRect 到底是类还是对象
为啥能直接能用?
不用再定义对象? 比如:CButton::Create
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );参数const RECT& rect 需要一个CRect对象 或者是rect结构体定义一个CButton对象btn:btn.Create( LPCTSTR lpszCaption, DWORD dwStyle, CRect( int l, int t, int r, int b ), CWnd* pParentWnd, UINT nID ); 为什么可以直接写成这样?而不需要定义一个CRect的对象去调用? 百度以后的解释是: CRect是MFC的一个类,它重载了所有与RECT,LPCRECT,LPRECT相关的一些操作,所以在使用时可以不用考虑目的对象具体是RECT/LPCRECT/LPRECT,因为CRect都会进行自动转换 ! 基础太差!不是很明白!知道可以这么用,但是不知道为什么? 别再建议我去查msdn了,已经找过,没找到答案!
为啥能直接能用?
不用再定义对象? 比如:CButton::Create
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );参数const RECT& rect 需要一个CRect对象 或者是rect结构体定义一个CButton对象btn:btn.Create( LPCTSTR lpszCaption, DWORD dwStyle, CRect( int l, int t, int r, int b ), CWnd* pParentWnd, UINT nID ); 为什么可以直接写成这样?而不需要定义一个CRect的对象去调用? 百度以后的解释是: CRect是MFC的一个类,它重载了所有与RECT,LPCRECT,LPRECT相关的一些操作,所以在使用时可以不用考虑目的对象具体是RECT/LPCRECT/LPRECT,因为CRect都会进行自动转换 ! 基础太差!不是很明白!知道可以这么用,但是不知道为什么? 别再建议我去查msdn了,已经找过,没找到答案!
CRect( int l, int t, int r, int b ), CWnd* pParentWnd, UINT nID );这里是产生了一个临时的CRect对象。
RECT是CRect的基类。直接隐式转化了
btn.Create( LPCTSTR lpszCaption, DWORD dwStyle, CRect( int l, int t, int r, int b ), CWnd* pParentWnd, UINT nID ); 构造函数返回类对象
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
//
class CRect : public tagRECT
operator LPRECT();
operator LPCRECT() const;而 RECT 的情况是因为CRect是从RECT继承下来的,所以CRect也是可以转换成RECT的。