C++/CLI에서 사용자 정의 컨트롤 (Forms.Control의 직계 하위 요소)을 작성하여 대부분의 처리와 페인팅 전체를 별도의 legacy-ish MFC 컨트롤로 오프로드합니다. 이 컨트롤을 C# 응용 프로그램에 래핑합니다. 응용 프로그램에서 같은 양식에있는 UserControl에서 C++/CLI 컨트롤로 항목을 드래그 할 수 있어야합니다.내 사용자 지정 컨트롤이 끌어서 놓기 이벤트를받지 못하는 이유는 무엇입니까?
어떤 이유에서든 내 사용자 지정 컨트롤에 AllowDrop을 true로 설정 했음에도 불구하고 끌어서 놓기 이벤트가 수신되지 않습니다. (나는 AllowDrop이 런타임에 true인지 확인했습니다.) 콜백이 호출되지 않기 때문에 DragEventArgs를 검사/조작 할 수있는 기회를 얻지 못했습니다.
드래그 앤 드롭이 정상적으로 작동하는지 확인했습니다. 예를 들어, 사용자 정의 컨트롤을 Panel로 바꾼다면 dragdrop 콜백을 사용할 수 있습니다.
끌어다 놓기 콜백을 지원하기 위해 컨트롤에 구현해야하는 추가 사항이 있습니까? 컨트롤이 마우스 오버로 드래그 작업의 대상이되어야 함을 시스템이 인식하도록 처리해야하는 미묘한 무언가가 있습니까?
참고 :이
그림을 할 것입니다 MFC 컨트롤이 나에게 아직 사용할 수없는, 그래서 난 그냥에 페인트하려고 해요 (OnPaintBackground
를 통해) 간단한 그라데이션 배경 그림하고 있습니다. 또한 OnPaint
에 작은 그라디언트 사각형을 페인팅합니다.
사용자 지정 컨트롤의 핸들을 디자이너/생성자 코드를 통해 만들고 OnHandleCreated 재정의를 통해 핸들을 만든 후에 AllowDrop = true를 설정해 보았습니다. 행동에 차이가 없습니다.
끌기 커서는 사용자 지정 컨트롤 위에있는 "끌기 없음"커서에서 변경되지 않습니다.
UserControl 하위 컨트롤 MouseDown
이벤트에 대한 이벤트 처리기에서 this.DoDragDrop()
을 호출합니다.
DragDrop은 사용자 정의 컨트롤과 동일한 어셈블리에서 C#으로 만든 다른 사용자 정의 컨트롤로 작동하는 것처럼 보입니다. 콜백을 잘 캡처합니다. 내 C++/CLI 컨트롤 만 볼 수 없습니다. initializecomponent goo는 부적절합니다. 나는 그것을 아무 변화없이 모두 언급 할 수있다.