바람이 머문 언덕

마우스 커스의 특정 위치의 색을 반환하는 함수 본문

컴퓨터 IT/C++ 언어

마우스 커스의 특정 위치의 색을 반환하는 함수

알 수 없는 사용자 2009. 12. 13. 16:24
반응형

GetCursor 함수를 이용해서 커스 모양을 얻어 올 때 다이렉트 x와서와 같이 사용자가 만든  커스 일 경우 일정한 모양만
반환해서 마우스 커스가 변경 되었는지 알기 힘들 때 커스의 모양이 바뀌었는지 알기 위해서
만든 함수로 커스의 특정 위치의
색을 반환 합니다.



COLORREF GetCursorColor(int x, int y)  // 색의 위치를 얻기 원하는 마우스 커스의 아이콘의 좌표를 전달  
{
      CURSORINFO ci;
      ICONINFO ii;
      COLORREF rgb = 0;

     ci.cbSize = sizeof(CURSORINFO);  // 커서 정보를 구하기 위해서 반드시 세팅해야 한다
     if(GetCursorInfo(&ci))
     {   
          GetIconInfo(ci.hCursor, &ii);   // 커서에 해당하는 아이콘 정보를 읽어온다
          if (ii.hbmColor)
          {
              CBitmap * pCBitmapOld;
              CDC dcIcon;
              CDC ScreenDC;
              ScreenDC.CreateDC(L"DISPLAY", NULL, NULL, NULL); 
              dcIcon.CreateCompatibleDC(&ScreenDC);
              pCBitmapOld = dcIcon.SelectObject( CBitmap::FromHandle(ii.hbmColor));
              rgb = dcIcon.GetPixel(x, y);
              DeleteObject(dcIcon.SelectObject(pCBitmapOld));
             dcIcon.DeleteDC();
             ScreenDC.DeleteDC();
        }
        // 사용후에는 ii.hbmColor, ii.hbmMask를 삭제해야 한다
        if (ii.hbmColor != NULL) DeleteObject(ii.hbmColor);  
        if (ii.hbmMask != NULL) DeleteObject(ii.hbmMask);
    }
    return rgb;
}