
Single system menubar, top of the screen
No application window
No application name in window titles
One mouse click to place focus and bring to front, second click required to make selection
Windows are created with the size and location that your application requests
Dialogs stay on top of application windows
Dialogs have no titles
Keyboard provides "Option" key
One button mouse; use of mouse required
Limited keyboard navigation
Possible limited screen space
Can't minimize windows

Menubar per window
Application name appears in document window title bar
"Ghost window" may appear at startup
Application may be terminated by closing the last top-level window
User-configurable window manager
Focus policy is user-configurable
Window size and placement is user-configurable
The use of colour and fonts is also under the user's control
Application windows may stack on top of dialogs
Three-button mouse
Typically have large, high-resolution displays (e.g., 1280 &mult; 1024 &mult; 24)

Menubar per application, at the top of the application window
Application name in task window title bar
One mouse click places focus, brings to front, and makes selection
Windows are created with the size and location that your application requests
Dialogs stay on top of application windows
Multiple Document Interface (MDI)
Generally a two-button mouse
A wide range of monitor sizes and resolutions
Keyboard provides "Windows" (option) key
System task bar usually at bottom of screen
Every GUI application needs:
a way to manage and store data
a way to display the data and allow the user to interact with it
a way to control the program
Applications are often designed using a "Model-View-Controller" architecture. Microsoft uses a slight variation of this model: "Document-View" architecture.
The essential point is that there is a dependency relationship between the model component and the view component: when the data stored in the model is changed, the view must be notified so that it can update itself to reflect the new setting of the model. The change itself is caused by the controller component.
Modern GUI's are typically event-driven, meaning they spend much of their time waiting for an event to occur. An event occurs when something external to the program happens:
a key is pressed
the mouse is moved or clicked
a timer expires
a message arrives on a network socket
a hardware interrupt is generated