9.3.5 이미지 보기 Form
이미지 보기 Form은 UI 요소를 구조적으로 보여주는 부분과 평가 대상 이미지에서 선택한 요소에 프로그램 방식의 하이라이트를 보여주는 기능을 수행합니다.
[그림 9.14] ImageForm 배치
번호 |
컨트롤 형식 |
컨트롤 이름 |
특이 사항 |
1 |
TreeView |
tv_hierarchy |
|
2 |
PictureBox |
pb_image |
SizeMode 속성을 AutoSize로 설정 |
[표 9.5] ImageForm의 자식 컨트롤
ImageForm에는 멤버 필드로 EHHighligt 개체, EHHightlight의 사각 영역을 설정할 멤버와 UI 요소가 있는 사각 영역을 기억할 멤버, 선택한 요소를 기억할 멤버를 선언합니다.
EHHighlight eh = null;
Rectangle rect;
Rectangle base_rect;
EHAutoElem eae;
폼 로드 이벤트 핸들러를 추가합니다. 이벤트 핸들러에서는 현재 평가 프로젝트를 얻어와 사각 영역의 변경되었을 때 알려줄 이벤트 핸들러를 등록합니다. 그리고 pb_image의 이미지 속성을 프로젝트의 이미지로 설정합니다. 또한 현재 프로젝트의 루트 노드를 얻어와서 복재한 노드를 tv_hierarchy 컨트롤의 Nodes 컬렉션에 추가하고 EHHighlight 개체를 생성하고 시각화하여 사각 영역을 설정합니다. 그리고 tv_hierarchy 컨트롤의 Nodes 컬렉션의 0번째 요소를 선택 노드로 설정합시다.
private void ImageForm_Load(object sender, EventArgs e)
{
EvalManager EM =EvalManager.Manager;
AccEvalProject aeproject = EM.CurrentProject;
aeproject.AEMoved += new AutomationPropertyChangedEventHandler(
aeproject_AEMoved);
pb_image.Image = aeproject.Image;
TreeNode tr = aeproject.Root as TreeNode;
TreeNode nd = tr.Clone() as TreeNode;
eae = nd.Tag as EHAutoElem;
base_rect = eae.GetBoundaryRect();
tv_hierarchy.Nodes.Add(nd);
tv_hierarchy.ExpandAll();
rect = pb_image.RectangleToScreen(pb_image.ClientRectangle);
eh = new EHHighlight();
eh.Visible = true;
SetDrawRect(base_rect);
tv_hierarchy.SelectedNode = tv_hierarchy.Nodes[0];
}
평가 대상 창의 사각 영역의 속성이 변경했을 때 통보받으면 base_rect를 변경합니다.
void aeproject_AEMoved(object sender, AutomationPropertyChangedEventArgs e)
{
base_rect = eae.GetBoundaryRect();
}
EHHighlight 개체의 사각 영역은 창의 사각 영역을 기억한 base_rect와 pb_image가 있는 사각 영역을 기억하는 rect와 입력 인자로 받은 now_rect를 이용해 사각 영역을 설정합니다.
private void SetDrawRect(Rectangle now_rect)
{
int x = now_rect.Left - base_rect.Left +rect.Left;
int y = now_rect.Top - base_rect.Top +rect.Top;
eh.Rect = new Rectangle(x, y, now_rect.Width, now_rect.Height);
}
tv_hierarchy 컨트롤을 선택 이벤트 핸들러를 추가합니다. 핸들러에서는 선택한 노드에 하이라이트를 그리는 메서드를 호출합니다. 선택한 노드를 그리는 메서드에서는 선택한 요소의 사각 영역을 얻어와서 SetDrawRect 메서드를 호출합니다.
private void tv_hierarchy_AfterSelect(object sender, TreeViewEventArgs e)
{
DrawSelectNode();
}
void DrawSelectNode()
{
if (tv_hierarchy.SelectedNode == null)
{
return;
}
TreeNode tr = tv_hierarchy.SelectedNode;
EHAutoElem eae = tr.Tag as EHAutoElem;
SetDrawRect(eae.GetBoundaryRect());
}
그리고 ImageForm의 Move 이벤트 핸들러를 추가하여 pb_image의 사각 정보로 rect 필드를 설정하고 DrawSelectNode 메서드를 호출합니다.
private void ImageForm_Move(object sender, EventArgs e)
{
rect = pb_image.RectangleToScreen(pb_image.ClientRectangle);
DrawSelectNode();
}
마지막으로 ImageForm의 FormClosed 이벤트 핸들러를 추가하여 EHHighlight 개체를 닫아주는 Close 메서드를 호출하는 작업을 수행합니다.
private void ImageForm_FormClosed(object sender, FormClosedEventArgs e)
{
eh.Close();
eh = null;
}
'프로그래밍 기술 > 소프트웨어 접근성, UI 자동화' 카테고리의 다른 글
9. 접근성 평가 도구 만들기 - 19. MainForm (0) | 2017.12.12 |
---|---|
9. 접근성 평가 도구 만들기 - 18. InvokePatternForm (0) | 2017.12.12 |
9. 접근성 평가 도구 만들기 - 16. ProjectInfoControl (0) | 2017.12.12 |
9. 접근성 도구 만들기 - 15. ProjectSelectForm (0) | 2017.12.12 |
9. 접근성 평가 도구 만들기 - 14.ProjectMakerControl (0) | 2017.12.12 |
9. 접근성 평가 도구 만들기 -13. 접근성 평가 도우미 폼, 컨트롤 구현, EHHighlight (0) | 2017.12.12 |
9. 접근성 평가 도구 만들기 - 12. EvalManager 클래스 구현 (0) | 2016.10.27 |
9. 접근성 평가 도구 만들기 - 11. MakeProjectEvent 핸들러와 인자 클래스 구현 (0) | 2016.10.27 |
9. 접근성 평가 도구 만들기 - 10. AccEvalProject 클래스 구현 (0) | 2016.10.25 |
9. 접근성 도구 만들기 - 8. FindAutoElemEvent 핸들러와 인자 클래스 구현 (0) | 2016.10.25 |