<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jasmine214--love

    只有當你的內(nèi)心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    CRect類詳解

    Posted on 2010-08-30 17:43 幻海藍夢 閱讀(4626) 評論(0)  編輯  收藏 所屬分類: C++
    http://www.vcshare.net/jichu/jichu_212.htm
    我用金山快譯查了一下沒有rect這個單詞,估計是rectangle的簡寫,rectangle是長方形、矩形的意思。
    默認坐標系:原點為左上角,右邊為x軸正方向,下邊為y軸正方向。

    構(gòu)造函數(shù)(CRect)有五個原型,第二個原型和第三個原型是拷貝構(gòu)造函數(shù)。現(xiàn)在我用其它三個構(gòu)造函數(shù)構(gòu)造一個左上角坐標為(10,20),x方向邊長為100,y方向邊

    長有200的矩形。
    原型一:
    CRect r1(10,20,110,220);

    原型四:
    POINT pt = {10,20};
    SIZE size = {100,200};
    CRect r2(pt,size);
    原型五:
    POINT topLeft = {10,20};
    POINT bottomRight = {110,220} ;
    CRect r3(topLeft,bottomRight);

    下面的代碼可以查一個矩形的大小,新建一個單文檔工程Sdi,修改OnDraw函數(shù):
    void CSdiView::OnDraw(CDC* pDC)
    {
    CSdiDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    CRect r1(10,20,110,220);
    pDC->Rectangle(&r1);
    }

    int Width( ) const;
    取得寬度,int iWidth = r1.Width();iWidth的會上為100。

    int Height( ) const;
    取得高度,int iHeight = r1.Height();iHeight的結(jié)果是200。

    CSize Size( ) const;
    取得寬和高,CSize size = r1.Size();size.cx為100,size.cy為200。

    CPoint& TopLeft( );
    取得左上角的坐標,由于返回值是引用,所以可以通過此函數(shù)的返回值,修改左上角。
    CRect r1(10,20,110,220);
    r1.TopLeft().x = 0;
    r1.TopLeft().y = 0 ;
    r1的左上角坐標變?yōu)?0,0),也可以通過此函數(shù)取得左上角的坐標。
    CRect r1(10,20,110,220);
    CPoint TopLeft = r1.TopLeft();
    TopLeft.x的值為10,TopLeft.y的值為20。

    BottomRight取得右下角坐標

    CPoint CenterPoint( ) const;取得中心得的坐標,CPoint pt = r1.CenterPoint();pt為(60,120)。

    BOOL IsRectEmpty( ) const;如果長席或?qū)挾葹?或非法,返回真;否則返回假。
    CRect r1(210,20,110,220);
    bool bEmpty = r1.IsRectEmpty();
    結(jié)果為真,因為左邊比右邊還大。

    CRect::IsRectNull,四個邊的坐標都為0,結(jié)果為真,否則為假。

    BOOL PtInRect( POINT point ) const;查看一個點是否在矩形內(nèi)。
    CRect r1(10,20,110,220);
    POINT pt1={10,10};
    POINT pt2={10,30};
    bool bIn1 = r1.PtInRect(pt1);
    bool bIn2 = r1.PtInRect(pt2);
    bIn1為假,bIn2為真。

    CRect::SetRect,設置四個邊的值,用法類似于構(gòu)造函數(shù)的原型一。

    CRect::SetRectEmpty,將四個邊的坐標設置為0。

    void CopyRect( LPCRECT lpSrcRect );復制。
    CRect r2;
    r2.CopyRect(&r1);
    r2的值和r1的值相同。

    CRect::EqualRect,兩個矩形是不是相同,四邊坐標必須相同。
    CRect r1(10,20,110,220);
    CRect r2(110,220,10,20);
    bool bEqual = r1.EqualRect(r2);
    bEqual的值為假,因為他們的上下左右邊不同,是反過來的。
    CRect r1(110,220,10,20);
    CRect r2(110,220,10,20);
    bool bEqual = r1.EqualRect(r2);
    bEqual為真,因為四邊相同。

    CRect::InflateRect,增加寬和高。
    CRect r(0,0,0,0);
    r.InflateRect(2,3);//結(jié)果為(-2,-3,2,3);
    SIZE size = {3,2};
    r.InflateRect(size);//結(jié)果為(-5,-5,5,5);
    CRect r1(-5,-5,-5,-5);
    r.InflateRect(&r1);//結(jié)果為(0,0,0,0);
    //左邊左移-1(右移1),上邊上移-1,右邊右移2,下邊下移2
    r.InflateRect(-1,-1,2,2);//結(jié)果為(1,1,2,2);

    CRect::DeflateRect,減少寬和高,方法與InflateRect類似。

    CRect::NormalizeRect,標準化,調(diào)整上下邊和左右邊,使得符合人類邏輯。
    CRect r(10,10,0,0);
    r.NormalizeRect();
    結(jié)果為(0,0,10,10)

    CRect::OffsetRect,移動整個矩形。
    CRect r(0,0,10,10);
    r.OffsetRect(1,1);//右移1,下移1
    POINT point = {1,1};
    r.OffsetRect(point);//再右移1,再下移1
    SIZE size = {-2,-2};
    r.OffsetRect(size);//右移-2,下移-2

    CRect::SubtractRect,lpRectSrc1減去lpRectSrc2,注意不是減號。過程不好表達,運行下面的代碼就可以看到效果了。
    void CSdiView::OnDraw(CDC* pDC)
    {
    pDC->SelectStockObject(NULL_BRUSH);
    CRect r1(10,10, 100,100);
    CRect r2(50,10, 150,150);//和CRect r2(50,50, 150,150);結(jié)果不一樣
    pDC->Rectangle(r1);
    pDC->Rectangle(r2);

    {//紅色區(qū)域是SubtractRect的結(jié)果
    CRect r ;
    r.SubtractRect(r1,r2);
    CBrush brush(RGB(255,0,0));
    pDC->SelectObject(&brush);
    pDC->Rectangle(&r);
    }
    }

    CRect::IntersectRect,求交集
    void CSdiView::OnDraw(CDC* pDC)
    {
    pDC->SelectStockObject(NULL_BRUSH);
    CRect r1(10,10, 100,100);
    CRect r2(50,10, 150,150);//和CRect r2(50,50, 150,150);結(jié)果不一樣
    pDC->Rectangle(r1);
    pDC->Rectangle(r2);

    {//綠色區(qū)域是IntersectRect的結(jié)果
    CRect r ;
    r.IntersectRect(r1,r2);
    CBrush brush(RGB(0,255,0));
    pDC->SelectObject(&brush);
    pDC->Rectangle(&r);
    }
    }

    CRect::UnionRect,求并集
    void CSdiView::OnDraw(CDC* pDC)
    {
    pDC->SelectStockObject(NULL_BRUSH);
    CRect r1(10,10, 100,100);
    CRect r2(50,50, 150,150);//和CRect r2(50,50, 150,150);結(jié)果不一樣
    pDC->Rectangle(r1);
    pDC->Rectangle(r2);

    {//藍色邊框是UnionRect的結(jié)果
    CRect r ;
    r.UnionRect(r1,r2);
    CPen pen(PS_DOT,1,RGB(0,0,255));
    pDC->SelectObject(&pen);
    pDC->Rectangle(&r);
    }
    }

    CRect::operator LPCRECT ,轉(zhuǎn)化成LPCRECT類型。
    CRect::operator LPRECT ,轉(zhuǎn)化成LPRECT
    CRect r(0,0,100,100);
    LPCRECT pCRect = r;
    LPRECT pRect = r;
    第二行會調(diào)用LPCRECT操作符,第三行調(diào)用LPRECT操作符。
    typedef const RECT* LPCRECT; // pointer to read/only RECT
    typedef struct tagRECT
    {
    LONG left;
    LONG top;
    LONG right;
    LONG bottom;
    } RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;

    CRect::operator = ,重載“=”運算符,實際調(diào)用CopyRect。
    CRect::operator ==,重載“==”運算符,實際調(diào)用EqualRect。
    operator !=,重載“!=”運算符,實際調(diào)用EqualRect。
    CRect::operator += ,重載“+=”運算符,第一個原型和第二個原型調(diào)用OffsetRect,第三個原型調(diào)用InflateRect。
    CRect::operator -=,重載“-=”運算符,第一個原型和第二個原型調(diào)用OffsetRect,第三個原型調(diào)用InflateRect。
    CRect::operator &=,重載“&=”運算符,實際調(diào)用IntersectRect。
    CRect::operator |= 重載“|=”運算符,實際調(diào)用UnionRect。
    +、-、&、|和上面的類似,就不再詳細講解了。
    主站蜘蛛池模板: 成人免费无码H在线观看不卡| 在线播放免费播放av片| 亚洲日韩精品无码专区网站| 亚洲爆乳成av人在线视菜奈实| 毛片基地免费视频a| 国产AV旡码专区亚洲AV苍井空| 女人被男人桶得好爽免费视频 | 免费在线观看中文字幕| 国产大陆亚洲精品国产| 免费少妇a级毛片| jizz免费在线影视观看网站| 久久亚洲精品无码观看不卡| 中文字幕乱码一区二区免费| 亚洲AV无码成人精品区在线观看| 最近的2019免费中文字幕| 老司机免费午夜精品视频| 亚洲日韩国产精品乱| 一个人免费视频观看在线www | 天天摸天天碰成人免费视频| 337p日本欧洲亚洲大胆人人| 无码一区二区三区免费| 亚洲综合激情六月婷婷在线观看| 国产免费看JIZZ视频| 美女被艹免费视频| 亚洲日韩中文字幕在线播放| 91香蕉国产线在线观看免费 | 免费一级做a爰片久久毛片潮喷| 羞羞视频在线免费观看| 亚洲三区在线观看无套内射| 巨波霸乳在线永久免费视频| 亚洲精品动漫免费二区| 亚洲色欲色欲www在线丝| 国产91免费视频| 国产亚洲视频在线观看网址| 国产成人A人亚洲精品无码| 在线观看无码AV网站永久免费| 免费看内射乌克兰女| 亚洲精品国产成人中文| 国产91在线免费| **aaaaa毛片免费同男同女| 无遮挡a级毛片免费看|