Essentials of Interactive Computer Graphics: Concepts and Implementation K. Sung, P.
Download
Report
Transcript Essentials of Interactive Computer Graphics: Concepts and Implementation K. Sung, P.
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Chapter 2: GUI API
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
GUI API
Software Library
Support Event Driven Programming
Front end – for users and
Back end – for us programmers
Via GUI Elements
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
GUI Application – Front end
Building the front end: GUI Element Layout
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
GUI Element
Elements for interacting with users
E.g., A Window: for containing buttons
and mouse
E.g., Buttons for user to click-on
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
GUI Elements: User Perspective
Virtual IO devices
For users to express their wishes (to our
applications)
Relate to past experiences
Visually pleasing: icons that looks like a real
button
3D looking, shows depressed (or change color)
Semantically meaningful: A button that behaves
like a real button:
clicked and something will happen
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
GUI Application – Back end
“responding” to the front-end GUI Elements
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
GUI Elements: Programmer perspective
Unique ID:
To identify the element (in programming code)
Behavior:
Default: e.g., check-box shows a check-mark
Customizable:
e.g., check-box disappears after checked
Semantic State Information:
E.g., check box: checked (true) or not checked (false)
E.g., slider bar: has a current value
We must worry about how to access this
information
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
GUI Elements: Programmer perspective …
Abstraction representation:
our program interacts with data type
E.g., CButton, CSliderBar
Event Service Registration
How to register for events and services
continue
E.g., when clicked on checked box, call this function
Control Variables:
Variables in our program representing the frontend GUI elements
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Relation to previous lecture:
Previously: Event driven programming
Application State (persistent variables)
Design Workflow (events)
With Workflows
User intuitive actions to change the application state
Design event service routines (to update the application
state)
Register event services
Complete solution!
But … how to implement this solution?
GUI API!
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
GUI API: must support …
Front end design: GUI builder
Backend:
Control variables
Mechanism for linking GUI element to
control variables
Event Service Registrations
Call back functions
Inheritance override
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
GUI API Example: MFC
Front end: Resource Editor
Integrated in Visual Studio IDE
Chapter 2
K. Sung, P. Shirley, S. Baer
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
MFC: Back end GUI Elements
GUI Element Type
Control Variable data type
Application Window
CWnd/CDialog
Text label (Static text) CWnd/CString
Button
CButton/BOOL
Check box
CButton/BOOL
Slider bar
CSliderBar/Int
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
MFC/VS: Implementation Files
Chapter 2
K. Sung, P. Shirley, S. Baer
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
MFC/VS: files
TutorialApp: This is the application
TutorialDlg: The main dialog window
.rc: For GUI Builder (Resource editor)
This is a GUI element! (One instance of this object
defined in TutorialApp)
Text file, can open with text editor
.vcproj, .sln: VS IDE files
.sui, .ncb: VS IDE scratch files
.ico and rc2: icons for the app
DEBUIG/Release: build results
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.1:
CTutorialApp: is the application
dlg – the application window
A instance of CTutorialDlg defined in
Is the control variable for our application window
CTutorialDlg::OnInitDialog()
SystemInitialization() – for
Creating application state
Registration of event handlers
CTutorialDlg::OnPaint()
CTutorialApp::InitInstance()
When redraw is necessary
BEGIN_MESAGE_MAP
For overriding event services
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
Tutorial: 2.1 … .rc file
Chapter 2
K. Sung, P. Shirley, S. Baer
Essentials of Interactive Computer Graphics: Concepts and Implementation
Tutorial 2.2:
Application State:
An integer (count)
Events:
React to click on Add button
React to click on Quit button
Chapter 2
K. Sung, P. Shirley, S. Baer
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.2: Implementation
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
Tutorial 2.2: backend
The CTutorialDlg class
Chapter 2
K. Sung, P. Shirley, S. Baer
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.2: CTutorialDlg.cpp
System initialization
Control Variable/GUI element assocation
DDX_Text links
GUI element (IDC_ECHO_AREA)
control variable (m_EchoText)
Button event registration:
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.2: button event service
UpdateData()
Ture: stream GUI element state to control variable
False: push control variable value to GUI element
In this case:
push m_EchoText to IDD_ECHO_AREA
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
Tutorial 2.3: Slider Bar
Chapter 2
K. Sung, P. Shirley, S. Baer
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.3: warning …
MFC Resource editor slider bar workflow
DO NOT double click on the slider bar icon
to activate event service!
Do enable: OnHScroll() and OnVScroll()
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.3: CTutorialDlg class
A1: Control variables for echo
B1: Control variables for slider bars
C1: Slider bar service routines
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.3: CTutorialDlg
implementation (1)
System Initialization
Control variables/GUI element association
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.3: CTutorialDlg
implementation (2)
Slider Event Function Registration
Slider event service routine (H-Scroll)
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.4: Timer and Mouse
Timer: alarm clock for ourselves
Mouse:
Buttons: Left/Middle/Right
Down event
Up event
Move
NO explicit front end GUI elements!
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.4: implementation (1)
A1: to count timer
B1: mouse and timer echo
C1: Timer/alarm service routine
D1: Mouse service routines
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.4: implementation (2)
System Initialization
Control variable/GUI element association
Event service registrations
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.4: implementation (3)
Event Service routines
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.5: Input/Output GUI Elements
Sliders: control by application if checked
Check Box: uncheck by application
when sliders reach the end’
New implementation support (from 2.4)
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.5: Implementation(1)
System initialization (addition to 2.4):
Control variables/GUI element association:
Check box event service registration:
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.5: Implementation(2)
Event service routines:
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.5: events
Single threaded application!
Timer event: once every second
When timer fires, our application will be servicing the
timer
User _cannot_ trigger event during timer service!
Check box:
Front end: a check box/mark
Back end: bool (no need for special service)
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.6: Slider with Echo
MFC Slider bar shortcomings:
No text echo
Integer only support
Our class: CSliderCtrlWithEcho
Default behavior: always text echo
Support floating point
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Slider with Echo
Subclass from MFC: CSliderBar class
To use this class:
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.6: using slider with echo
void CTutorialDlg::OnTimer(UINT nIDEvent)
{
m_Seconds++;
if (m_TimerCtrlSliders)
{
// Get ready to decrease the sliders ...
float hvalue = m_HSliderBar.GetSliderValue();
if (hvalue > 0)
m_HSliderBar.SetSliderValue(hvalue-1);
float vvalue = m_VSliderBar.GetSliderValue();
if (vvalue > 0)
m_VSliderBar.SetSliderValue(vvalue-1);
...
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Notes on: Slider with Echo
No need special update
Updates the text field by default
Poll/Set only when needed
Floating point:
100K unique values defined between
min/max
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.7: Software Library
Compile into a .lib file
IDE
Search path must be set
Include file location (in stdafx.h)
Dependency
Compile vs. Link
Debug vs. Release
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.8: Sub window
Window as container of GUI-elements
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
Tutorial 2.8: front end
Chapter 2
K. Sung, P. Shirley, S. Baer
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.8: backend
ReplaceDialogControl()
Place a CDialog onto a “placeholder”
Sub window
As a logical container for related GUIelements
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.8: GUI data type …
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Tutorial 2.8: using the data type
A RadiusControl GUI in main window
Implementation: an instance of
CCircleRadiusControls in CTutorialDlg
CCircleRadiusControls
our own GUI data type
No icon representation
Will not show unless we force it!
Chapter 2
Essentials of Interactive Computer Graphics: Concepts and Implementation
K. Sung, P. Shirley, S. Baer
Showing CircleRadiusControls
Placing the CCircleRadiusControls into
our application window:
At application initialization …
Chapter 2