2011-02-09 9 views
2

기본적으로 나는 드래그 앤 드롭 동작의 과정에서 사용자가 확장 멀티 선택 트리 컨트롤에서 CTreeCtrl 레이블 편집의 열광적 인 기본 동작을 억제 할 때를 결정할 것인지 결정해야합니다.DragDetect는 언제 그리고 어떻게 유용합니까?

CWnd::DragDetect은 왼쪽 버튼을 아래로 움직여 정의 된 사각형 밖으로 마우스를 이동 한 경우 true를 반환합니다. ::OnMouseMove에서 반환 값을 사용하여 특정 GUI 효과 및 동작을 사용하거나 사용하지 않도록 설정하는 끌기 작업이 진행 중인지 확인하려고했습니다.

소리가 잘 들리고 좋아 보이지만 동일한 마우스 포인트를 사용하고 선택한 항목으로 간단히 히트 테스트를하는 것 이상의 결과를 얻으십니까? 어쨌든 드롭 타겟에 대한 히트 테스트를 이미해야하므로 완전히 불필요한 방법처럼 보입니다.

Google은이 방법을 사용하는 예를 보여주지 않았으므로 결과가 반환되지 않았으므로 언제 이것이 유용한 방법인지 또는 의도 한 용도가 아닌지 궁금합니다.

누구도 전에 이것을 사용 했습니까?

+0

인가'Math.Sqrt()'당신은 뉴턴 - 랩슨 자신을 구현할 수 있기 때문에 완전히 불필요한 방법은? –

+0

@Anon point taken ... 그러나 이것은 뭔가를 놓치지 않는 한 std :: string에서 size() 이외에 length()를 갖는 것과 유사합니다. – AJG85

+0

DragDetect에 대한 사각형의 크기가 반드시 드래그하는 객체의 크기와 같지는 않습니다. 그것은 문자열에있는 문자의 수를 얻는 방법과 문자가 차지하는 바이트 수를 얻는 것과 같습니다. –

답변

2

WM_LBUTTONDOWN 핸들러에서 DragDetect을 호출하여 사용자가 응용 프로그램에서 무언가를 드래그하려고하는지 확인합니다. true를 반환하면 드래그 작업의 시작입니다. 거짓이면, 그렇지 않다. true가 반환 된 후 마우스를 추적하고 피드백을 제공하기 위해 적중 테스트를 시작합니다. 이 시점에서 적어도 커서를 변경해야합니다. 마지막으로 WM_LBUTTONUP에서 최종 대상 테스트를 수행하여 드롭 대상이 무엇인지 확인합니다.

+0

이렇게하면 창 사이의 끌어서 놓기 작업을 감지 할 때 더 유용합니까? 그렇지 않으면 TVN_BEGINDRAG 메시지가 아니며 적중 테스트가 충분합니까? – AJG85

+1

@ AJG85, 창 내에서 또는 창 사이에서 마우스를 캡처 한 한 아무런 차이가 없습니다. TVN_BEGINDRAG는 모든 윈도우에서 DragDetect가 작동하는 동안 트리 컨트롤에만 적용됩니다. –

+0

아아 네 유용합니다 내 특정 사용은 나무 컨트롤의 컨텍스트 내에서만 그래서 호기심이 어디에서 왔는지입니다. – AJG85

관련 문제