2008년 7월 23일 수요일

[ListCtrl] LVN_ITEMCHANGED

ListCtrl (리스트 컨트롤) - LVN_ITEMCHANGED



 List컨트롤의 통지 메시지 중의 LVN_ITEMCHANGED 라는 메시지가 있다.
다른 통지 메시지와 다르게 살짝 까다로워서 바로 쓰다기 보다는 조금 조작을 해주어야 한다.

1. 일반적인 설명
   : 선택된 항목이 다른 항목으로 변경되었을 때

   즉, 어느 항목을 선택 하면 위 통지메시지가 발생 한다.
   여기서 다시 어느 다른 항목을 선택하면 또 발생 하겠지.
   예상과는 다르게 주의 해야 할 점이 있다.
   이 통지 메시지가 발생되는 시점이 예상처럼 단순하지 않다.

2. LVN_ITEMCHABGED 가 발생하는 경우   ① 처음 새로운 항목을 선택 했을 경우
   ② 선택된 항목이 포커스를 잃을 경우
   ③ 항목이 생성될 때
    즉, 항목이 생성될때와 선택포커스를 받을 때, 그리고, 선택포커스를 잃을때도 발생.
    특히, 선택항목이 바뀔때는 메세지가 두번 호출.

@

2008년 7월 2일 수요일

CString 변수 값이 숫자 값인지 판별 - atoi()에 대하여

CString 변수 값이 숫자 값인지 판별 - atoi()에 대하여





 일반적으로 Edit 컨트롤의 값을 CString 변수의 값으로 받게 된다.
그 값이 숫자로만 된 정수값인지 판별해야 할 필요가 생겼다.

라이브러리 함수 중에 atoi() 라는 함수가 있다.

int atoi( const char *string );

인수로 문자열 포인터를 주어주면
만약 숫자로 된 문자열일 경우 해당하는 숫자문자열을 int형 숫자로 변경해 준다.
1. 인수가 "aaa" 일 경우
   NULL 을 리턴한다.

2. 인수가 "123" 일 경우
   123 을 리턴한다.

3. 인수가 "12a2" 일 경우
   NULL을 리턴 할줄 알았는데12를 리턴한다.
사용자 삽입 이미지

사용자 삽입 이미지





(방법 1)
 물론 여러 방법이 있겠지만 atoi() 함수가 위의 3번 같은 결과를 리턴하는 것을 이용해 보았다.

  1. CString 값을 char * 형으로 변환 한다.
  2. 변환한 char *형 값을 atoi() 함수 인수에 넣어 실행시켜 본다.
      2-1. NULL 을 리턴하면 문자값으로 시작한 값이므로 return;
  3. 변환한 char *형 값을 다시 CString 형으로 변환한다.
  4. 변환된 CString 형 값이 맨처음 CString 과 다르면 숫자 중간에 문자가 낀 것이므로 return;

사용자 삽입 이미지





@