주의 3

sprintf(swprintf, _stprintf) 함수에서 실수 문자열 표현시 주의

sprintf(swprintf, _stprintf) 함수에서 실수 문자열 표현시 소수점 첫째자리까지 표현하게 설정한 경우 자체적으로 소수점 둘째자리에서 반올림처리해서 표시해버린다. double num = 99.99; TCHAR szText[256]; _stprintf(szText, _T("%.01f"), num)인 경우 문자열은 "100.0"이 된다. 프로그래머가 반올림을 의도하지 않고 이하 자리는 버림을 원하는 경우 이러한 표현은 난감할 것이다. 이경우 floor 함수를 사용하거나, 숫자의 범위가 정수로 커버가능한 경우 간단히 형 변환식으로 처리할 수 있다. floor 함수 사용: _stprintf(szText, _T("%.01f"), floor(10. * num) / 10.); 형변환 처리: _stp..

C, C++ 문법 2012.10.24

c의 qsort와 stl의 sort에서 비교 함수(또는 함수객체) 사용시 결과값 세팅 주의

오름차순 정렬하면 앞에는 작은 것, 뒤에는 큰 게 온다. 갈수록 오른다고 생각하면 된다. ex) 0, 1, 7, 31, 55, 77, 999 김연아, 네이버, 다음, 라이코스, 마라도나, 메시, 박지성, 사오정, 애플, 잡스, 차범근, 카카, 태연, 펠레, 호날두, 홍명보 1. c qsort에서 비교함수 사용시 오름차순 정렬 int Compare(const void *a, const void *b) { return _tcsicmp(((PERSON *)a)->szName, ((PERSON *)b)->szName); } qsort(pPerson, count, sizeof(PERSON), Compare); 참고로 포인터의 연산자 순위가 형변환보다 높다. 위에서 형변환 먼저 처리하려면 필히 괄호를 써줘야 된다...

C, C++ 문법 2012.10.22

SetROP2 이용하여 반전효과 사용시 주의사항

SetROP2에서 R2_NOT이나 R2_XORPEN를 줘서 반전효과를 이용하면 이전의 선들을 지우면서 이동할 수 있다. 그런데 기존에 인터넷에 돌아다니는 소스에는 좀 문제가 있다. 마우스 왼쪽 버튼 다운 메시지가 오면 파라미터로 전달된 좌표와 old x, old y 좌표를 일치시켜서 처리하는 식인데 이 경우 마우스 무브 첫 메시지 발생하고 그리는 과정에서 문제가 생긴다. 선을 그리는 함수의 좌표가 같은 경우, 가령 (100, 100) ~ (100, 100) 까지 선을 그린다고 하면 100, 100 위치에 선 굵기만한 점이 그려진다. 그래서 첫 마우스무브 메시지에서 일단 선굵기 크기의 점을 그리고 그 다음에 시작지점부터 마우스무브 좌표까지의 선을 그린다. 이 결과 첫 점 부분이 다시 반전이 되어 원래의 배..

API 2011.07.12