Fenster.h 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745
  1. #ifndef Fenster_H
  2. #define Fenster_H
  3. #include "Array.h"
  4. #include "Zeichnung.h"
  5. namespace Framework
  6. {
  7. class VScrollBar; //! Scroll.h
  8. class HScrollBar; //! Scroll.h
  9. class TextFeld; //! TextFeld.h
  10. class Rahmen; //! Rahmen.h
  11. class Bildschirm; //! Bildschirm.h
  12. class AlphaFeld; //! AlphaFeld.h
  13. class Schrift; //! Schrift.h
  14. class Text; //! Text.h
  15. class Bild; //! Bild.h
  16. class WFenster; //! from this file
  17. class WFensterArray; //! from this file
  18. class Fenster; //! from this file
  19. #ifdef WIN32
  20. //! Creates a normal window class of the Windows API
  21. //! \param hInst The HINSTANCE of the program (passed by the Framework to
  22. //! the start function in the Startparam structure)
  23. DLLEXPORT WNDCLASS F_Normal(HINSTANCE hInst);
  24. //! Creates a normal window class of the Windows API
  25. //! \param hInst The HINSTANCE of the program (passed by the Framework to
  26. //! the start function in the Startparam structure)
  27. DLLEXPORT WNDCLASSEX F_NormalEx(HINSTANCE hInst);
  28. //! Framework function that processes all messages from Windows or other
  29. //! processes
  30. DLLEXPORT LRESULT CALLBACK WindowProc(
  31. HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
  32. //! Starts a loop that processes user input. The loop runs until
  33. //! StopNachrichtenSchleife is called somewhere in the program
  34. DLLEXPORT void StartNachrichtenSchleife();
  35. //! Stops the execution of the framework's message loop.
  36. //! \param hwnd A handle to any framework window that can receive
  37. //! messages. Required to send a message so that StartNachrichtenSchleife
  38. //! stops waiting and exits immediately
  39. DLLEXPORT void StopNachrichtenSchleife(HWND hwnd);
  40. //! Translates a keycode sent by Windows into the character of the
  41. //! pressed key
  42. DLLEXPORT void CalculateEnteredString(
  43. int virtualKeyCode, int scanCode, TastaturEreignis& te);
  44. //! Class for a Windows API window
  45. class WFenster : public virtual ReferenceCounter
  46. {
  47. private:
  48. HWND hWnd; //! Handle to the window
  49. int style;
  50. void* makParam;
  51. void* sakParam;
  52. void* takParam;
  53. MausAktion mausAktion;
  54. std::function<void(void*, void*)> vCloseAktion;
  55. std::function<void(void*, void*)> nCloseAktion;
  56. TastaturAktion tastaturAktion;
  57. Bildschirm* screen;
  58. int mx, my;
  59. bool verschiebbar;
  60. HWND rahmen;
  61. HBITMAP bitmap;
  62. HDC hdc;
  63. public:
  64. //--Constructor--
  65. DLLEXPORT WFenster();
  66. //--Constructor--
  67. //! \param hwnd A handle to the window that should be managed by this
  68. //! class
  69. DLLEXPORT WFenster(HWND hWnd);
  70. //--Destructor--
  71. DLLEXPORT ~WFenster();
  72. //! Creates the window
  73. //! \param style The style of the window. Example: WS_OVERLAPPEDWINDOW
  74. //! (for a normal window) \param wc The Windows API window class from
  75. //! which a window should be created. Can be created with the F_Normal
  76. //! function. lpszClassName must have been set.
  77. DLLEXPORT void erstellen(int style, WNDCLASS wc);
  78. //! Creates the window
  79. //! \param exStyle The EX style of the window. Example:
  80. //! WS_EX_OVERLAPPEDWINDOW (for a normal window)
  81. //! \param style The style of the window. Example: WS_OVERLAPPEDWINDOW
  82. //! (for a normal window) \param wc The Windows API window class from
  83. //! which a window should be created. Can be created with the F_Normal
  84. //! function. lpszClassName must have been set.
  85. DLLEXPORT void erstellenEx(int exStyle, int style, WNDCLASSEX wc);
  86. //! Sets the display mode of the window
  87. //! \param mod The mode. Example: SW_SHOWNORMAL to show the window
  88. //! and SW_HIDE to minimize it
  89. DLLEXPORT void setAnzeigeModus(int mod);
  90. //! Sets the focus to the window so that keyboard input is received
  91. DLLEXPORT bool setFokus();
  92. //! Sets the position of the window on the screen
  93. //! \param pos The position in pixels
  94. DLLEXPORT void setPosition(const Punkt& pos);
  95. //! Sets the position of the window on the screen
  96. //! \param x The X position in pixels
  97. //! \param y The Y position in pixels
  98. DLLEXPORT void setPosition(int x, int y);
  99. //! Sets the size of the window on the screen
  100. //! \param gr\u00f6\u00dfe The size in pixels
  101. DLLEXPORT void setSize(Punkt& groesse);
  102. //! Sets the size of the window on the screen
  103. //! \param breite The width in pixels
  104. //! \param h\u00f6he The height in pixels
  105. DLLEXPORT void setSize(int breite, int hoehe);
  106. //! Sets the position and size of the window
  107. //! \param pos The position in pixels
  108. //! \param gr\u00f6\u00dfe The size in pixels
  109. DLLEXPORT void setBounds(const Punkt& pos, const Punkt& groesse);
  110. //! Sets the screen object used to forward keyboard and mouse input
  111. //! to the framework's objects. Must be called with 0 before the
  112. //! window is destroyed. \param screen The screen object
  113. DLLEXPORT void setBildschirm(Bildschirm* screen);
  114. //! Destroys the window
  115. DLLEXPORT void zerstoeren();
  116. //! Processes mouse messages. Calls MausAktion and forwards events
  117. //! to the screen with objects if MausAktion returns 1
  118. //! \param me The event triggered by the mouse input
  119. DLLEXPORT void doMausAktion(MausEreignis& me);
  120. //! Calls the pre-close callback function
  121. DLLEXPORT void doVSchliessAktion();
  122. //! Calls the post-close callback function
  123. DLLEXPORT void doNSchliessAktion();
  124. //! Processes keyboard messages. Calls TastaturAktion and forwards
  125. //! events to the screen with objects if TastaturAktion returns 1
  126. //! \param me The event triggered by the keyboard input
  127. DLLEXPORT void doTastaturAktion(TastaturEreignis& et);
  128. //! Makes the window frame visible if ladeRahmenFenster was called
  129. DLLEXPORT void doRestoreMessage();
  130. //! Sets the parameter passed to the callback function on a mouse event
  131. //! \param p The parameter
  132. DLLEXPORT void setMausEreignisParameter(void* p);
  133. //! Sets the parameter passed to the callback function on close
  134. //! \param p The parameter
  135. DLLEXPORT void setSchliessEreignisParameter(void* p);
  136. //! Sets the parameter passed to the callback function on a keyboard
  137. //! event
  138. //! \param p The parameter
  139. DLLEXPORT void setTastaturEreignisParameter(void* p);
  140. //! Sets the callback function to be called on a mouse event.
  141. //! If the callback returns 0 or was not set, the mouse event is not
  142. //! further processed by the window. The standard function __ret1ME
  143. //! can be used, defined in MausEreignis.h and always returns 1
  144. //! \param ak A pointer to the callback function
  145. DLLEXPORT void setMausAktion(MausAktion ak);
  146. //! Sets the callback function to be called before closing.
  147. //! \param ak A pointer to the callback function
  148. DLLEXPORT void setVSchliessAktion(std::function<void(void*, void*)> ak);
  149. //! Sets the callback function to be called after closing.
  150. //! \param ak A pointer to the callback function
  151. DLLEXPORT void setNSchliessAktion(std::function<void(void*, void*)> ak);
  152. //! Sets the callback function to be called on a keyboard event.
  153. //! If the callback returns 0 or was not set, the keyboard event is not
  154. //! further processed. The standard function __ret1TE can be used,
  155. //! defined in TastaturEreignis.h and always returns 1. Other standard
  156. //! functions are _nurNummernTE and _nurHexTE also from
  157. //! TastaturEreignis.h \param ak A pointer to the callback function
  158. DLLEXPORT void setTastaturAktion(TastaturAktion ak);
  159. //! Sets the handle to the window that should be managed by this class
  160. //! \param hwnd The handle
  161. DLLEXPORT void setFensterHandle(HWND hWnd);
  162. //! Specifies whether the window can be moved by dragging with the mouse
  163. //! \param verschiebbar 1 if the window may be moved
  164. DLLEXPORT void setVerschiebbar(bool verschiebbar);
  165. //! Setzt einen Transparenten Rahmen um das Fenster
  166. //! \param zBild Ein Bild, was den Rahmen enthaelt
  167. //! \param hins Die HINSTANCE des Programms (Wird vom Framework an die
  168. //! Start funktion in der Startparam Struktur uebergeben)
  169. DLLEXPORT void ladeRahmenFenster(Bild* zBild,
  170. HINSTANCE
  171. hinst); //! setzt einen Transpatenten Rahmen um das Fenster
  172. //! Gibt das Handle des verwalteten Fensters zurueck
  173. DLLEXPORT HWND getFensterHandle() const;
  174. //! Gibt die Position des Fensters in Pixeln zurueck
  175. DLLEXPORT Punkt getPosition() const;
  176. //! Gibt die Groesse des Fensters in Pixeln zurueck
  177. DLLEXPORT Punkt getGroesse() const;
  178. //! Gibt die Groesse des Fensterkoerpers in Pixeln zurueck
  179. DLLEXPORT Punkt getKoerperGroesse() const;
  180. //! Gibt die Breite des Fensterkoerpers in Pixeln zurueck
  181. DLLEXPORT int getKoerperBreite() const;
  182. //! Gibt die Hoehe des Fensterkoerpers in Pixeln zurueck
  183. DLLEXPORT int getKoerperHoehe() const;
  184. //! Gibt zurueck, ob eine Rueckruffunktion fuer ein MausEreignis gesetzt
  185. //! wurde
  186. DLLEXPORT bool hatMausAktion() const;
  187. //! Gibt zurueck, ob eine Rueckruffunktion fuer das Ereignis vor dem
  188. //! Schliessen des Fensters gesetzt wurde
  189. DLLEXPORT bool hatVSchliessAktion() const;
  190. //! Gibt zurueck, ob eine Rueckruffunktion fuer das Ereignis nach dem
  191. //! Schliessen des Fensters gesetzt wurde
  192. DLLEXPORT bool hatNSchliessAktion() const;
  193. //! Gibt zurueck, ob eine Rueckruffunktion fuer ein TastaturEreignis
  194. //! gesetzt wurde
  195. DLLEXPORT bool hatTastaturAktion() const;
  196. //! Gibt den Bidschirm zurueck, an dessen Zeichnungen die Ereignisse
  197. //! Weitergegeben werden
  198. DLLEXPORT Bildschirm* getBildschirm() const;
  199. //! Gibt den Bildschirm ohne erhoehten Reference Counter zurueck, an
  200. //! dessen Zeichnungen die Ereignisse Weitergegeben werden
  201. DLLEXPORT Bildschirm* zBildschirm() const;
  202. //! Gibt zurueck, ob das Fenster verschiebbar ist
  203. DLLEXPORT bool istVerschiebbar() const;
  204. };
  205. //! Verwaltet alle Windows API Fenster im Framework
  206. class WFensterArray
  207. {
  208. private:
  209. WFensterArray* next;
  210. WFenster* This;
  211. public:
  212. //! Konstruktor
  213. DLLEXPORT WFensterArray();
  214. //! Destruktor
  215. DLLEXPORT ~WFensterArray();
  216. //! Fuegt ein neues Fenster hinzu
  217. //! \param fenster Das Fenster
  218. DLLEXPORT bool addFenster(WFenster* fenster);
  219. //! Entfernt ein Fenster
  220. //! \param fenster Das Fenster
  221. DLLEXPORT bool removeFenster(WFenster* fenster);
  222. //! gibt das naechste Element zurueck
  223. DLLEXPORT WFensterArray* getNext();
  224. //! Setzt das naechste Element auf 0
  225. DLLEXPORT void setNext0();
  226. //! Loescht das Element
  227. DLLEXPORT void del();
  228. //! Sendet das Ereignis, was vor dem Schliessen aufgerufen wird an ein
  229. //! bestimmtes Fenster \param hWnd Das Handle zum Fenster
  230. DLLEXPORT bool sendVSchliessMessage(HWND hWnd);
  231. //! Sendet das Ereignis, was nach dem Schliessen aufgerufen wird an ein
  232. //! bestimmtes Fenster \param hWnd Das Handle zum Fenster
  233. DLLEXPORT bool sendNSchliessMessage(HWND hwnd);
  234. //! Sendet ein Maus Ereignis an ein bestimmtes Fenster
  235. //! \param hWnd Das Handle zum Fenster
  236. //! \param me Das Ereignis, was durch die Mauseingabe ausgeloesst wurde
  237. DLLEXPORT bool sendMausMessage(HWND hWnd, MausEreignis& me);
  238. //! Sendet ein Tastatur Ereignis an ein bestimmtes Fenster
  239. //! \param hWnd Das Handle zum Fenster
  240. //! \param me Das Ereignis, was durch die Tastatureingabe ausgeloesst
  241. //! wurde
  242. DLLEXPORT bool sendTastaturMessage(HWND hwnd, TastaturEreignis& te);
  243. //! Sendet das Ereignis, was durch das oeffnen des Fensters ausgeloesst
  244. //! wurde an ein bestimmtes Fenster \param hWnd Das Handle zum Fenster
  245. DLLEXPORT bool sendRestoreMessage(HWND hwnd);
  246. //! Gibt das Fenster dieses Eintrags zurueck
  247. DLLEXPORT WFenster* getThis();
  248. };
  249. //! Erzeugt ein Windows API Popup Fenster, mit einer Meldung
  250. //! \param hWnd Ein Handle zu dem Fenster, was blockiert werden soll, bis
  251. //! das Popup Fenster geschlossen wurde. Kann 0 sein \param titel Der Titel
  252. //! des Popup Fensters \param meldung Die Meldung, die im Fenster angezeigt
  253. //! werden soll \param style Bestimmt das Icon, was im Fenster angezeigt
  254. //! wird. Beispiel: MB_ICONERROR, MB_ICONINFORMATION
  255. DLLEXPORT void WMessageBox(
  256. HWND hWnd, Text* titel, Text* meldung, UINT style);
  257. #endif
  258. //! Fenster Klasse im Programm
  259. class Fenster : public Zeichnung
  260. {
  261. public:
  262. class Style : public Zeichnung::Style
  263. {
  264. public:
  265. //! Legt fest, ob der Koerper des Fensters einen Hintergrund hat
  266. static const __int64 BodyHintergrund = 0x000000008;
  267. //! Legt fest, ob beim zeichnen des Koerperhintergrundes alpha
  268. //! blending verwendet werden soll
  269. static const __int64 BodyHAlpha = 0x000000010;
  270. //! Legt fest, ob ein Bild als Hintergrund des Koerpers verwendet
  271. //! werden soll
  272. static const __int64 BodyHBild = 0x000000020;
  273. //! Legt fest, ob der Koerper einen Farbuebergang besitzt
  274. static const __int64 BodyBuffered = 0x000000040;
  275. //! Legt fest, ob das Fenster eine Titelleiste hat
  276. static const __int64 Titel = 0x000000080;
  277. //! Legt fest, ob die titelleiste des Fensters einen Hintergrund hat
  278. static const __int64 TitelHintergrund = 0x000000100;
  279. //! Legt fest, ob zum zeichnen des Titel Hintergrundes alpha
  280. //! blending soll
  281. static const __int64 TitelHAlpha = 0x000000200;
  282. //! Legt fest, ob fuer den Titelhintergrund ein Bild verwendet werden
  283. //! soll
  284. static const __int64 TitelHBild = 0x000000400;
  285. //! Legt fest, ob die Titel Leiste einen Farbuebergang besitzt
  286. static const __int64 TitelBuffered = 0x000000800;
  287. //! Legt fest, ob in der Titelleiste ein Knopf zum Schliessen des
  288. //! Fensters angezeigt werden soll
  289. static const __int64 Closable = 0x000001000;
  290. //! Legt fest, ob der Schliessen Knopf einen Hintergrund hat
  291. static const __int64 ClosingHintergrund = 0x000002000;
  292. //! Legt fest, ob beim Zeichnen des Hintergrunds des Schliessen
  293. //! Knopfes alpha blending verwendet werden soll
  294. static const __int64 ClosingHAlpha = 0x000004000;
  295. //! Legt fest, ob fuer den Hintergrund des Schliessen Knopfes ein
  296. //! Bild soll
  297. static const __int64 ClosingHBild = 0x000008000;
  298. //! Legt fest, ob der Schliessen Knopf einen Farbuebergang besitzt
  299. static const __int64 ClosingBuffer = 0x000010000;
  300. //! Legt fest, ob der Schliessen Knopf einen Farbuebergang besitzt,
  301. //! waehrend er gedrueckt wird
  302. static const __int64 ClosingKlickBuffer = 0x000020000;
  303. //! Legt fest, ob der Benutzer das Fenster durch gedrueckt halten der
  304. //! linken Maustaste in der Titelleiste das Fenster verschieben kann
  305. static const __int64 Beweglich = 0x000040000;
  306. //! Legt fest, ob der Benutzer die Breite des Fensters durch das
  307. //! gedrueckt halten der linken Maustaste auf dem rechten oder linken
  308. //! Fensterrand veraendern kann
  309. static const __int64 BreiteChangeable = 0x000080000;
  310. //! Legt fest, ob der Benutzer die Hoehe des Fensters durch das
  311. //! gedrueckt halten der linken Maustaste auf dem oberen oder unteren
  312. //! Fensterrand veraendern kann
  313. static const __int64 HeightChangeable = 0x000100000;
  314. //! Legt fest, ob der Benutzer die Hoehe der Titel Leiste durch
  315. //! gedrueckt halten der linken Maustaste auf dem unteren Rand der
  316. //! Titelleiste veraendern kann
  317. static const __int64 TitelHeightChangeable = 0x000200000;
  318. //! Legt fest, ob es eine Minimale Breite des Fensters gibt
  319. static const __int64 MinBr = 0x000400000;
  320. //! Legt fest, ob es eine Maximale Breite des Fensters gibt
  321. static const __int64 MaxBr = 0x000800000;
  322. //! Legt fest, ob es eine Minimale Hoehe des Fensters gibt
  323. static const __int64 MinHi = 0x001000000;
  324. //! Legt fest, ob es eine Maximale Hoehe des Fensters gibt
  325. static const __int64 MaxHi = 0x002000000;
  326. //! Legt fest, ob es eine Minimale Breite des Koerpers gibt
  327. static const __int64 BodyMinBr = 0x004000000;
  328. //! Legt fest, ob es eine Maximale Breite des Koerpers gibt
  329. static const __int64 BodyMaxBr = 0x008000000;
  330. //! Legt fest, ob es eine Minimale Hoehe des Koerpers gibt
  331. static const __int64 BodyMinHi = 0x010000000;
  332. //! Legt fest, ob es eine Maximale Hoehe des Koerpers gibt
  333. static const __int64 BodyMaxHi = 0x020000000;
  334. //! Legt fest, ob eine ScrollBar am rechten Fensterrand erscheinen
  335. //! soll
  336. static const __int64 VScroll = 0x040000000;
  337. //! Legt fest, ob eine ScrollBar am unteren Fensterrand erscheinen
  338. //! soll
  339. static const __int64 HScroll = 0x080000000;
  340. //! Legt fest, ob die Mausereignisse auch noch von Zeichnungen
  341. //! hinter dem Fenster verarbeitet werden sollen
  342. static const __int64 METransparenz = 0x100000000;
  343. //! Legt fest, ob das Fenster einen Rahmen haben soll
  344. static const __int64 Rahmen = 0x200000000;
  345. //! Legt fest, ob die linke Seite des Fensters fixiert ist wenn die
  346. //! groesse aenderbar ist
  347. static const __int64 LeftPositionFixed = 0x400000000;
  348. //! Legt fest, ob die rechte Seite des Fensters fixiert ist wenn die
  349. //! groesse aenderbar ist
  350. static const __int64 RightPositionFixed = 0x800000000;
  351. //! Legt fest, ob die obere Seite des Fensters fixiert ist wenn die
  352. //! groesse aenderbar ist
  353. static const __int64 TopPositionFixed = 0x1000000000;
  354. //! Legt fest, ob die untere Seite des Fensters fixiert ist wenn die
  355. //! groesse aenderbar ist
  356. static const __int64 BottomPositionFixed = 0x2000000000;
  357. //! Legt fest, ob die Position und Groesse des Titel Textfeldes
  358. //! unveraendert bleiben soll
  359. static const __int64 CustomTitle = 0x4000000000;
  360. //! Vereint die Flags MinHoe, MaxHoe, MaxBr, MaxHoe
  361. static const __int64 min_max = MinHi | MaxHi | MaxBr | MaxHi;
  362. //! Vereint die Flags Koerper_minBr, Koerper_maxBr, Koerper_minHoe,
  363. //! Koerper_maxBr
  364. static const __int64 body_min_max
  365. = BodyMinBr | BodyMaxBr | BodyMinHi | BodyMaxBr;
  366. //! Vereint die Flags VScroll, HScroll
  367. static const __int64 scroll = VScroll | HScroll;
  368. //! Vereint die Flags TitelHoeheAEnderbar, HoeheAEnderbar,
  369. //! BreiteAEnderbar, Beweglich
  370. static const __int64 nichtfixiert = TitelHeightChangeable
  371. | HeightChangeable
  372. | BreiteChangeable | Beweglich;
  373. //! Vereint die Flags Sichtbar, Erlaubt, Rahmen, Titel,
  374. //! TitelBuffered, Schliessbar, SchliessHBild, SchliessKlickBuffer,
  375. //! Beweglich
  376. static const __int64 normal
  377. = Sichtbar | Erlaubt | Rahmen | Titel | TitelBuffered | Closable
  378. | ClosingHBild | ClosingKlickBuffer | Beweglich
  379. | MEIgnoreVerarbeitet | MEIgnoreSichtbar | MEIgnoreParentInside
  380. | MEIgnoreInside;
  381. };
  382. private:
  383. MausAktion closingMe;
  384. void* closingMeParam;
  385. Rahmen* rahmen;
  386. TextFeld* titel;
  387. RCArray<Zeichnung>* members;
  388. int bgBodyColor;
  389. Bild* bgBodyPicture;
  390. AlphaFeld* bodyBuffer;
  391. int bgClosingFarbe;
  392. Bild* bgClosingBild;
  393. AlphaFeld* closeBuffer;
  394. AlphaFeld* closeKlickBuffer;
  395. VScrollBar* vScroll;
  396. HScrollBar* hScroll;
  397. Punkt min, max;
  398. Punkt kMin, kMax;
  399. bool closeKlick, klick;
  400. int moving;
  401. int mx, my;
  402. protected:
  403. //! Verarbeitet Maus Nachrichten
  404. //! \param me Das Ereignis, was durch die Mauseingabe ausgeloesst wurde
  405. DLLEXPORT void doMausEreignis(MausEreignis& me, bool userRet) override;
  406. public:
  407. //! Konstruktor
  408. DLLEXPORT Fenster();
  409. //! Destruktor
  410. DLLEXPORT virtual ~Fenster();
  411. //! Setzt einen Zeiger auf den Rahmen des Fensters
  412. //! \param ram Der Rahmen
  413. DLLEXPORT void setRahmenZ(Rahmen* ram);
  414. //! Setzt die Farbe des Fensterrahmens
  415. //! \param f Die Farbe im A8R8G8B8 Format
  416. DLLEXPORT void setRFarbe(int f);
  417. //! Setzt die Breite des Fensterrahmens
  418. //! \param br Die Breite in Pixeln
  419. DLLEXPORT void setRBreite(int br);
  420. //! Setzt den Titel des Fensters
  421. //! \param txt Der Text
  422. DLLEXPORT void setTitel(Text* txt);
  423. //! Setzt einen Zeiger auf den Titel Text
  424. //! \param txt Der neue Text
  425. DLLEXPORT void setTitelZ(Text* txt);
  426. //! Setzt den Titel des Fensters
  427. //! \param txt Der Textv
  428. DLLEXPORT void setTitel(const char* txt);
  429. //! Setzt einen Zeiger auf das TextFeld, das den Titeltext zeichnet
  430. //! \param tf Das TextFeld
  431. DLLEXPORT void setTTextFeldZ(TextFeld* tf);
  432. //! Setzt die Schrift, die fuer den Titel verwendet werden soll
  433. //! \param schrift Die Schrift
  434. DLLEXPORT void setTSchriftZ(Schrift* schrift);
  435. //! Setzt die Farbe der Schrift, die fuer den Titel verwendet werden soll
  436. //! \param f Die Farbe im A8R8G8B8 Format
  437. DLLEXPORT void setTSFarbe(int f);
  438. //! Setzt die Groesse der Schrift, die fuer den Titel verwendet werden
  439. //! soll
  440. //! \param gr Die Hoehe einer zeile in Pixeln
  441. DLLEXPORT void setTSSize(int gr);
  442. //! Setzt die Hintergrund Farbe des Titels
  443. //! \param f Die Farbe im A8R8G8B8 Format
  444. DLLEXPORT void setTBgFarbe(int f);
  445. //! Setzt einen Zeiger auf den Farbuebergang des Titels
  446. //! \param af Der Farbuebergang
  447. DLLEXPORT void setTAlphaFeldZ(AlphaFeld* af);
  448. //! Setzt die Farbe des Farbuebergangs des Titels
  449. //! \param f Die Farbe im A8R8G8B8 Format
  450. DLLEXPORT void setTAfFarbe(int f);
  451. //! Setzt die Staerke des Farbuebergangs des Titels
  452. //! \param st Die Staerke
  453. DLLEXPORT void setTAfStrength(int st);
  454. //! Setzt das Hintergrund Bild des Titels durch kopieren
  455. //! \param b Das Bild, was kopiert werden soll
  456. DLLEXPORT void setTBgBild(Bild* b);
  457. //! Setzt einen Zeiger auf das Hintergrund Bild des Titels
  458. //! \param b Das Bild
  459. DLLEXPORT void setTBgBildZ(Bild* b);
  460. //! Setzt einen Zeiger auf den Rahmen des Titels
  461. //! \param ram Der Rahmen
  462. DLLEXPORT void setTRahmenZ(Rahmen* ram);
  463. //! Setzt die Farbe des Rahmens des Titels
  464. //! \param f Die Farbe im A8R8G8B8 Format
  465. DLLEXPORT void setTRFarbe(int f);
  466. //! Setzt die Breite des Rahmens des Titels
  467. //! \param br Die Breite in Pixeln
  468. DLLEXPORT void setTRBreite(int br);
  469. //! Setzt die Hintergrundfarbe des Koerpers
  470. //! \param f Die Farbe im A8R8G8B8 Format
  471. DLLEXPORT void setKBgFarbe(int f);
  472. //! Setzt das Hintergrund Bild des Koerpers durch kopieren
  473. //! \param b Das Bild, das kopiert werden soll
  474. DLLEXPORT void setKBgBild(Bild* b);
  475. //! Setzt einen Zeiger auf das Hintergrund Bild des Koerpers
  476. //! \param b Das Bild
  477. DLLEXPORT void setKBgBildZ(Bild* b);
  478. //! Setzt einen Zeiger auf den Farbuebergang des Koerpers
  479. //! \param af Der Farbuebergang
  480. DLLEXPORT void setKAlphaFeldZ(AlphaFeld* af);
  481. //! Setzt die Farbe des Farbuebergangs des Koerpers
  482. //! \param f Die Farbe im A8R8G8B8 Format
  483. DLLEXPORT void setKAfFarbe(int f);
  484. //! Setzt die Staerke des Farbuebergangs des Koerpers
  485. //! \param st Die Staerke
  486. DLLEXPORT void setKAfStrength(int st);
  487. //! Setzt den Parameter der Rueckruffunktion, die aufgerufen wird, wenn
  488. //! der Schliessen Knopf ein MausEreignis erhaelt \param param Der
  489. //! Parameter
  490. DLLEXPORT void setClosingMeParam(void* param);
  491. //! Setzt die Rueckruffunktion, die Aufgerufen wird, wenn der Schliessen
  492. //! Knopf ein MausEreignis erhaelt Wenn die Rueckruffunktion 0
  493. //! zurueckgiebt, oder nicht gesetzt wurde, wird ein Maus Ereignis von
  494. //! der Zeichnung nicht weiter beachtet Das Fenster wird nicht von
  495. //! selbst geschlossen, sondern sollte in der Rueckruffunktion durch den
  496. //! aufruf von loescheStyle( Fenster::Style::Sichtbar ); geschlossen
  497. //! werden \param ak Ein Zeiger auf die Rueckruffunktion
  498. DLLEXPORT void setClosingMe(MausAktion closingMe);
  499. //! Setzt die Hintergrund Farbe des Schliessen Knopfes
  500. //! \param f Die Farbe im A8R8G8B8 Format
  501. DLLEXPORT void setSBgFarbe(int f);
  502. //! Setzt das Hintergrund Bild des Schliessen Knopfes durch kopieren
  503. //! \param b Das Bild, das kopiert werden soll
  504. DLLEXPORT void setSBgBild(Bild* b);
  505. //! Setzt einen Zeiger auf das Hintergrund Bild des Schliessen Knopfes
  506. //! \param b Das Bild
  507. DLLEXPORT void setSBgBildZ(Bild* b);
  508. //! Setzt einen Zeiger auf den Farbuebergang des Schliessen Knopfes
  509. //! \param af Der Farbuebergang
  510. DLLEXPORT void setSAlphaFeldZ(AlphaFeld* af);
  511. //! Setzt die Farbe des Farbuebergangs des Schliessen Knopfes
  512. //! \param f Die Farbe im A8R8G8B8 Format
  513. DLLEXPORT void setSAfFarbe(int f);
  514. //! Setzt die Staerke des Farbuebergangs des Schliessen Knopfes
  515. //! \param st Die Staerke
  516. DLLEXPORT void setSAfStrength(int st);
  517. //! Setzt einen Zeiger auf den Farbuebergang, der beim Klicken des
  518. //! Schliessen Knopfes verwendet wird \param af Der Farbuebergnag
  519. DLLEXPORT void setSKAlphaFeldZ(AlphaFeld* af);
  520. //! Setzt die Farbe des Farbuebergangs, der beim Klicken des Schliessen
  521. //! Knopfes verwendet wird \param f Die Farbe im A8R8G8B8 Format
  522. DLLEXPORT void setSKAfFarbe(int f);
  523. //! Setzt die Staerke des Farbuebergangs, der beim Klicken des Schliessen
  524. //! Knopfes verwendet wird \param st Die Staerke
  525. DLLEXPORT void setSKAfStrength(int st);
  526. //! Setzt die Minimale Groesse des Fensters
  527. //! \param mx Die Minimale Breite in Pixeln
  528. //! \param my Die Minimale Hoehe in Pixeln
  529. DLLEXPORT void setMin(int mx, int my);
  530. //! Setzt die Minimale Groesse des Fensters
  531. //! \param min Die Minimale Breite und Hoehe in Pixeln
  532. DLLEXPORT void setMin(const Punkt& min);
  533. //! Setzt die Maximale Groesse des Fensters
  534. //! \param mx Die Maximale Breite in Pixeln
  535. //! \param my Die Maximale Hoehe in Pixeln
  536. DLLEXPORT void setMax(int mx, int my);
  537. //! Setzt die Maximale Groesse des Fensters
  538. //! \param min Die Maximale Breite und Hoehe in Pixeln
  539. DLLEXPORT void setMax(const Punkt& max);
  540. //! Setzt die Minimale Groesse des Fenster Koerpers
  541. //! \param mx Die Minimale Breite in Pixeln
  542. //! \param my Die Minimale Hoehe in Pixeln
  543. DLLEXPORT void setKMin(int mx, int my);
  544. //! Setzt die Minimale Groesse des Fenster Koerpers
  545. //! \param min Die Minimale Breite und Hoehe in Pixeln
  546. DLLEXPORT void setKMin(const Punkt& min);
  547. //! Setzt die Maximale Groesse des Fenster Koerpers
  548. //! \param mx Die Maximale Breite in Pixeln
  549. //! \param my Die Maximale Hoehe in Pixeln
  550. DLLEXPORT void setKMax(int mx, int my);
  551. //! Setzt die Maximale Groesse des Fenster Koerpers
  552. //! \param min Die Maximale Breite und Hoehe in Pixeln
  553. DLLEXPORT void setKMax(const Punkt& max);
  554. //! Setzt einen Zeiger auf die Scrollbar am unteren Rand des Fensters
  555. //! \param hScroll Die Scrollbar
  556. DLLEXPORT void setHScrollBarZ(HScrollBar* hScroll);
  557. //! Setzt einen Zeiger auf die Scrollbar am rechten Rand des Fensters
  558. //! \param vScroll Die Scrollbar
  559. DLLEXPORT void setVScrollBarZ(VScrollBar* vScroll);
  560. //! Setzt die Maximale Scroll breite des Fenster Koerpers
  561. //! \param max Die Breite in Pixeln
  562. DLLEXPORT void setHSBMax(int max);
  563. //! Setzt die Maximale Scroll hoehe des Fenster Koerpers
  564. //! \param max Die Hoehe in Pixeln
  565. DLLEXPORT void setVSBMax(int max);
  566. //! Scrollt zu einer bestimmten x Position im Fenster Koerper
  567. //! \param scroll Die Anzahl der Pixel, die der Inhalt nach links
  568. //! verschoben werden soll
  569. DLLEXPORT void setHSBScroll(int scroll);
  570. //! Scrollt zu einer bestimmten y Position im Fenster Koerper
  571. //! \param scroll Die Anzahl der Pixel, die der Inhalt nach oben
  572. //! verschoben werden soll
  573. DLLEXPORT void setVSBScroll(int scroll);
  574. //! Updates the horizontal scrollbar so that the max scroll size is set
  575. //! to the width of the content
  576. DLLEXPORT void updateHScroll();
  577. //! Updates the vertical scrollbar so that the max scroll size is set to
  578. //! the height of the content
  579. DLLEXPORT void updateVScroll();
  580. //! Fuegt dem Fenster eine Zeichnung hinzu
  581. //! \param obj Die Zeichnung
  582. DLLEXPORT virtual void addMember(Zeichnung* obj);
  583. //! sets the position of a member to index. This changes the order of
  584. //! rendering and the order input events are processed
  585. DLLEXPORT void setMemberIndex(Zeichnung* zMember, int index);
  586. //! Entfernt eine Zeichnung aus dem Fenster
  587. //! \param zObj Die Zeichnung (ohne erhoehten reference Counter)
  588. DLLEXPORT virtual void removeMember(Zeichnung* zObj);
  589. //! Entfernt alle Zeichnungen aus dem Fenster
  590. DLLEXPORT virtual void removeAll();
  591. //! Aktualisiert das Objekt. Wird vom Framework aufgerufen
  592. //! \param tickVal Die Zeit in sekunden, die seit dem lezten Aufruf
  593. //! dieser Funktion vergangen ist \return 1, wenn sich etwas veraendert
  594. //! hat und das Bild neu gezeichnet werden muss. 0 sonst
  595. DLLEXPORT bool tick(double tickval) override;
  596. //! Verarbeitet Tastatur Nachrichten
  597. //! \param me Das Ereignis, was durch die Tastatureingabe ausgeloesst
  598. //! wurde
  599. DLLEXPORT void doTastaturEreignis(TastaturEreignis& te) override;
  600. //! Zeichnet das Fentster nach zRObj, falls es sichtbar ist
  601. //! \param zRObj Das Bild, in welches gezeichnet werden soll
  602. DLLEXPORT void render(Bild& zRObj) override;
  603. //! Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurueck
  604. DLLEXPORT int getInnenBreite() const override;
  605. //! Gibt die Hoehe des Innenraumes in der Zeichnung in Pixeln zurueck
  606. DLLEXPORT int getInnenHeight() const override;
  607. //! Gibt den Rahmen des Fensters zurueck
  608. DLLEXPORT Rahmen* getRahmen() const;
  609. //! Gibt den Rahmen des Fensters ohne erhoehen Reference Counter zurueck
  610. DLLEXPORT Rahmen* zRahmen() const;
  611. //! Gibt die Farbe des Rahmens des Fensters im A8R8G8B8 Format zurueck
  612. DLLEXPORT int getRFarbe() const;
  613. //! Gibt die Breite des Rahmens des Fensters in Pixeln zurueck
  614. DLLEXPORT int getRBreite() const;
  615. //! Gibt den Titel des Fensters zurueck
  616. DLLEXPORT Text* getTitel() const;
  617. //! Gibt den Titel des Fensters ohne erhoehten Reference Counter zurueck
  618. DLLEXPORT Text* zTitel() const;
  619. //! Gibt das TextFeld zurueck, das zum Zeichnen des Titels verwendet wird
  620. DLLEXPORT TextFeld* getTTextFeld() const;
  621. //! Gibt das TextFeld ohne erhoehten Reference Counter zurueck, das zum
  622. //! Zeichnen des Titels verwendet wird
  623. DLLEXPORT TextFeld* zTTextFeld() const;
  624. //! Gibt die Schrift zurueck, die fuer den Titel verwendet wird
  625. DLLEXPORT Schrift* getTSchrift() const;
  626. //! Gibt die Schrift ohne erhoeten Reference Counter zurueck, die fuer den
  627. //! Titel verwendet wird
  628. DLLEXPORT Schrift* zTSchrift() const;
  629. //! Gibt die Schrift Farbe des Titels im A8R8G8B8 Format zurueck
  630. DLLEXPORT int getTSFarbe() const;
  631. //! Gibt die Hoehe einer Zeile des Titels in Pixeln zurueck
  632. DLLEXPORT int getTSSize() const;
  633. //! Gibt die Hintergrundfarbe des Titels im A8R8G8B8 Format zurueck
  634. DLLEXPORT int getTBgFarbe() const;
  635. //! Gibt den Farbuebergang des Titels zurueck
  636. DLLEXPORT AlphaFeld* getTAlphaFeld() const;
  637. //! Gibt den Farbuebergang des Titels ohne erhoehten Reference COunter
  638. //! zurueck
  639. DLLEXPORT AlphaFeld* zTAlphaFeld() const;
  640. //! Gibt die Farbe des Farbuebergangs des Titels im A8R8G8B8 Format
  641. //! zurueck
  642. DLLEXPORT int getTAfFarbe() const;
  643. //! Gibt die Staerke des Farbuebergangs des Titels zurueck
  644. DLLEXPORT int getTAfStrength() const;
  645. //! Gibt das Hintergrund Bild des titels zurueck
  646. DLLEXPORT Bild* getTBgBild() const;
  647. //! Gibt das Hintergrund Bild des titels ohne erhoehten Reference Counter
  648. //! zurueck
  649. DLLEXPORT Bild* zTBgBild() const;
  650. //! Gibt den Rahmen des Titels zurueck
  651. DLLEXPORT Rahmen* getTRahmen() const;
  652. //! Gibt den Rahmen des Titels ohne erhoehten Reference Counter zurueck
  653. DLLEXPORT Rahmen* zTRahmen() const;
  654. //! Gibt die Farbe des Rahmens des Titels im A8R8G8B8 Format zurueck
  655. DLLEXPORT int getTRFarbe() const;
  656. //! Gibt die Staerke des Rahmens des Titels zurueck
  657. DLLEXPORT int getTRBreite() const;
  658. //! Gibt die Hintergrund Farbe des Koerpers zurueck
  659. DLLEXPORT int getKBgFarbe() const;
  660. //! Gibt das Hintergrund Bild des Koerpers zurueck
  661. DLLEXPORT Bild* getKBgBild() const;
  662. //! Gibt das Hintergrund Bild des Koerpers ohne erhoehten Reference
  663. //! Counter zurueck
  664. DLLEXPORT Bild* zKBgBild() const;
  665. //! Gibt den Farbuebergang des Koerpers zurueck
  666. DLLEXPORT AlphaFeld* getKAlphaFeld() const;
  667. //! Gibt den Farbuebergang des Koerpers ohne erhoehten Reference Counter
  668. //! zurueck
  669. DLLEXPORT AlphaFeld* zKAlphaFeld() const;
  670. //! Gibt die Farbe des Farbuebergangs des Koerpers im A8R8G8B8 Format
  671. //! zurueck
  672. DLLEXPORT int getKAfFarbe() const;
  673. //! Gibt die Staerke des Farbuebergangs des Koerpers zurueck
  674. DLLEXPORT int getKAfStrength() const;
  675. //! Gibt die Hintergrund Farbe des Schliessen Knopfes im A8R8G8B8 Format
  676. //! zurueck
  677. DLLEXPORT int getSBgFarbe() const;
  678. //! Gibt das Hintergrund Bild des Schliessen Knopfes zurueck
  679. DLLEXPORT Bild* getSBgBild() const;
  680. //! Gibt das Hintergrund Bild des Schliessen Knopfes ohne erhoehten
  681. //! Reference COunter zurueck
  682. DLLEXPORT Bild* zSBgBild() const;
  683. //! Gibt den Farbuebergang des Schliessen Knopfes zurueck
  684. DLLEXPORT AlphaFeld* getSAlphaFeld() const;
  685. //! Gibt den Farbuebergang des Schliessen Knopfes ohne erhoehten Reference
  686. //! COunter zurueck
  687. DLLEXPORT AlphaFeld* zSAlphaFeld() const;
  688. //! Gibt die Farbe des Farbuebergangs des Schliessen Knopfes im A8R8G8B8
  689. //! Format zurueck
  690. DLLEXPORT int getSAfFarbe() const;
  691. //! Gibt die Staerke des Farbuebergangs des Schliessen Knopfes zurueck
  692. DLLEXPORT int getSAfStrength() const;
  693. //! Gibt den Farbuebergang zurueck, der verwendet wird, wenn auf den
  694. //! Schliessen Knopf gedrueckt wird
  695. DLLEXPORT AlphaFeld* getSKAlphaFeld() const;
  696. //! Gibt den Farbuebergang ohne erhoehten Reference Counter zurueck, der
  697. //! verwendet wird, wenn auf den Schliessen Knopf gedrueckt wird
  698. DLLEXPORT AlphaFeld* zSKAlphaFeld() const;
  699. //! Gibt die Farbe des Farbuebergangs im A8R8G8B8 Format zurueck, der
  700. //! verwendet wird, wenn auf den Schliessen Knopf gedrueckt wird
  701. DLLEXPORT int getSKAfFarbe() const;
  702. //! Gibt die Staerke des Farbuebergangs zurueck, der verwendet wird, wenn
  703. //! auf den Schliessen Knopf gedrueckt wird
  704. DLLEXPORT int getSKAfStrength() const;
  705. //! Gibt die minimale Fenstergroesse in Pixeln zurueck
  706. DLLEXPORT const Punkt& getMin() const;
  707. //! Gibt die maximale Fenstergroesse in Pixeln zurueck
  708. DLLEXPORT const Punkt& getMax() const;
  709. //! Gibt die minimale Koerpergroesse in Pixeln zurueck
  710. DLLEXPORT const Punkt& getKMin() const;
  711. //! Gibt die maximale Koerpergroesse in Pixeln zurueck
  712. DLLEXPORT const Punkt& getKMax() const;
  713. //! Gibt die Scrollbar vom rechten Fensterrand zurueck
  714. DLLEXPORT VScrollBar* getVScrollBar() const;
  715. //! Gibt die Scrollbar vom rechten Fensterrand ohne erhoehten Reference
  716. //! Counter zurueck
  717. DLLEXPORT VScrollBar* zVScrollBar() const;
  718. //! Gibt die Scrollbar vom unteren Fensterrand zurueck
  719. DLLEXPORT HScrollBar* getHScrollBar() const;
  720. //! Gibt die Scrollbar vom unteren Fensterrand ohne erhoehten Reference
  721. //! Counter zurueck
  722. DLLEXPORT HScrollBar* zHScrollBar() const;
  723. //! Gibt eine Liste mit Zeichnungen zurueck, die im Fenster sind
  724. DLLEXPORT const RCArray<Zeichnung>& getMembers() const;
  725. //! Gibt die von den kindern benoetigte Breite des Fensters zurueck
  726. DLLEXPORT int getNeededChildWidth() const;
  727. //! Gibt die von den kindern benoetigte Hoehe des Fensters zurueck
  728. DLLEXPORT int getNeededChildHeight() const;
  729. //! Erzeugt eine Kopie des Fensters, die ohne Auswirkungen auf das
  730. //! Original veraendert werden kann
  731. DLLEXPORT Zeichnung* dublizieren() const override;
  732. };
  733. } // namespace Framework
  734. #endif