리스트박스의 숨겨진 기능(?)을 적극 활용해 봅시다. SendMessage를 이용해서 이 숨겨진 기능들을 써먹어볼 수 있습니다.
손상진님께서 도움을 많이 주셨습니다~
참고로, 이 예제들은 내부 함수를 써도 괜찮지만, 사용자함수로 만들어 사용하시는 것을 권장합니다. 핸들은 모두 리스트박스의 핸들입니다.
상황에 맞게 둘 중 하나를 적절히 사용합니다. 실수함수: SendMessageA(실수: 핸들, 메시지, 인자1, 인자2); 실수함수: SendMessageA(실수: 핸들, 메시지, 인자1; 문자: 인자2);
* 항목이 선택되었을까? LB_GETSEL SendMessage(핸들, 391, 줄번호, 0);
알아보고 싶은 줄의 번호를 넣는다. 0부터 시작한다. 0이 반환되면 선택되지 않은 거고, 아니면 선택된 것(배경이 파랗게 된)이다. 다중선택이 참일 때 유용하다.
* 특정 항목을 선택하자! LB_SETSEL SendMessage(핸들, 389, 선택여부, 줄번호);
줄번호의 항목을 선택하거나, 선택하지 않는다. 선택여부는 1, 0을 넣는데 1을 넣으면 선택한다. 다중선택이 참일 때 유용하다.
* 파일 목록 집어넣기 LB_DIR SendMessage(핸들, 397, 플래그, "경로");
경로에 있는 파일 목록을 리스트박스에 집어넣는다. 예를 들어 "C:\*.exe" 라고 지정하면 C:\에 있는 모든 exe 파일의 목록을 집어넣는다. 속도가 굉장히 빠르기 때문에 쓸만하다.
플래그에는 다음과 같은 값을 넣을 수 있다.(여러 값을 넣으려면 + 로 더해서 넣는다.) 1: 읽기 전용 파일 2: 숨김 파일 4: 시스템 파일 16: 폴더(이름이 [] 으로 감싸져 나옴) 16384: 드라이브([-a-], [-c-] 같은 꼴로 나옴) 32768: 이 플래그를 포함하면 지정한 플래그를 가진 폴더나 파일만 알아온다. 즉, 2만 넣으면 "일반 파일+숨김 파일"이 나오지만 2+32768 을 넣으면 "숨김 파일"만 나온다.
* 원하는 위치로 스크롤하기! LB_SETTOPINDEX SendMessage(핸들, 407, 줄번호, 0);
지정한 줄번호의 항목이 리스트박스의 가장 처음으로 보이도록 스크롤 한다. 예를 들어, 줄번호로 5를 넣으면 5번 항목이 가장 위에 나타나도록 스크롤 된다.
* 가장 맨 위에 있는 항목은? LB_GETTOPINDEX SendMessage(핸들, 398, 0, 0);
가장 맨 위로 보여지는 항목의 줄번호를 알려준다.
* 커서 위치의 항목은 무엇일까? LB_ITEMFROMPOINT SendMessage(핸들, 425, 0, 좌표);
리스트박스 기준의 x, y 좌표를 넣으면 그 위치의 항목의 줄번호를 알려준다. 컬럼이 설정되어 있어도 문제 없고, 스크롤 되어 있어도 문제 없다.
좌표는 다음과 같이 만든다. 좌표 := X + shL(Y, 16); |
|