<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軸正方向。

    構造函數(shù)(CRect)有五個原型,第二個原型和第三個原型是拷貝構造函數(shù)。現(xiàn)在我用其它三個構造函數(shù)構造一個左上角坐標為(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的結果是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();
    結果為真,因為左邊比右邊還大。

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

    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,設置四個邊的值,用法類似于構造函數(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);//結果為(-2,-3,2,3);
    SIZE size = {3,2};
    r.InflateRect(size);//結果為(-5,-5,5,5);
    CRect r1(-5,-5,-5,-5);
    r.InflateRect(&r1);//結果為(0,0,0,0);
    //左邊左移-1(右移1),上邊上移-1,右邊右移2,下邊下移2
    r.InflateRect(-1,-1,2,2);//結果為(1,1,2,2);

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

    CRect::NormalizeRect,標準化,調(diào)整上下邊和左右邊,使得符合人類邏輯。
    CRect r(10,10,0,0);
    r.NormalizeRect();
    結果為(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);結果不一樣
    pDC->Rectangle(r1);
    pDC->Rectangle(r2);

    {//紅色區(qū)域是SubtractRect的結果
    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);結果不一樣
    pDC->Rectangle(r1);
    pDC->Rectangle(r2);

    {//綠色區(qū)域是IntersectRect的結果
    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);結果不一樣
    pDC->Rectangle(r1);
    pDC->Rectangle(r2);

    {//藍色邊框是UnionRect的結果
    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。
    +、-、&、|和上面的類似,就不再詳細講解了。
    主站蜘蛛池模板: 久久精品国产99国产精品亚洲| 99久久亚洲综合精品成人网| 亚洲国产精品无码中文lv| 免费能直接在线观看黄的视频| 亚洲邪恶天堂影院在线观看| 一本久到久久亚洲综合| 亚洲精品无码永久在线观看男男| 午夜国产精品免费观看 | 日本黄色动图免费在线观看| 亚洲精品无码mv在线观看网站 | 成人免费毛片视频| 亚洲av永久无码精品秋霞电影秋| 中国一级特黄的片子免费| 亚洲综合伊人久久综合| 中文字幕乱码亚洲精品一区| 国产情侣久久久久aⅴ免费| 亚洲91av视频| 久久久久久久国产免费看| 欧美最猛性xxxxx免费| 亚洲色欲啪啪久久WWW综合网| 国产免费卡一卡三卡乱码| 亚洲成无码人在线观看| 无人影院手机版在线观看免费| 亚洲AV无码不卡无码| 国产特黄特色的大片观看免费视频| 亚洲愉拍99热成人精品热久久| 日韩精品亚洲专区在线影视| 久久久久久久免费视频| 风间由美在线亚洲一区| 亚洲熟妇av一区二区三区漫画| 91短视频在线免费观看| 亚洲精品中文字幕乱码三区| 久久国产色AV免费看| 亚洲AV无码AV男人的天堂不卡| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久成人a毛片免费观看网站| 亚洲一级毛片免费观看| 一级毛片直播亚洲| 国产2021精品视频免费播放| 成a人片亚洲日本久久| 无码乱人伦一区二区亚洲一|