2009-09-18 2 views
2

내가 작업하고있는 응용 프로그램은 데이터베이스에 포함 된 데이터 차트를 만드는 데 사용됩니다. 현재 차트의 개체는 "컨트롤 패널"(기본적으로 개체 목록 및 값을 편집하는 PropertyGrid)을 사용하여 조작됩니다. 또한 사용자는 마우스 조작을 사용하여 개체와 상호 작용할 수 있기를 원합니다. 차트 모서리를 잡아 당기거나 끌어서 확대/축소하거나 숫자를 클릭하고 텍스트 상자에서 편집하거나 마우스 오른쪽 단추를 클릭하는 등의 작업을 할 수 있습니다. 가능한 상호 작용 메뉴를 얻을 수있는 것. 차트는 사용자가 그린 양식에 그려지는 메타 파일 (요구 사항)에 GDI +로 그려져 있습니다.사용자가 마우스를 통해 그래픽 객체와 상호 작용할 수있는 방법은 무엇입니까?

저는 이것을 어떻게 구현해야하는지 잘 모르겠습니다. 몇 가지 아이디어가 있습니다.

  • 차트 그래픽에 중첩되는 사용자 지정 컨트롤을 만듭니다. 각 컨트롤은 차트의 개체의 특정 개체 또는 속성과 연결될 수 있으며 사용자가 해당 개체와 상호 작용 한 방식에 따라 해당 값을 업데이트합니다.
  • 마우스가있는 곳에서 물건을 찾고 추적 할 때 목록을 통해 마우스 위치에있을 것으로 예상되는 물건을 찾아서 거기에서부터 이동하십시오.

저는 여러분이 어떻게 구현할 것인지에 관심이 있으며 몇 가지 제안을 정말 고맙게 생각합니다. 감사!

+2

+1 나는 이것에도 흥미가있다. 추가 정보 나 좋은 샘플 응용 프로그램에 대한 링크를보고 싶습니다. – MarkJ

답변

1

히트 감지에 좋은 방법 : 다른 오프 스크린 이미지가 있습니다. 이 이미지에서 클릭 가능한 모든 객체를 고유 한 색상으로 그립니다. 앤티 앨리어싱을 비활성화해야합니다. 사용자가 오프 스크린 이미지에서 그 지점의 컬러를 클릭하고 오브젝트를 결정할 때. 객체 목록이 있다면 객체 색인을 색상으로 사용할 수 있습니다. 이 방법은 불규칙한 모양의 오브젝트에 대한 히트 감지를 처리하지만 조금 느려집니다.

추신. 컨트롤을 사용하면이 속도보다 느려집니다.

+0

흥미 롭습니다. 이것은 몇 가지 큰 모양이있는 경우 모양을 다시 계산하는 것보다 많은 메모리 집약적 일 것입니다. 그러나 불규칙한 모양의 작은 개체가 많은 경우에는 승리로 입증 될 수 있습니다. –

+0

작업 공간에 256 개가 넘는 객체가 없으면 메모리 사용을 고려하여 메모리 사용을 4 배로 줄일 수 있습니다. –

+0

이것은 OpenGL에서 객체 선택이 어떻게 이루어지는 지 잘 알고 있습니다 –

2

후자의 경우 - 예를 들어 원형 차트 인 경우 불규칙한 모양의 컨트롤을 처리하기 위해 적중 테스트 작업을 대부분 수행해야합니다.

+0

+1 자신을 테스트하는 것은 분명히 갈 길이 멀다. 하지만 cemkalyoncu는 객체의 실제 좌표 이외에 경계 상자를 유지하면 객체를 신속하게 거부하고 검색 범위를 좁힐 수 있다는 것이 맞습니다. –

0

가장 쉬운 것 : 객체 목록과 경계 상자가 있습니다. 마우스 이벤트가 발생하면 클릭 한 객체의 목록을 확인하십시오.

0

양식에 중첩되어 있으면 모든 적중 테스트가 양식 프레임 워크에서 수행됩니다. 컨트롤을 만든 다음 이벤트 핸들러를 구현하면됩니다.

위는 (그 문제에 아마 또는 MPF) 모든 Windows 양식을 설명 프로그램 :

등 객체의 자신의 목록을 작성 적어도 상당한 다시 구현하기 위해 윈도우 폼 프레임 워크를 동등, 또는 그것의 일부. 휠을 다시 개발하고 싶지는 않습니다. 특히 휠이 이미 어플리케이션에 있으므로.

관련 문제