|
소스의 분석을 요청하신거 같군요...
어려운 질문은 아닐거 같은데 답변이 없는거 보니.. ㅡ,.ㅡ;
(아실꺼라 생각되지만 전체적인 요약을 위해 일일이 쓰겠습니다.)
Graphics::TBitmap *pBmp = new Graphics::TBitMap;
이부분은 TBitmap형의 pBmp라는 놈에게 TBitmap을 생성하라는 소리지요?
IL->Add(pBmp,NULL);
이부분의 IL이 ImageList가 맞겠지요..
이미지 리스트에 pBmp라는 놈의 포인터를 등록한것입니다.
다른함수부...
Graphics::TBitmap *pBmp;
이부분은 메모리를 생성한것이 아니라 TBitmap에 있는 클래스로 선언하여
내부변수나 함수를 그대로 사용하기 위한 목적입니다.
IL->GetBitmap(0, pBmp);
이부분은 처음에 메모리를 생성하였던 놈의 포인터를 갖고있는 녀석중 0번째에 있는 놈의 포인터를
받는 부분입니다. 절대적으로 Assign이 아니라 그냥 포인터 대입인것 같습니다.
빌더가 설치안된 컴이라 확인이 안되는 군요 ㅋㅋㅋ
delete pBmp;
이부분은 처음에 생성한 메모리를 제거하기 위한 부분입니다.
따라서 Assign이 아니라 포인터 대입이 맞는거 같지여?
IL->Delete(0);
이부분은 아마도 Loop문을 돌면서 제거할것 같군요
이미지 리스트가 갖고있는 첫번째 메모리 포인터 주소를 지우는 것입니다.
실제 메모리 영역을 delete 하는것이 아니라
처음에서 Add 시켜줄떄 받은 메모리 주소값만 이미지리스트에서 삭제하는 것입니다.
이해가 조금 되시는 지요?
이해가 되실때까지 읽어보심이 좋을듯 판단됩니다.
안되신다면 다시 리플 달아주세요~
김성연 님이 쓰신 글 :
: Graphics::TBitmap *pBmp = new Graphics::TBitmap;
: IL->Add(pBmp,NULL);
:
: ...
:
: 다른 함수
: Graphics::TBitmap *pBmp;
: IL->GetBitmap (0, pBmp);
: delete pBmp;
: IL->Delete(0);
:
: 웬지 GetBitmap() 호출시에 Assign이 된다는 얘기같던데요.. 헬프 찾아서 보니까요.
: 그러면 위처럼 해주면 안되지 않나요?
: IL->Delete(0); 해주면 알아서 되나요?
: TList와는 달리 타입을 알고 있어서 그런가요?
: 아니면 Add 해주고 바로 delete 를 해줘야 하는 건가요?
|