16. Graphical user interfaces

16.1. User interface alternatives

사용자 인터페이스에는 다음 종류가 있다.

  • 콘솔 입출력.
  • 그래픽 유저 인터페이스 라이브러리.
  • 웹 브라우저 인터페이스.

GUI는 입출력의 한 형태일 뿐 프로그램 로직의 중심점이 되어서는 안 된다.

16.2. The “Next” button

“다음” 버튼은 std::cin과는 다르게 마우스 포인터를 추적해야 하며, 무엇이 이루어져야 하는지를 알려줘야 하고, GUI가 프로그램이 관심 있는 행동을 감지할 때까지 기다려야 한다.

16.3. A simple window

마우스가 버튼을 클릭했음을 감지하기 위해서는

  • 버튼을 정의하고
  • 버튼을 표시하고
  • GUI 호출 함수를 정의하고
  • GUI에 버튼과 그 함수를 알려주고
  • GUI에 해당 함수 호출을 대기시켜야 한다.

16.3.1. A callback function

함수 호출에 대한 콜백 함수를 만들어 버튼이 눌렸을 때의 행동을 정의해야 한다.

16.3.2. A wait loop

함수가 호출될 때까지 대기하는 함수도 만들어야 한다.

16.3.3. A lambda expression as a callback

함수에 람다 표현식을 쓸 수 있다.

16.4. Button and other Widgets

버튼은 위젯의 일종으로 정의할 수 있다.

16.4.1. Widgets

위젯은 가상 클래스로 정의한다.

16.4.2. Buttons

버튼은 위젯을 상속한다.

16.4.3. In_box and Out_box

입출력 박스 위젯은 위젯을 상속받아 정의한다.

16.4.4. Menus

메뉴도 위젯을 상속받아 정의한다.

16.5. An example

이제 기본적 GUI를 만들 수 있다.

16.6. Control inversion

일반적인 프로그램의 제어 흐름은 “애플리케이션이 입력 함수를 호출하고 유저가 반응한다” 이지만, GUI 프로그램의 제어 흐름은 “유저의 행동에 시스템이 콜백 함수를 호출하고 애플리케이션이 반응한다”이다. 이는 유저의 모든 행동을 예측해 그에 대응하는 루틴을 만들어야 하기 때문에 디버깅을 어렵게 한다.

16.7. Adding a menu

추가 메뉴를 정의할 수 있다.

16.8. Debugging GUI code

GUI 코드를 디버깅할 때는 코드의 실행 경로를 추적하는 것이 가장 어렵다. 또한 윈도우간의 겹침 문제도 어려운 요소이다. 가장 어려운 점은 C++에는 기본 그래픽 라이브러리가 없기 때문에 예외 처리가 생각대로 되지 않는다는 점이다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중