본문 바로가기

WTL::CFileDialog

WTL::CFileDialog, WTL::CMultiFileDialog MFC에서 복수 파일을 선택하여 열기 / 저장을 하기 위해서는, CFileDialog 개체를 생성한 뒤, OFN_ALLOWMULTISELECT 플래그를 지정해야 한다. 그리고, OPENFILENAME 구조체의 lpstrFile에 선택한 파일들이 들어갈만한 충분한 버퍼를 할당해야 한다. OFN_ALLOWMULTISELECT 플래그를 지정했다고 하더라도, 할당한 버퍼의 크기가 충분하지 않으면 기대한 파일 목록을 얻지 못한다. 또, 이 파일들의 경로 따위를 얻어내기 위해서는 POSITION 구조체에 대해서 반복자를 적용하여 값을 얻어내야 하는데, 사실 Win32 API를 직접 사용하는 것보다 크게 나을 것이 없다. 무엇보다, POSITION 구조체에 반복자를 적용하는 것은 그렇다고 하더라도, 직접 버퍼를 할당.. 더보기
WTL::CString 문제 : WTL::CFileDialog Filter WTL의 CFileDialog의 필터(filter) 관련 기능은 한 가지 문제가 있다. 필터란 다들 알다시피 파일 관련 대화상자를 열었을 때, 화면에 표시할 파일의 확장자를 선택하여 그것만 보여주는 기능이다. 보통 MFC에서는 CString 형식으로, 구분자로 '|' 표시를 사용하여 정의하고 이 CString을 필터로 그냥 넘겨주면 잘 동작한다. 그러나, WTL의 CFileDialog는 WTL::CString을 사용하여 같은 방법으로 코드를 작성하면, 원하는 결과를 얻지 못한다. 이것은 WTL의 CFileDialog가 MFC와 달리 API를 래핑하는 정도로 작성되어 있기 때문이고, 또 템플릿을 사용한 코드다보니 기능 구현에 어느 정도 제약이 있기 때문이다. 즉, WTL에서는 MFC의 CString '|'.. 더보기