GUI Development: Goals User Interface Programming In C# .

2y ago
20 Views
3 Downloads
898.47 KB
14 Pages
Last View : 22d ago
Last Download : 3m ago
Upload by : Milo Davies
Transcription

GUI Development: GoalsUser Interface Programming in C#:1. General GUI programming concepts Basics and EventsGUI components, layoutsEvent-based programmingGraphicsDirect Manipulation, AnimationMVC architecturesData-driven UIs2. C#, .NET Chris NorthCS 3724: HCIWindows FormsEvents, delegatesGDI ThreadsADO.netGoal: learn other languages quickly, same concepts C# Background C# VB Java (best of both!) Basic statements identical to C , Java Object-oriented only! main( ) is inside a class No global variables “interfaces”No pointers (object references only), safeNo delete: automatic garbage collectionError Handling, exceptions (try, catch)GUI: Windows FormsLibraries: Data structs, databases, Component-based: (“assembly”) reflectionVB, Xwin, Java 49, C# Materials MS Visual Studio .Net (2005)MSDN (integrates with VS)VS Dynamic HelpBooks MS Visual C# .NET, MS Press– C# language– Window Forms, GDI MSDN online No .h files Visual Studio .NET: CLR, multi-language, web, XML, services, 1

GUI Topics Components API ationMVC Like member fields Get, set E.g. Button1.Text “Press Me” Methods Like member functions Tell component to do something E.g. Button1.Show( ) Events Like callback functions Receive notifications from component E.g. Button1.Click(e)GUI Tree StructureGUIFormButtonTypical command line programInternal structureFormcontainers Linear executionPanelPanelLabel ;}2

Interactive command line program User input commands Non-linear execution Unpredictable order Much idle timeprogram:main(){decl data storage;initialization code;loop{}get e; }Typical GUI program User input commands Non-linear execution Unpredictable order Much idle timeApp1mouseclickOK Event callback procs “delegates” callbacks Function pointersOKCancelApp2 whichapp?App2eventloopwhichcontrol?create GUI;register callbacks;main event loop;Callback1(){code;}Callback2(){code;} //button1 press//button2 pressC# WinAppApp2Cancelmain(){decl data storage;initialization code;}}GUI EventsGUI program:OKbtn click(){do stuff;}CancelBtn click(){do different stuff;}App2Form click(){do other stuff;} Java: ListenersC# WinApp:Class{decl data storage;constructor(){initialization code;create GUI controls;register callbacks;}main(){Run(new )}callback1(){do stuff;}callback2(){do stuff;} 3

DelegatesGraphics1. Register with a control to receive events Give Control a function pointer to your callback functionthis.button1.Click new EventHandler(this.button1 Click);2. Receive events from control Control will call the function pointerprivate void button1 Click(object sender, EventArgs e){1. button1.Click button1 click( )clickButton12. button1 Click( )Pixels Screen is like a painter’s canvasApp must paint its window contents GUI components paint themselvesAnything else: Programmer1. How to paint?2. When to paint?Button1 click()callbackButtonCoordinate System Upside-down Cartesian(0,0)(0,height)(width,0)(width, height) Ywindow height - Ycartesian4

Component HierarchyPainting Components Each component has its own subwindow Subwindow rectangular area within parent component Has own coordinate system Can paint any component Panel is good for custom graphics area Clipping: Can’t paint outside its subwindow Can’t paint over child wb, hb)(wp, hp)Painting in C#1. The GDI graphics library:using System.Drawing;2. Get the “graphics context” of a component:Graphics g myPanel.CreateGraphics( );Graphics PrimitivesDrawFill Line (pt1,pt2) Lines (pt list) Arc (rect) Curves, Bezier (pt list) Ellipse (rect)3. Paint in it: Rectangle (rect)g.DrawLine(pen, x1,y1, x2,y2); Polygon (pt list) Image (img, x,y) String (string, x,y)label5

Graphics Attributes Pen (for lines) Color, width, dash, end caps, joins, Brush (for filling) Color, Solid, texture, pattern, gradient Font, String Format (for strings) Bitmap/Metafile (for images)Color Combinations of Red, Green, Blue Alpha value opacity Each in [0, 255] C#: Color.FromArgb(255, 150, 0) Bmp, gif, jpeg, png, tiff, wmf, Color Combinations of Red, Green, Blue Alpha value opacity Each in [0, 255] C#: Color.FromArgb(255, 150, 0)Hokie OrangeRe-Paint Screen is like a painter’s canvas All windows paint on the same surface! Windows don’t “remember” whats under them Need to re-paint when portions are newlyexposed Receive Repaint events Open, resize, bring to front When other windows in front move, resize, close6

MyAppOpen WinExp, NotepadClose WinExplorerDesktop gets repaint eventRepaint event sent to: Desktop, MyApp7

MyApp gets repaint eventMyApp Form gets repaint eventRepainting Static Graphics Repaint event: Erase (fill with background color) - usually automaticallydone by the control Draw graphicsMyApp gets repaint eventMyApp Form forwards repaint event to ButtonIn C# Receive “paint” event:(select the event in VisStudio)this.Paint new PaintEventHandler(this.Form1 Paint);private void Form1 Paint(object sender, PaintEventArgs e){Graphics g e.Graphics;g.DrawLine(new Pen(Color.Red,10), 10,10,300,300);} OR: Override the OnPaint methodoverride void OnPaint(PaintEventArgs e){base.OnPaint(e); //preserve base class functionalityGraphics g e.Graphics;g.DrawLine(new Pen(Color.Red,10), 10,10,300,300);} Can call Refresh( ) to force a repaint8

Typical program structure forDynamic GraphicsProgram StructureC# WinApp: Store data structure of graphics itemsProgram State-data structures E.g. user drawn picture in a paint program Paint event:Paint event-display data Erase window (draw background color) Draw graphics for items in data structureInteraction events-modify data Other user events that alter the graphics items: modify the data structure send repaint event by calling Refresh( )Data structure for graphics items 2 approaches: Store logical contents in a data structure,then draw graphics based on the data» E.g. drawing program: lines, shapes, colors, » E.g. visualization program: data table Store visual contents as an off-screen image (bitmap)» E.g. pixels» Then use g.DrawImage( ) in paint eventClass{declare data storage;constructor(){initialize data storage;}cntrl1 paintevent(e){draw graphics from data;}cntrl2 mouseEvent(e){manipulate data;cntrl1.refresh();} Direct ManipulationDefinition: (Shneiderman)Visual objectsSelection by pointingRapid, incremental, reversible actionsImmediate, continuous feedback9

Typical interaction sequence select item by point-n-click:Hit testingMouseDown act on item by drag:Dynamic updateMouseMove 1. Hit Testing Mouse down, mouse over Which dot did user click on? Using components: Make each dot a simple component, like a ButtonHit testing automatic, each component is a subwindowReceive events from components, check event sourcerectangular items, not scalable, inherit from UserControl Using custom graphics:release itemMouseUp Get click (x,y) from MouseDown event Iterate through data structure, test for hit– E.g: if rect.contains(x,y) Data structure for fast lookup?2. Dynamic Updating Dragging, stretching, MouseMove events Using components: mouseDown store x,y click in component mouseMove– Calculate x,y delta– Move component by delta Using graphics: (need to erase it, repaint other graphics, repaint new item)Calculate delta, calculate new item location, storeCall Refresh( )Draw new graphics in Paint eventProblem Dynamic manipulation on top of other graphics Need to preserve (redraw) other graphics Examples: MacDraw, powerpoint Simple solution: Call refresh( ) or invalidate( ) while dragging Paint( ) event restores other graphics But: if lots of graphics, too slow & flashing!10

Problem: FlashingSolution: Double buffering Ugly flashing when repaint: Paint background Redraw shapesSolution: Double buffering Double buffered repaint: Draw all graphics in temporary off-screen image» Paint background color» Paint shapes Want multi-selection by stretching a rubber band Draw rubber band by inverting pixel colors drawing with XOR once inverts background colors drawing with XOR twice returns to original look– No need to refresh( ), fast! Then paint image to Window Bonus: C# can do this for you! Form1.DoubleBuffered true; control maintains off-screen imageRubber Band (XOR painting)//VS 2005// in mouseMove event:// erase previous rect: (must use screen coords, not window coords)ControlPaint.DrawReversibleFrame(rect, Color.Black, FrameStyle.Dashed);// update rect here based on mouse x,y // draw new rect:ControlPaint.DrawReversibleFrame(rect, Color.Black, ffer //VS 2003ControlStyles.UserPaint ControlStyles.AllPaintingInWmPaint, true);11

Drag-n-Drop Drag and Drop API for GUI controls Supports data transferDestControl.AllowDrop True;SourceControl MouseEvent:this.DoDragDrop(data, DragDropEffects.Copy);DestControl DragOver(e):e.Effect DragDropEffects.Copy;Animation Update components/graphics in a loop:for(int i 0; i 100; i )button2.Left 10;for(int i 0; i 100; i )myGraphicX 10;refresh(); but?Loops blocks other events.DestControl DragDrop(e):do something with e.Data.GetData(typeof(String));Event-based Animation Use a Timer control Non-visible control, fires a Tick event at specified intervalsTimer1.Interval 10//millisecondsTimer1.Enabled true //starts animationin Timer1 Tick( ) event:– Update graphics– Refresh( )Software Architecture so far Program State-data structuresPaint event-display data Timer1.Enabled false //stops animation Use doublebufferingInteraction events-modify data12

Model-View-Controller (MVC)Model-View-Controller (MVC)ModelProgram State-data structuresViewUI:Paint event-display datarefreshViewData n events-modify dataUser inputmanipulateModelData:Data modelAdvantages?Multiple Views Multiple views for a model Multi-view applications (overview detail, brushing, )Different usersDifferent UI platforms (mobile, client-side, server-side, )Alternate designsMultiple modelsSoftware re-use of ollerModel13

E.g. C# TreeView ControlC# DataBase ControlsTreeView controlDataGrid controlViewController-scroll, sort, edit, ViewControllertreeView1.NodesJava:model listenersNodes collectionModelDataSet class-tables-columns-rowsModelGUI Topics Components Events Graphics Manipulation Animation MVC14

User Interface Programming in C#: Basics and Events Chris North CS 3724: HCI GUI Development: Goals 1. General GUI pro grammin concepts GUI components, layouts Event-based programming Graphics D irec tM a npul o,Am MVC architectures Data-driven UIs 2. C#, .NET Windows Forms Events, delegates GDI Threads .

Related Documents:

layout and the components of the GUI Changes to this file are made in the Layout Editor - .m file - contains the code that controls the GUI You can program the callbacks in this file using the M-file Editor 28 Creating a GUI Typical stages of creating a GUI are: 1. Designing the GUI 2. Laying out the GUI - Using the Layout Editor 3.

Context: GUI testing is system testing of a software that has a graphical-user interface (GUI) front-end. Because system testing entails that the entire software system, including the user interface, be tested as a whole, during GUI testing, test cases—modeled as sequences of user input events—are developed

2.1.2-Graphical User interface GUI in Java A Graphical User Interface (GUI) is a human friendly way to interact with computer applications. A GUI gives an application certain ‘look and feel’. A GUI is built from components, and these are the components with which user interacts, operates and controls the application [2].

Graphical User Interface Surrogate C2 System for Battle Management Language Experimentation Lt. Col. Mohammad Ababneh, Jordan AF (Student) Dr. Mark Pullen . BML C2 GUI Development Goals Core functions like C2LG GUI Differences from C2LG GUI: - Open resource

Java GUI libraries Swing: the main Java GUI library – Benefits: Features; cross-platform compatibility; OO design – Paints GUI controls itself pixel-by-pixel Does not delegate to OS’s window system Abstract Windowing Toolkit (AWT): Sun's initial GUI library – Maps Java code to each operating system's real GUI system

No change in API which Apps refer to Apps can use API of each GUI-lib. Each GUI-lib has layer to adapt to PF Can have many different GUI-libs without change of PF. HMI Apps App FW Layer Service Layer AppLayer GUI-library GUI-lib PAL(*) ForAGL PF *PF Adaptation Layer HMI-Server (e.g.

30ses computer vision to identify GUI] u compo-nents in screen captures, search for GUI elements in the interface [1], and automate GUI tasks [2]. However, the underlying computer vision algorithms in Sikuli identify GUI elements based on templates from sample image data. To minimize the time required for collecting training data, past research

The Lockdown Haircut by Barbara Henderson 18 The Worst Birthday Ever by Maisie Chan 20 . And a world that’s still full of hope and love. Diana Hendry Looking Up LOCKdown Life. 2 3 A virus is a very small piece of organic matter, far smaller than bacteria. Viruses are not really living things. On their own they cannot grow or reproduce. When viruses infect a plant or animal, they get inside .