C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[37418] Re:Re:감사합니다 . 해결 했습니다.^^;~*
[] 975 읽음    2004-09-24 17:30
void __fastcall TMainForm::DrawWireRects(LPRECT lprcFrom, LPRECT lprcTo, UINT nMilliSecSpeed)
{
    const int nNumSteps = 50;
    nMilliSecSpeed = 10;

    GdiFlush();
    Sleep(50);  // Let the desktop window sort itself out

    // if hwnd is null - "you have the CON".
    HDC hDC = ::GetDC(NULL);

    // Pen size, urmmm not too thick
    HPEN hPen = ::CreatePen(PS_SOLID, 2, RGB(0,0,0));

    int nMode = ::SetROP2(hDC, R2_NOT);
    HPEN hOldPen = (HPEN) ::SelectObject(hDC, hPen);
    float angle = 0;

    for (int i = 0; i < nNumSteps; i++)
    {
        double dFraction = (double) i / (double) nNumSteps;
        angle+=(360.0/nNumSteps);

        float radians=(2*3.1416*angle)/360;
        float cosine=(float)cos(radians);
        float sine=(float)sin(radians);

        RECT transition;
        transition.left   = lprcFrom->left +
            (int)((lprcTo->left - lprcFrom->left) * dFraction);
        transition.right  = lprcFrom->right +
            (int)((lprcTo->right - lprcFrom->right) * dFraction);
        transition.top    = lprcFrom->top +
            (int)((lprcTo->top - lprcFrom->top) * dFraction);
        transition.bottom = lprcFrom->bottom +
            (int)((lprcTo->bottom - lprcFrom->bottom) * dFraction);

        TPoint ptRectCtr;
        ptRectCtr.x = transition.left+((transition.right-transition.left)/2);
        ptRectCtr.y = transition.top+((transition.bottom-transition.top)/2);
        RECT rtOrg;
        rtOrg.left = -(transition.right-transition.left)/2;
        rtOrg.top = -(transition.bottom-transition.top)/2;
        rtOrg.right = (transition.right-transition.left)/2;
        rtOrg.bottom = (transition.bottom-transition.top)/2;

        POINT pt[5];
        int x, y;
        x=rtOrg.left, y=rtOrg.top;
        pt[0] = TPoint(ptRectCtr.x+(x*cosine-y*sine), ptRectCtr.y+(x*sine+y*cosine));
        x=rtOrg.right,y=rtOrg.top;
        pt[1] = TPoint(ptRectCtr.x+(x*cosine-y*sine), ptRectCtr.y+(x*sine+y*cosine));
        x=rtOrg.right,y=rtOrg.bottom;
        pt[2] = TPoint(ptRectCtr.x+(x*cosine-y*sine), ptRectCtr.y+(x*sine+y*cosine));
        x=rtOrg.left, y=rtOrg.bottom;
        pt[3] = TPoint(ptRectCtr.x+(x*cosine-y*sine), ptRectCtr.y+(x*sine+y*cosine));
        x=rtOrg.left, y=rtOrg.top;
        pt[4] = TPoint(ptRectCtr.x+(x*cosine-y*sine), ptRectCtr.y+(x*sine+y*cosine));
        /*
        POINT pt[5];
        pt[0] = TPoint(transition.left, transition.top);
        pt[1] = TPoint(transition.right,transition.top);
        pt[2] = TPoint(transition.right,transition.bottom);
        pt[3] = TPoint(transition.left, transition.bottom);
        pt[4] = TPoint(transition.left, transition.top);
        */
        // We use Polyline because we can determine our own pen size
        // Draw Sides
        ::Polyline(hDC,pt,5);

        GdiFlush();

        Sleep(nMilliSecSpeed);

        // UnDraw Sides
        ::Polyline(hDC,pt,5);

        GdiFlush();
    }

    ::SetROP2(hDC, nMode);
    ::SelectObject(hDC, hOldPen);

    ::ReleaseDC(NULL,hDC);
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
37353 점으로 원을 그릴려고 합니다. 어떻게 그려야 될지 힌트나 알고리즘 좀 가르쳐 주세요~* 시간남아도라 744 2004/09/21
37395     Re:점으로 원을 그릴려고 합니다. 어떻게 그려야 될지 힌트나 알고리즘 좀 가르쳐 주세요~* 복창순 814 2004/09/23
37418         Re:Re:감사합니다 . 해결 했습니다.^^;~* 975 2004/09/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.