home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / useful / dev / c / cmanual / intuition / windows / windows.doc < prev    next >
Text File  |  1993-10-12  |  37KB  |  1,097 lines

  1. 2    WINDOWS
  2.  
  3. 2.1  INTRODUCTION
  4.  
  5. Windows are rectangular boxes which can be as big as the screen
  6. or only 1 pixel wide. They can be resized, moved around on the
  7. screen, put in front or behind other windows and so on. All
  8. this is taken care of by Intuition, and your program does not even
  9. need to know about it if you do not want.
  10.  
  11. The aim with Windows is to make the communication between the
  12. user and the computer as easy as possible. Windows gives the
  13. user a structured display which is easy to understand. It also
  14. allows the user to interact with the programs through graphics
  15. symbols (gadgets) which can be connected to the windows. (See
  16. chapter 4 GADGETS for more information about gadgets.)
  17.  
  18. Windows are working close together with screens, since the
  19. screen's resolution etc affects the way the windows are drawn.
  20. Moving a screen will also result in moving all the windows
  21. connected to that screen.
  22.  
  23.  
  24.  
  25. 2.2  SPECIAL WINDOWS
  26.  
  27. The normal windows are rectangular boxes with a border around.
  28. However, there exist some special types of windows:
  29.  
  30.  
  31.  
  32. 2.2.1  BACKDROP WINDOWS
  33.  
  34. Backdrop Windows will always be behind any other windows. This
  35. allows you to have a window in the bottom of the display, and
  36. it will stay there, even if the user is using the "depth-
  37. arrange gadgets".
  38.  
  39. Backdrop Windows differ from other windows since:
  40.  
  41. - It will always open behind all other windows, including other
  42.   already opened Backdrop Windows.
  43.  
  44. - The "close-window gadget" is the only System Gadget you can
  45.   attach to a Backdrop Window. (You can of course attach your
  46.   own gadgets as usual.)
  47.  
  48. - It will always be behind any other windows. 
  49.  
  50. The Backdrop Window is very handy when you want to have a
  51. bottom drawing (for example your main display), with some tools
  52. etc on top of the bottom window. This allows the user to move
  53. around your tools as he/she wants without needing to worry
  54. about hiding the windows behind the main display.
  55.  
  56. Drawing into a Backdrop Window instead of the screen itself is
  57. very common since you can then not draw anything at the wrong
  58. moment. If a menu (See chapter 5 MENUS for more information) is
  59. displayed, the drawing routines will wait automatically, and
  60. will therefore not destroy the menu, as it would have happened
  61. if you were drawing directly into the screen.
  62.  
  63.  
  64.  
  65. 2.2.2  BORDERLESS WINDOWS
  66.  
  67. Borderless windows are as normal windows except that they
  68. (surprise, surprise) do not have any borders. It is very common
  69. to combine a Borderless window with a Backdrop window, to cover
  70. a screen.
  71.  
  72. It can be confusing for the user if a Borderless window does
  73. not cover the entire display, since he/she will not be able to
  74. see where the window's edges are. It is therefore normally
  75. best to make a Borderless window as big as the screen.
  76.  
  77.  
  78.  
  79. 2.2.3  GIMMEZEROZERO WINDOWS
  80.  
  81. A Gimmezerozero Window is as a normal window, except that it
  82. consist of two drawing areas: one Outer and one Inner window.
  83. The Outer window is used for displaying the borders, system
  84. gadgets etc, while the Inner window is only used by yourself.
  85.  
  86. If you are drawing into a normal window you need to start some
  87. pixels down/out (11, 1), so you do not draw into the borders
  88. etc. However, if you are drawing into a Gimmezerozero Window
  89. you do not need to make any adjustments. The top left corner of
  90. your inner window is always at the position (0,0).
  91.  
  92. Gimmezerozero Windows are therefore very handy if you want to
  93. make a lot of drawings, without wanting to worry about the
  94. borders. The disadvantages is that it takes more memory and
  95. processing time than a normal window.
  96.  
  97.  
  98.  
  99. 2.2.4  SUPERBITMAP WINDOWS
  100.  
  101. If you are using a SuperBitMap Window you allocate display
  102. memory yourself for the window instead of letting Intuition
  103. take care of it. The advantage is that you can define a larger
  104. drawing area than the size of the window. You can then scroll
  105. the drawing area inside the window. A good example of this are
  106. the demo programs that followed with you Workbench disk when
  107. you bought your computer.
  108.  
  109. It normally best to combine a SuperBitMap Window together with
  110. a Gimmezerozero Window. The borders etc will then NOT be drawn
  111. into your SuperBitMap, and will instead be drawn in the Outer
  112. window. This allows you to make whatever you want with the
  113. inner window without destroying any borders etc.
  114.  
  115.  
  116.  
  117. 2.3  SYSTEM GADGETS
  118.  
  119. The System Gadgets enables the user to move the window, resize
  120. it, push it behind other windows etc, without your program even
  121. knowing about it. The System Gadgets are controlled by
  122. Intuition, and are always looking the same. The only thing you
  123. need to do is to tell Intuition which gadgets you want, and the
  124. rest is done for you.
  125.  
  126. The five System Gadgets are placed like this:
  127.  
  128.  1       2       3  4
  129. [*][***********][*][*]
  130. |                    |
  131. |       WINDOW       |
  132. |                    |
  133. |                    |
  134. |__________________[*]
  135.                     5
  136.  
  137. 1  Close Gadget. Press this to close the window. (This is the
  138.    only System Gadget which your program have to respond to.
  139.    Your program will be told that the user has clicked on the
  140.    Close Gadget, but you need to close the window yourself by
  141.    calling the function CloseWindow().)
  142.  
  143. 2  Drag Gadget. Pressing the left mouse button somewhere on it
  144.    and move the mouse while the button is still pressed, will
  145.    move the window. If your window has a title it will be
  146.    displayed over the Drag Gadget, but will not interfere with
  147.    it.
  148.  
  149. 3  Depth-Arrangement Gadget BACK. Clicking on this gadget will
  150.    push the window behind all other windows.
  151.  
  152. 4  Depth-Arrangement Gadget UP. Clicking on this gadget will
  153.    put the window in front of all other windows.
  154.  
  155. 5  Sizing Gadget. Pressing the left mouse button somewhere on
  156.    it and move the mouse while the button is still pressed,
  157.    will change the size of the window.
  158.  
  159.  
  160.  
  161. 2.4  REDRAWING THE WINDOW DISPLAY
  162.  
  163. Since windows can be dragged around the screen it is very
  164. common that they sometimes overlap each other. If the user is
  165. then moving away the top window, the bottom window has to be
  166. refreshed.
  167.  
  168. There exist two methods of redrawing the window:
  169. - Simple Refresh. Intuition will only tell you that you need
  170.   to refresh it, and your program has to redraw everything
  171.   itself.
  172. - Smart Refresh. Intuition saves the obscured pieces, and
  173.   replaces them automatically. Needs more memory than Simple
  174.   Refresh, but redraws the display much faster.
  175.  
  176. If you have a SuperBitMap Window, you have allocated the
  177. display memory yourself, and your window will therefore not be
  178. destroyed by other windows.
  179.  
  180. If you change the size of a Simple Refresh Window, or it is
  181. revealed after having been overlapped, Intuition will tell you
  182. that you need to refresh the window. A Smart Refresh Window
  183. will only ask you to redraw its display if you enlarged it.
  184.  
  185. The IDCMP message "REFRESHWINDOW" tells you that the window
  186. needs to be refreshed. (See chapter 8 IDCMP for more about
  187. IDCMP flags.)
  188.  
  189. IMPORTANT! If your program receive a REFRESHWINDOW message you
  190. must call the functions BeginRefresh() - EndRefresh():
  191.  
  192. - BeginRefresh() will make the redrawing as fast as possible.
  193.   Only the destroyed pieces of the window will be refreshed.
  194.  
  195. - EndRefresh() tells Intuition that you are finished with the
  196.   redrawing.
  197.  
  198. If you receive a REFRESHWINDOW message and you do not want to
  199. redraw the display, you should still call the two functions.
  200. This will clear up the system and reorganize the Layer Library.
  201.  
  202.  
  203.  
  204. 2.5  INITIALIZE A WINDOW
  205.  
  206. Before you can open a window you need to initialize a NewWindow
  207. structure which looks like this:
  208.  
  209. struct NewWindow
  210. {
  211.   SHORT LeftEdge, TopEdge;
  212.   SHORT Width, Height;
  213.   UBYTE DetailPen, BlockPen;
  214.   ULONG IDCMPFlags;
  215.   ULONG Flags;
  216.   struct Gadget *FirstGadget;
  217.   struct Image *CheckMark;
  218.   UBYTE *Title;
  219.   struct Screen *Screen;
  220.   struct BitMap *BitMap;
  221.   SHORT MinWidth, MinHeight;
  222.   SHORT MaxWidth, MaxHeight;
  223.   USHORT Type;
  224. };
  225.  
  226. LeftEdge:     Initial x position of the window.
  227.  
  228. TopEdge:      Initial y position of the window.
  229.  
  230. Width:        Initial width of the window. If the window is
  231.               connected to a high-resolution screen, it can be
  232.               anything between 1 and 640. Otherwise (low-
  233.               resolution screen) it can be between 1 and 320.
  234.  
  235. Height: