CDialogImpl 클래스를 상속 한 WTL을 사용하여 대화 상자를 만들었습니다. 기본 대화 상자에서 다른 대화 상자를 만들고이 두 번째 자식 대화 상자 안에 목록 컨트롤을 만들었습니다. 목록 컨트롤에 드래그 & 드롭 기능을 추가하고 싶었습니다. 웹에서 WM_DROPFILES 메서드에 대해 읽었으며 Ole Drop 대상에 대해서는 나중에 선택했습니다. this에 따라 IDropTarget 인터페이스 메서드를 구현했습니다. 다음과 같이Ole 끌어서 놓기 문제 해결
//drag& drop
lpDropTarget = (LPDROPTARGET)new TDropTarget(m_hWnd);
CoLockObjectExternal(lpDropTarget, true, true);
// register the HWND as a drop target
RegisterDragDrop(m_hWnd, lpDropTarget);
lpDropTarget 인스턴스화 : 나는 내 모든 대화에서 TRUE로 파일 옵션을 받아 설정 한 , 나는 자식 대화 클래스의 IDropTarget을 인스턴스화하고 WM_INITDIALOGUE 처리기에서 다음과 같은 방법을 불렀다
LPDROPTARGET lpDropTarget;
그게 전부입니다.
나는 목록 제어 HWND에 대한 RegisterDragDrop에 등록하고 그것이 내가 보내는 알림
WM_OLEDROP WM_USER + 1
를받을 부모 대화의 설정 : 그래서 행운의 검색에 다음과 같은 시나리오를 시도하기 전에 정말 올레를 사용하지 않았습니다. 커서를 드래그 & 드롭으로 보이지만 IDataTarget의 기능 구현에 대한 호출이 없습니다.RegisterDragDrop for child 대화 & 알림.
RegisterDragDrop 기본 대화 상자 & 알림도 있습니다. 나중에 경우 (2 & 3) 드래그 & 강하 커서에서
파일을 받아 들일 수 있기를 원하십니까? 아니면 좀 더 복잡한 것을 받아 들일 수 있습니까? –
파일/폴더/드라이브/나는 끌어서 놓기 만하고 이름 만 얻을 수 있기를 원합니다. –
이렇게하려면 'WM_DROPFILES'를 다루는 것이 더 쉽습니다. –