프로그래밍 기술/소프트웨어 접근성, UI 자동화

9. 접근성 평가 도구 만들기 - 17. 이미지 보기 Form

언제나휴일 2017. 12. 12. 13:45
반응형

9.3.5 이미지 보기 Form


 

 이미지 보기 FormUI 요소를 구조적으로 보여주는 부분과 평가 대상 이미지에서 선택한 요소에 프로그램 방식의 하이라이트를 보여주는 기능을 수행합니다.

 

[그림 9.14] ImageForm 배치

[그림 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;

}

반응형