Windows Hardware Developer Central   http://www.microsoft.com/whdc/default.mspx

일본, 타이완 은 있는데 Korea 는 없다는거...ㅠ_ㅠ  어쩔수 있나..공부해야지




whdc

 프로세스나 스레드를 생성후 CloseHandle을 해서 레퍼런스 카운트를 1로 만드는건 좋은데...

나중에 핸들을 사용해서 다른 작업을 하고자 할 때 에러 체크를 안해 준다면.. 왜 에러가 났는지 찾기 힘들다.

ㅠ_ㅠ... 그러니깐 닫을땐 쓸일이 있는지 한번 생각해보자..

Tag | ,
사용자 삽입 이미지사용자 삽입 이미지

1. 원안에 점 가두기 ( 빙빙 돌려보자. )
  - 호도=각도*3.1416/180 이 핵심!!  참고 : winapi.co.kr 삼각함수 


// 원점과 대상점 을 인자로 더해주면 라디안 값을 얻어온다..
#define
SQUARE(x)    ((x)*(x))
#define PAI            acos(-1.0)
double FindTheta(double baseX, double baseY, double x, double y)
{
    int index = 0;
    double diffx, diffy, Dist, theta, degree;

    diffx = (x-baseX);
    diffy = (baseY-y);
    Dist = hypot( diffx, diffy );

    theta = acos(fabs(diffx)/Dist)*180 / PAI;

    if(diffx>0 && diffy>0)
        index = 1;
    else if(diffx<0 && diffy>0)
        index = 2;
    else if(diffx<0 && diffy<0)
        index = 3;
    else if(diffx>0 && diffy<0)
        index = 4;
    else if(diffx==0 && diffy>0)
        degree = 90.0;
    else if(diffx==0 && diffy<0)
        degree = 270.0;
    else if(diffx>0 && diffy==0)
        degree = 360.0;
    else if(diffx<0 && diffy==0)
        degree = 180.0;

    switch(index)
    {
    case 1 : //1사분면
        degree = theta;
        break;
    case 2 ://2사분면
        degree = 180.0 - theta;
        break;
    case 3 ://3사분면
        degree = 180.0 + theta;
        break;
    case 4 ://4사분면
        degree = 360.0 - theta;
        break;
    }   
    return degree * PAI / 180;
}

  -  원안에 점을 가두자(Region)~ BOOL PtInEllipse( RECT rcEllipse, POINT pt )
BOOL PtInEllipse( RECT rcEllipse, POINT pt )
{
    HRGN hRgn =
        CreateEllipticRgn( rcEllipse.left, rcEllipse.top, rcEllipse.right, rcEllipse.bottom );
    if( PtInRegion( hRgn, pt.x, pt.y ) )
    {
        DeleteObject( hRgn );
        return TRUE;
    }
    DeleteObject( hRgn );
    return FALSE;
}

- 삼각형 외 다각형의 내부 클릭 여부 확인 ~ BOOL PtInTriangle( POINT *Verts, POINT pt )
BOOL BTriangle::PtInTriangle( POINT *Verts, POINT pt )
{
     HRGN hRgn =CreatePolygonRgn( Verts, 3, WINDING); // 핵심..정점수만큼의 Region 영역을 생성..

    if( PtInRegion( hRgn, pt.x, pt.y ) )
    {
        DeleteObject( hRgn );
        return TRUE;
    }
 
    DeleteObject( hRgn );
    return FALSE;
}

Tag |