Fenster.h 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756
  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; //! aus dieser Datei
  17. class WFensterArray; //! aus dieser Datei
  18. class Fenster; //! aus dieser Datei
  19. #ifdef WIN32
  20. //! Erzeugt eine normale Fensterklasse der Windows API
  21. //! \param hInst Die HINSTANCE des Programms (Wird vom Framework an die
  22. //! Start funktion in der Startparam Struktur übergeben)
  23. DLLEXPORT WNDCLASS F_Normal(HINSTANCE hInst);
  24. //! Erzeugt eine normale Fensterklasse der Windows API
  25. //! \param hInst Die HINSTANCE des Programms (Wird vom Framework an die
  26. //! Start funktion in der Startparam Struktur übergeben)
  27. DLLEXPORT WNDCLASSEX F_NormalEx(HINSTANCE hInst);
  28. //! Funktion des Frameworks, die alle Nachichten von Windows oder anderen
  29. //! Prozessen verarbeitet
  30. DLLEXPORT LRESULT CALLBACK WindowProc(
  31. HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
  32. //! Startet eine Schleife, die die Benutzereingaben verarbeitet. Die
  33. //! Schleife läuft, bis irgendwo im Programm StopNachrichtenSchleife
  34. //! aufgerufen wird
  35. DLLEXPORT void StartNachrichtenSchleife();
  36. //! Stoppt die Ausführung der Nachrichten Schleife des Frameworks.
  37. //! \param hwnd Ein Handle auf ein beliebiges Fenster des Frameworks, das
  38. //! Nachrichten empfangen kann. Wird benötigt, um eine Nachricht zu senden,
  39. //! damit die funktion StartNachrichtenSchleife nicht mehr wartet und sofort
  40. //! beendet wird
  41. DLLEXPORT void StopNachrichtenSchleife(HWND hwnd);
  42. //! Übersetzt einen Keycode, der von Windows gesendet wurde in den
  43. //! Buchstaben der gedrückten Taste
  44. DLLEXPORT void CalculateEnteredString(
  45. int virtualKeyCode, int scanCode, TastaturEreignis& te);
  46. //! Klasse für ein Fenster der Windows API
  47. class WFenster : public virtual ReferenceCounter
  48. {
  49. private:
  50. HWND hWnd; //! Handel zum Fenster
  51. int style;
  52. void* makParam;
  53. void* sakParam;
  54. void* takParam;
  55. MausAktion mausAktion;
  56. std::function<void(void*, void*)> vCloseAktion;
  57. std::function<void(void*, void*)> nCloseAktion;
  58. TastaturAktion tastaturAktion;
  59. Bildschirm* screen;
  60. int mx, my;
  61. bool verschiebbar;
  62. HWND rahmen;
  63. HBITMAP bitmap;
  64. HDC hdc;
  65. public:
  66. //--Konstruktor--
  67. DLLEXPORT WFenster();
  68. //--Konstruktor--
  69. //! \param hwnd Ein Handle zum Fenster, das von dieser Klasse verwaltet
  70. //! werden soll
  71. DLLEXPORT WFenster(HWND hWnd);
  72. //--Destruktor--
  73. DLLEXPORT ~WFenster();
  74. //! erstellt das Fenster
  75. //! \param style Der Style des Fensters. Beispiel: WS_OVERLAPPEDWINDOW
  76. //! (Für ein normales Fenster wie man es kennt) \param wc Die
  77. //! Fensterklasse der Windows API, von der ein Fenster erstellt werden
  78. //! soll. Kann mit der Funktion F_Normal erstellt werden. Es muss
  79. //! lpszClassName gesetzt worden sein.
  80. DLLEXPORT void erstellen(int style, WNDCLASS wc);
  81. //! erstellt das Fenster
  82. //! \param exStyle Der EX Style des Fensters. Beispiel:
  83. //! WS_EX_OVERLAPPEDWINDOW (Für ein normales Fenster wie man es kennt)
  84. //! \param style Der Style des Fensters. Beispiel: WS_OVERLAPPEDWINDOW
  85. //! (Für ein normales Fenster wie man es kennt) \param wc Die
  86. //! Fensterklasse der Windows API, von der ein Fenster erstellt werden
  87. //! soll. Kann mit der Funktion F_Normal erstellt werden. Es muss
  88. //! lpszClassName gesetzt worden sein.
  89. DLLEXPORT void erstellenEx(int exStyle, int style, WNDCLASSEX wc);
  90. //! Setzt den Anzeigemodus des Fensters
  91. //! \param mod Der Modus. Beispiel: SW_SHOWNORMAL, um das Fenster
  92. //! anzuzeigen und SW_HIDE um es einzuklappen
  93. DLLEXPORT void setAnzeigeModus(int mod);
  94. //! Setzt den Fokus auf das Fenster, so dass Tastatureingaben empfangen
  95. //! werden
  96. DLLEXPORT bool setFokus();
  97. //! Setzt die Position des fensters auf dem Bildschirm
  98. //! \param pos Die Position in Pixeln
  99. DLLEXPORT void setPosition(const Punkt& pos);
  100. //! Setzt die Position des fensters auf dem Bildschirm
  101. //! \param x Die X Position in Pixeln
  102. //! \param y Die Y Position in Pixeln
  103. DLLEXPORT void setPosition(int x, int y);
  104. //! Setzt die Größe des Fensters auf dem Bildschirm
  105. //! \param größe Die Größe in Pixeln
  106. DLLEXPORT void setSize(Punkt& größe);
  107. //! Setzt die Größe des Fensters auf dem Bildschirm
  108. //! \param breite Die Breite in Pixeln
  109. //! \param höhe Die Höhe in Pixeln
  110. DLLEXPORT void setSize(int breite, int höhe);
  111. //! Setzt die Position und die Größe des Fensters
  112. //! \param pos Die Position in Pixeln
  113. //! \param größe Die Größe in Pixeln
  114. DLLEXPORT void setBounds(const Punkt& pos, const Punkt& größe);
  115. //! Setzt das Verwendete Bildschirm Objekt, um Tastatur und Maus
  116. //! Eingaben an die Objekte des Frameworks weiterzugeben. Muss vor dem
  117. //! Zerstören des Fensters mit 0 aufgerufen werden. \param screen Das
  118. //! Bildschirm Objekt
  119. DLLEXPORT void setBildschirm(Bildschirm* screen);
  120. //! Zerstört das Fenster
  121. DLLEXPORT void zerstören();
  122. //! Verarbeitet Maus Nachrichten. Ruft MausAktion auf und gibt die
  123. //! Ereignisse an den Bildschirm mit den Objekten weiter, wenn
  124. //! MausAktion 1 zurückgibt \param me Das Ereignis, was durch die
  125. //! Mauseingabe ausgelößt wurde
  126. DLLEXPORT void doMausAktion(MausEreignis& me);
  127. //! Ruft die VSchließAktion Rückruffunktion auf
  128. DLLEXPORT void doVSchließAktion();
  129. //! Ruft die NSchließAktion Rückruffunktion auf
  130. DLLEXPORT void doNSchließAktion();
  131. //! Verarbeitet Tastatur Nachrichten. Ruft TastaturAktion auf und gibt
  132. //! die Ereignisse an den Bildschirm mit den Objekten weiter, wenn
  133. //! TastaturAktion 1 zurückgibt \param me Das Ereignis, was durch die
  134. //! Tastatureingabe ausgelößt wurde
  135. DLLEXPORT void doTastaturAktion(TastaturEreignis& et);
  136. //! Macht den Rahmen des Fensters sichtbar, fals ladeRahmenFenster
  137. //! aufgerufen wurde
  138. DLLEXPORT void doRestoreMessage();
  139. //! setzt den Parameter, der bei einem Maus Ereignis an die
  140. //! Rückruffunktion übergeben wird \param p Der Parameter
  141. DLLEXPORT void setMausEreignisParameter(void* p);
  142. //! setzt den Parameter, der beim Schließen an die Rückruffunktion
  143. //! übergeben wird \param p Der Parameter
  144. DLLEXPORT void setSchließEreignisParameter(void* p);
  145. //! Setzt den Parameter, der bei einem Tastatur Ereignis an die
  146. //! Rückruffunktion übergeben wird \param p Der Parameter
  147. DLLEXPORT void setTastaturEreignisParameter(void* p);
  148. //! Setzt die Rückruffunktion, die bei einem Maus Ereignis aufgerufen
  149. //! werden soll. Wenn die Rückruffunktion 0 zurückgiebt, oder nicht
  150. //! gesetzt wurde, wird ein Maus Ereignis von dem Fenster nicht weiter
  151. //! beachtet Es kann die Standartfunktion __ret1ME verwendet werden, die
  152. //! in MausEreignis.h definiert ist und immer 1 zurückgibt \param ak Ein
  153. //! Zeiger auf die Rückruffunktion
  154. DLLEXPORT void setMausAktion(MausAktion ak);
  155. //! Setzt die Rückruffunktion, die bei vor dem Schließen aufgerufen
  156. //! werden soll. \param ak Ein Zeiger auf die Rückruffunktion
  157. DLLEXPORT void setVSchließAktion(std::function<void(void*, void*)> ak);
  158. //! Setzt die Rückruffunktion, die bei nach dem Schließen aufgerufen
  159. //! werden soll. \param ak Ein Zeiger auf die Rückruffunktion
  160. DLLEXPORT void setNSchließAktion(std::function<void(void*, void*)> ak);
  161. //! Setzt die Rückruffunktion, die bei einem Tastatur Ereignis
  162. //! aufgerufen werdne soll. Wenn die Rückruffunktion 0 zurückgiebt, oder
  163. //! nicht gesetzt wurde, wird ein Tastatur Ereignis von der Zeichnung
  164. //! nicht weiter beachtet Es kann die Standartfunktion __ret1TE
  165. //! verwendet werden, die in TastaturEreignis.h definiert ist und immer
  166. //! 1 zurückgibt Weitere Standartfunktionen sind _nurNummernTE und
  167. //! _nurHexTE ebenfals aus TastaturEreignis.h \param ak Ein Zeiger auf
  168. //! die Rückruffunktion
  169. DLLEXPORT void setTastaturAktion(TastaturAktion ak);
  170. //! Setzt das Handle zum Fenster, das von dieser Klasse verwaltet werden
  171. //! soll
  172. //! \param hwnd Das Handle
  173. DLLEXPORT void setFensterHandle(HWND hWnd);
  174. //! legt fest, ob das Fenster durch ziehen mit Maus verschoben werden
  175. //! kann \param verschiebbar 1, wenn das Fenster verschoben werden darf
  176. DLLEXPORT void setVerschiebbar(bool verschiebbar);
  177. //! Setzt einen Transparenten Rahmen um das Fenster
  178. //! \param zBild Ein Bild, was den Rahmen enthält
  179. //! \param hins Die HINSTANCE des Programms (Wird vom Framework an die
  180. //! Start funktion in der Startparam Struktur übergeben)
  181. DLLEXPORT void ladeRahmenFenster(Bild* zBild,
  182. HINSTANCE
  183. hinst); //! setzt einen Transpatenten Rahmen um das Fenster
  184. //! Gibt das Handle des verwalteten Fensters zurück
  185. DLLEXPORT HWND getFensterHandle() const;
  186. //! Gibt die Position des Fensters in Pixeln zurück
  187. DLLEXPORT Punkt getPosition() const;
  188. //! Gibt die Größe des Fensters in Pixeln zurück
  189. DLLEXPORT Punkt getGröße() const;
  190. //! Gibt die Größe des Fensterkörpers in Pixeln zurück
  191. DLLEXPORT Punkt getKörperGröße() const;
  192. //! Gibt die Breite des Fensterkörpers in Pixeln zurück
  193. DLLEXPORT int getKörperBreite() const;
  194. //! Gibt die Höhe des Fensterkörpers in Pixeln zurück
  195. DLLEXPORT int getKörperHöhe() const;
  196. //! Gibt zurück, ob eine Rückruffunktion für ein MausEreignis gesetzt
  197. //! wurde
  198. DLLEXPORT bool hatMausAktion() const;
  199. //! Gibt zurück, ob eine Rückruffunktion für das Ereignis vor dem
  200. //! Schließen des Fensters gesetzt wurde
  201. DLLEXPORT bool hatVSchließAktion() const;
  202. //! Gibt zurück, ob eine Rückruffunktion für das Ereignis nach dem
  203. //! Schließen des Fensters gesetzt wurde
  204. DLLEXPORT bool hatNSchließAktion() const;
  205. //! Gibt zurück, ob eine Rückruffunktion für ein TastaturEreignis
  206. //! gesetzt wurde
  207. DLLEXPORT bool hatTastaturAktion() const;
  208. //! Gibt den Bidschirm zurück, an dessen Zeichnungen die Ereignisse
  209. //! Weitergegeben werden
  210. DLLEXPORT Bildschirm* getBildschirm() const;
  211. //! Gibt den Bildschirm ohne erhöhten Reference Counter zurück, an
  212. //! dessen Zeichnungen die Ereignisse Weitergegeben werden
  213. DLLEXPORT Bildschirm* zBildschirm() const;
  214. //! Gibt zurück, ob das Fenster verschiebbar ist
  215. DLLEXPORT bool istVerschiebbar() const;
  216. };
  217. //! Verwaltet alle Windows API Fenster im Framework
  218. class WFensterArray
  219. {
  220. private:
  221. WFensterArray* next;
  222. WFenster* This;
  223. public:
  224. //! Konstruktor
  225. DLLEXPORT WFensterArray();
  226. //! Destruktor
  227. DLLEXPORT ~WFensterArray();
  228. //! Fügt ein neues Fenster hinzu
  229. //! \param fenster Das Fenster
  230. DLLEXPORT bool addFenster(WFenster* fenster);
  231. //! Entfernt ein Fenster
  232. //! \param fenster Das Fenster
  233. DLLEXPORT bool removeFenster(WFenster* fenster);
  234. //! gibt das nächste Element zurück
  235. DLLEXPORT WFensterArray* getNext();
  236. //! Setzt das nächste Element auf 0
  237. DLLEXPORT void setNext0();
  238. //! Löscht das Element
  239. DLLEXPORT void del();
  240. //! Sendet das Ereignis, was vor dem Schließen aufgerufen wird an ein
  241. //! bestimmtes Fenster \param hWnd Das Handle zum Fenster
  242. DLLEXPORT bool sendVSchließMessage(HWND hWnd);
  243. //! Sendet das Ereignis, was nach dem Schließen aufgerufen wird an ein
  244. //! bestimmtes Fenster \param hWnd Das Handle zum Fenster
  245. DLLEXPORT bool sendNSchließMessage(HWND hwnd);
  246. //! Sendet ein Maus Ereignis an ein bestimmtes Fenster
  247. //! \param hWnd Das Handle zum Fenster
  248. //! \param me Das Ereignis, was durch die Mauseingabe ausgelößt wurde
  249. DLLEXPORT bool sendMausMessage(HWND hWnd, MausEreignis& me);
  250. //! Sendet ein Tastatur Ereignis an ein bestimmtes Fenster
  251. //! \param hWnd Das Handle zum Fenster
  252. //! \param me Das Ereignis, was durch die Tastatureingabe ausgelößt
  253. //! wurde
  254. DLLEXPORT bool sendTastaturMessage(HWND hwnd, TastaturEreignis& te);
  255. //! Sendet das Ereignis, was durch das öffnen des Fensters ausgelößt
  256. //! wurde an ein bestimmtes Fenster \param hWnd Das Handle zum Fenster
  257. DLLEXPORT bool sendRestoreMessage(HWND hwnd);
  258. //! Gibt das Fenster dieses Eintrags zurück
  259. DLLEXPORT WFenster* getThis();
  260. };
  261. //! Erzeugt ein Windows API Popup Fenster, mit einer Meldung
  262. //! \param hWnd Ein Handle zu dem Fenster, was blockiert werden soll, bis
  263. //! das Popup Fenster geschlossen wurde. Kann 0 sein \param titel Der Titel
  264. //! des Popup Fensters \param meldung Die Meldung, die im Fenster angezeigt
  265. //! werden soll \param style Bestimmt das Icon, was im Fenster angezeigt
  266. //! wird. Beispiel: MB_ICONERROR, MB_ICONINFORMATION
  267. DLLEXPORT void WMessageBox(
  268. HWND hWnd, Text* titel, Text* meldung, UINT style);
  269. #endif
  270. //! Fenster Klasse im Programm
  271. class Fenster : public Zeichnung
  272. {
  273. public:
  274. class Style : public Zeichnung::Style
  275. {
  276. public:
  277. //! Legt fest, ob der Körper des Fensters einen Hintergrund hat
  278. static const __int64 BodyHintergrund = 0x000000008;
  279. //! Legt fest, ob beim zeichnen des Körperhintergrundes alpha
  280. //! blending verwendet werden soll
  281. static const __int64 BodyHAlpha = 0x000000010;
  282. //! Legt fest, ob ein Bild als Hintergrund des Körpers verwendet
  283. //! werden soll
  284. static const __int64 BodyHBild = 0x000000020;
  285. //! Legt fest, ob der Körper einen Farbübergang besitzt
  286. static const __int64 BodyBuffered = 0x000000040;
  287. //! Legt fest, ob das Fenster eine Titelleiste hat
  288. static const __int64 Titel = 0x000000080;
  289. //! Legt fest, ob die titelleiste des Fensters einen Hintergrund hat
  290. static const __int64 TitelHintergrund = 0x000000100;
  291. //! Legt fest, ob zum zeichnen des Titel Hintergrundes alpha
  292. //! blending soll
  293. static const __int64 TitelHAlpha = 0x000000200;
  294. //! Legt fest, ob für den Titelhintergrund ein Bild verwendet werden
  295. //! soll
  296. static const __int64 TitelHBild = 0x000000400;
  297. //! Legt fest, ob die Titel Leiste einen Farbübergang besitzt
  298. static const __int64 TitelBuffered = 0x000000800;
  299. //! Legt fest, ob in der Titelleiste ein Knopf zum Schließen des
  300. //! Fensters angezeigt werden soll
  301. static const __int64 Closable = 0x000001000;
  302. //! Legt fest, ob der Schließen Knopf einen Hintergrund hat
  303. static const __int64 ClosingHintergrund = 0x000002000;
  304. //! Legt fest, ob beim Zeichnen des Hintergrunds des Schließen
  305. //! Knopfes alpha blending verwendet werden soll
  306. static const __int64 ClosingHAlpha = 0x000004000;
  307. //! Legt fest, ob für den Hintergrund des Schließen Knopfes ein Bild
  308. //! soll
  309. static const __int64 ClosingHBild = 0x000008000;
  310. //! Legt fest, ob der Schließen Knopf einen Farbübergang besitzt
  311. static const __int64 ClosingBuffer = 0x000010000;
  312. //! Legt fest, ob der Schließen Knopf einen Farbübergang besitzt,
  313. //! während er gedrückt wird
  314. static const __int64 ClosingKlickBuffer = 0x000020000;
  315. //! Legt fest, ob der Benutzer das Fenster durch gedrückt halten der
  316. //! linken Maustaste in der Titelleiste das Fenster verschieben kann
  317. static const __int64 Beweglich = 0x000040000;
  318. //! Legt fest, ob der Benutzer die Breite des Fensters durch das
  319. //! gedrückt halten der linken Maustaste auf dem rechten oder linken
  320. //! Fensterrand verändern kann
  321. static const __int64 BreiteChangeable = 0x000080000;
  322. //! Legt fest, ob der Benutzer die Höhe des Fensters durch das
  323. //! gedrückt halten der linken Maustaste auf dem oberen oder unteren
  324. //! Fensterrand verändern kann
  325. static const __int64 HeightChangeable = 0x000100000;
  326. //! Legt fest, ob der Benutzer die Höhe der Titel Leiste durch
  327. //! gedrückt halten der linken Maustaste auf dem unteren Rand der
  328. //! Titelleiste verändern kann
  329. static const __int64 TitelHeightChangeable = 0x000200000;
  330. //! Legt fest, ob es eine Minimale Breite des Fensters gibt
  331. static const __int64 MinBr = 0x000400000;
  332. //! Legt fest, ob es eine Maximale Breite des Fensters gibt
  333. static const __int64 MaxBr = 0x000800000;
  334. //! Legt fest, ob es eine Minimale Höhe des Fensters gibt
  335. static const __int64 MinHi = 0x001000000;
  336. //! Legt fest, ob es eine Maximale Höhe des Fensters gibt
  337. static const __int64 MaxHi = 0x002000000;
  338. //! Legt fest, ob es eine Minimale Breite des Körpers gibt
  339. static const __int64 BodyMinBr = 0x004000000;
  340. //! Legt fest, ob es eine Maximale Breite des Körpers gibt
  341. static const __int64 BodyMaxBr = 0x008000000;
  342. //! Legt fest, ob es eine Minimale Höhe des Körpers gibt
  343. static const __int64 BodyMinHi = 0x010000000;
  344. //! Legt fest, ob es eine Maximale Höhe des Körpers gibt
  345. static const __int64 BodyMaxHi = 0x020000000;
  346. //! Legt fest, ob eine ScrollBar am rechten Fensterrand erscheinen
  347. //! soll
  348. static const __int64 VScroll = 0x040000000;
  349. //! Legt fest, ob eine ScrollBar am unteren Fensterrand erscheinen
  350. //! soll
  351. static const __int64 HScroll = 0x080000000;
  352. //! Legt fest, ob die Mausereignisse auch noch von Zeichnungen
  353. //! hinter dem Fenster verarbeitet werden sollen
  354. static const __int64 METransparenz = 0x100000000;
  355. //! Legt fest, ob das Fenster einen Rahmen haben soll
  356. static const __int64 Rahmen = 0x200000000;
  357. //! Legt fest, ob die linke Seite des Fensters fixiert ist wenn die
  358. //! größe änderbar ist
  359. static const __int64 LeftPositionFixed = 0x400000000;
  360. //! Legt fest, ob die rechte Seite des Fensters fixiert ist wenn die
  361. //! größe änderbar ist
  362. static const __int64 RightPositionFixed = 0x800000000;
  363. //! Legt fest, ob die obere Seite des Fensters fixiert ist wenn die
  364. //! größe änderbar ist
  365. static const __int64 TopPositionFixed = 0x1000000000;
  366. //! Legt fest, ob die untere Seite des Fensters fixiert ist wenn die
  367. //! größe änderbar ist
  368. static const __int64 BottomPositionFixed = 0x2000000000;
  369. //! Legt fest, ob die Position und Größe des Titel Textfeldes
  370. //! unverändert bleiben soll
  371. static const __int64 CustomTitle = 0x4000000000;
  372. //! Vereint die Flags MinHö, MaxHö, MaxBr, MaxHö
  373. static const __int64 min_max = MinHi | MaxHi | MaxBr | MaxHi;
  374. //! Vereint die Flags Körper_minBr, Körper_maxBr, Körper_minHö,
  375. //! Körper_maxBr
  376. static const __int64 body_min_max
  377. = BodyMinBr | BodyMaxBr | BodyMinHi | BodyMaxBr;
  378. //! Vereint die Flags VScroll, HScroll
  379. static const __int64 scroll = VScroll | HScroll;
  380. //! Vereint die Flags TitelHöheÄnderbar, HöheÄnderbar,
  381. //! BreiteÄnderbar, Beweglich
  382. static const __int64 nichtfixiert = TitelHeightChangeable
  383. | HeightChangeable
  384. | BreiteChangeable | Beweglich;
  385. //! Vereint die Flags Sichtbar, Erlaubt, Rahmen, Titel,
  386. //! TitelBuffered, Schließbar, SchließHBild, SchließKlickBuffer,
  387. //! Beweglich
  388. static const __int64 normal
  389. = Sichtbar | Erlaubt | Rahmen | Titel | TitelBuffered | Closable
  390. | ClosingHBild | ClosingKlickBuffer | Beweglich
  391. | MEIgnoreVerarbeitet | MEIgnoreSichtbar | MEIgnoreParentInside
  392. | MEIgnoreInside;
  393. };
  394. private:
  395. MausAktion closingMe;
  396. void* closingMeParam;
  397. Rahmen* rahmen;
  398. TextFeld* titel;
  399. RCArray<Zeichnung>* members;
  400. int bgBodyColor;
  401. Bild* bgBodyPicture;
  402. AlphaFeld* bodyBuffer;
  403. int bgClosingFarbe;
  404. Bild* bgClosingBild;
  405. AlphaFeld* closeBuffer;
  406. AlphaFeld* closeKlickBuffer;
  407. VScrollBar* vScroll;
  408. HScrollBar* hScroll;
  409. Punkt min, max;
  410. Punkt kMin, kMax;
  411. bool closeKlick, klick;
  412. int moving;
  413. int mx, my;
  414. protected:
  415. //! Verarbeitet Maus Nachrichten
  416. //! \param me Das Ereignis, was durch die Mauseingabe ausgelößt wurde
  417. DLLEXPORT void doMausEreignis(MausEreignis& me, bool userRet) override;
  418. public:
  419. //! Konstruktor
  420. DLLEXPORT Fenster();
  421. //! Destruktor
  422. DLLEXPORT virtual ~Fenster();
  423. //! Setzt einen Zeiger auf den Rahmen des Fensters
  424. //! \param ram Der Rahmen
  425. DLLEXPORT void setRahmenZ(Rahmen* ram);
  426. //! Setzt die Farbe des Fensterrahmens
  427. //! \param f Die Farbe im A8R8G8B8 Format
  428. DLLEXPORT void setRFarbe(int f);
  429. //! Setzt die Breite des Fensterrahmens
  430. //! \param br Die Breite in Pixeln
  431. DLLEXPORT void setRBreite(int br);
  432. //! Setzt den Titel des Fensters
  433. //! \param txt Der Text
  434. DLLEXPORT void setTitel(Text* txt);
  435. //! Setzt einen Zeiger auf den Titel Text
  436. //! \param txt Der neue Text
  437. DLLEXPORT void setTitelZ(Text* txt);
  438. //! Setzt den Titel des Fensters
  439. //! \param txt Der Textv
  440. DLLEXPORT void setTitel(const char* txt);
  441. //! Setzt einen Zeiger auf das TextFeld, das den Titeltext zeichnet
  442. //! \param tf Das TextFeld
  443. DLLEXPORT void setTTextFeldZ(TextFeld* tf);
  444. //! Setzt die Schrift, die für den Titel verwendet werden soll
  445. //! \param schrift Die Schrift
  446. DLLEXPORT void setTSchriftZ(Schrift* schrift);
  447. //! Setzt die Farbe der Schrift, die für den Titel verwendet werden soll
  448. //! \param f Die Farbe im A8R8G8B8 Format
  449. DLLEXPORT void setTSFarbe(int f);
  450. //! Setzt die Größe der Schrift, die für den Titel verwendet werden soll
  451. //! \param gr Die Höhe einer zeile in Pixeln
  452. DLLEXPORT void setTSSize(int gr);
  453. //! Setzt die Hintergrund Farbe des Titels
  454. //! \param f Die Farbe im A8R8G8B8 Format
  455. DLLEXPORT void setTBgFarbe(int f);
  456. //! Setzt einen Zeiger auf den Farbübergang des Titels
  457. //! \param af Der Farbübergang
  458. DLLEXPORT void setTAlphaFeldZ(AlphaFeld* af);
  459. //! Setzt die Farbe des Farbübergangs des Titels
  460. //! \param f Die Farbe im A8R8G8B8 Format
  461. DLLEXPORT void setTAfFarbe(int f);
  462. //! Setzt die Stärke des Farbübergangs des Titels
  463. //! \param st Die Stärke
  464. DLLEXPORT void setTAfStrength(int st);
  465. //! Setzt das Hintergrund Bild des Titels durch kopieren
  466. //! \param b Das Bild, was kopiert werden soll
  467. DLLEXPORT void setTBgBild(Bild* b);
  468. //! Setzt einen Zeiger auf das Hintergrund Bild des Titels
  469. //! \param b Das Bild
  470. DLLEXPORT void setTBgBildZ(Bild* b);
  471. //! Setzt einen Zeiger auf den Rahmen des Titels
  472. //! \param ram Der Rahmen
  473. DLLEXPORT void setTRahmenZ(Rahmen* ram);
  474. //! Setzt die Farbe des Rahmens des Titels
  475. //! \param f Die Farbe im A8R8G8B8 Format
  476. DLLEXPORT void setTRFarbe(int f);
  477. //! Setzt die Breite des Rahmens des Titels
  478. //! \param br Die Breite in Pixeln
  479. DLLEXPORT void setTRBreite(int br);
  480. //! Setzt die Hintergrundfarbe des Körpers
  481. //! \param f Die Farbe im A8R8G8B8 Format
  482. DLLEXPORT void setKBgFarbe(int f);
  483. //! Setzt das Hintergrund Bild des Körpers durch kopieren
  484. //! \param b Das Bild, das kopiert werden soll
  485. DLLEXPORT void setKBgBild(Bild* b);
  486. //! Setzt einen Zeiger auf das Hintergrund Bild des Körpers
  487. //! \param b Das Bild
  488. DLLEXPORT void setKBgBildZ(Bild* b);
  489. //! Setzt einen Zeiger auf den Farbübergang des Körpers
  490. //! \param af Der Farbübergang
  491. DLLEXPORT void setKAlphaFeldZ(AlphaFeld* af);
  492. //! Setzt die Farbe des Farbübergangs des Körpers
  493. //! \param f Die Farbe im A8R8G8B8 Format
  494. DLLEXPORT void setKAfFarbe(int f);
  495. //! Setzt die Stärke des Farbübergangs des Körpers
  496. //! \param st Die Stärke
  497. DLLEXPORT void setKAfStrength(int st);
  498. //! Setzt den Parameter der Rückruffunktion, die aufgerufen wird, wenn
  499. //! der Schließen Knopf ein MausEreignis erhält \param param Der
  500. //! Parameter
  501. DLLEXPORT void setClosingMeParam(void* param);
  502. //! Setzt die Rückruffunktion, die Aufgerufen wird, wenn der Schließen
  503. //! Knopf ein MausEreignis erhält Wenn die Rückruffunktion 0
  504. //! zurückgiebt, oder nicht gesetzt wurde, wird ein Maus Ereignis von
  505. //! der Zeichnung nicht weiter beachtet Das Fenster wird nicht von
  506. //! selbst geschlossen, sondern sollte in der Rückruffunktion durch den
  507. //! aufruf von löscheStyle( Fenster::Style::Sichtbar ); geschlossen
  508. //! werden \param ak Ein Zeiger auf die Rückruffunktion
  509. DLLEXPORT void setClosingMe(MausAktion closingMe);
  510. //! Setzt die Hintergrund Farbe des Schließen Knopfes
  511. //! \param f Die Farbe im A8R8G8B8 Format
  512. DLLEXPORT void setSBgFarbe(int f);
  513. //! Setzt das Hintergrund Bild des Schließen Knopfes durch kopieren
  514. //! \param b Das Bild, das kopiert werden soll
  515. DLLEXPORT void setSBgBild(Bild* b);
  516. //! Setzt einen Zeiger auf das Hintergrund Bild des Schließen Knopfes
  517. //! \param b Das Bild
  518. DLLEXPORT void setSBgBildZ(Bild* b);
  519. //! Setzt einen Zeiger auf den Farbübergang des Schließen Knopfes
  520. //! \param af Der Farbübergang
  521. DLLEXPORT void setSAlphaFeldZ(AlphaFeld* af);
  522. //! Setzt die Farbe des Farbübergangs des Schließen Knopfes
  523. //! \param f Die Farbe im A8R8G8B8 Format
  524. DLLEXPORT void setSAfFarbe(int f);
  525. //! Setzt die Stärke des Farbübergangs des Schließen Knopfes
  526. //! \param st Die Stärke
  527. DLLEXPORT void setSAfStrength(int st);
  528. //! Setzt einen Zeiger auf den Farbübergang, der beim Klicken des
  529. //! Schließen Knopfes verwendet wird \param af Der Farbübergnag
  530. DLLEXPORT void setSKAlphaFeldZ(AlphaFeld* af);
  531. //! Setzt die Farbe des Farbübergangs, der beim Klicken des Schließen
  532. //! Knopfes verwendet wird \param f Die Farbe im A8R8G8B8 Format
  533. DLLEXPORT void setSKAfFarbe(int f);
  534. //! Setzt die Stärke des Farbübergangs, der beim Klicken des Schließen
  535. //! Knopfes verwendet wird \param st Die Stärke
  536. DLLEXPORT void setSKAfStrength(int st);
  537. //! Setzt die Minimale Größe des Fensters
  538. //! \param mx Die Minimale Breite in Pixeln
  539. //! \param my Die Minimale Höhe in Pixeln
  540. DLLEXPORT void setMin(int mx, int my);
  541. //! Setzt die Minimale Größe des Fensters
  542. //! \param min Die Minimale Breite und Höhe in Pixeln
  543. DLLEXPORT void setMin(const Punkt& min);
  544. //! Setzt die Maximale Größe des Fensters
  545. //! \param mx Die Maximale Breite in Pixeln
  546. //! \param my Die Maximale Höhe in Pixeln
  547. DLLEXPORT void setMax(int mx, int my);
  548. //! Setzt die Maximale Größe des Fensters
  549. //! \param min Die Maximale Breite und Höhe in Pixeln
  550. DLLEXPORT void setMax(const Punkt& max);
  551. //! Setzt die Minimale Größe des Fenster Körpers
  552. //! \param mx Die Minimale Breite in Pixeln
  553. //! \param my Die Minimale Höhe in Pixeln
  554. DLLEXPORT void setKMin(int mx, int my);
  555. //! Setzt die Minimale Größe des Fenster Körpers
  556. //! \param min Die Minimale Breite und Höhe in Pixeln
  557. DLLEXPORT void setKMin(const Punkt& min);
  558. //! Setzt die Maximale Größe des Fenster Körpers
  559. //! \param mx Die Maximale Breite in Pixeln
  560. //! \param my Die Maximale Höhe in Pixeln
  561. DLLEXPORT void setKMax(int mx, int my);
  562. //! Setzt die Maximale Größe des Fenster Körpers
  563. //! \param min Die Maximale Breite und Höhe in Pixeln
  564. DLLEXPORT void setKMax(const Punkt& max);
  565. //! Setzt einen Zeiger auf die Scrollbar am unteren Rand des Fensters
  566. //! \param hScroll Die Scrollbar
  567. DLLEXPORT void setHScrollBarZ(HScrollBar* hScroll);
  568. //! Setzt einen Zeiger auf die Scrollbar am rechten Rand des Fensters
  569. //! \param vScroll Die Scrollbar
  570. DLLEXPORT void setVScrollBarZ(VScrollBar* vScroll);
  571. //! Setzt die Maximale Scroll breite des Fenster Körpers
  572. //! \param max Die Breite in Pixeln
  573. DLLEXPORT void setHSBMax(int max);
  574. //! Setzt die Maximale Scroll höhe des Fenster Körpers
  575. //! \param max Die Höhe in Pixeln
  576. DLLEXPORT void setVSBMax(int max);
  577. //! Scrollt zu einer bestimmten x Position im Fenster Körper
  578. //! \param scroll Die Anzahl der Pixel, die der Inhalt nach links
  579. //! verschoben werden soll
  580. DLLEXPORT void setHSBScroll(int scroll);
  581. //! Scrollt zu einer bestimmten y Position im Fenster Körper
  582. //! \param scroll Die Anzahl der Pixel, die der Inhalt nach oben
  583. //! verschoben werden soll
  584. DLLEXPORT void setVSBScroll(int scroll);
  585. //! Updates the horizontal scrollbar so that the max scroll size is set
  586. //! to the width of the content
  587. DLLEXPORT void updateHScroll();
  588. //! Updates the vertical scrollbar so that the max scroll size is set to
  589. //! the height of the content
  590. DLLEXPORT void updateVScroll();
  591. //! Fügt dem Fenster eine Zeichnung hinzu
  592. //! \param obj Die Zeichnung
  593. DLLEXPORT virtual void addMember(Zeichnung* obj);
  594. //! sets the position of a member to index. This changes the order of
  595. //! rendering and the order input events are processed
  596. DLLEXPORT void setMemberIndex(Zeichnung* zMember, int index);
  597. //! Entfernt eine Zeichnung aus dem Fenster
  598. //! \param zObj Die Zeichnung (ohne erhöhten reference Counter)
  599. DLLEXPORT virtual void removeMember(Zeichnung* zObj);
  600. //! Entfernt alle Zeichnungen aus dem Fenster
  601. DLLEXPORT virtual void removeAll();
  602. //! Aktualisiert das Objekt. Wird vom Framework aufgerufen
  603. //! \param tickVal Die Zeit in sekunden, die seit dem lezten Aufruf
  604. //! dieser Funktion vergangen ist \return 1, wenn sich etwas verändert
  605. //! hat und das Bild neu gezeichnet werden muss. 0 sonst
  606. DLLEXPORT bool tick(double tickval) override;
  607. //! Verarbeitet Tastatur Nachrichten
  608. //! \param me Das Ereignis, was durch die Tastatureingabe ausgelößt
  609. //! wurde
  610. DLLEXPORT void doTastaturEreignis(TastaturEreignis& te) override;
  611. //! Zeichnet das Fentster nach zRObj, falls es sichtbar ist
  612. //! \param zRObj Das Bild, in welches gezeichnet werden soll
  613. DLLEXPORT void render(Bild& zRObj) override;
  614. //! Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurück
  615. DLLEXPORT int getInnenBreite() const override;
  616. //! Gibt die Höhe des Innenraumes in der Zeichnung in Pixeln zurück
  617. DLLEXPORT int getInnenHeight() const override;
  618. //! Gibt den Rahmen des Fensters zurück
  619. DLLEXPORT Rahmen* getRahmen() const;
  620. //! Gibt den Rahmen des Fensters ohne erhöhen Reference Counter zurück
  621. DLLEXPORT Rahmen* zRahmen() const;
  622. //! Gibt die Farbe des Rahmens des Fensters im A8R8G8B8 Format zurück
  623. DLLEXPORT int getRFarbe() const;
  624. //! Gibt die Breite des Rahmens des Fensters in Pixeln zurück
  625. DLLEXPORT int getRBreite() const;
  626. //! Gibt den Titel des Fensters zurück
  627. DLLEXPORT Text* getTitel() const;
  628. //! Gibt den Titel des Fensters ohne erhöhten Reference Counter zurück
  629. DLLEXPORT Text* zTitel() const;
  630. //! Gibt das TextFeld zurück, das zum Zeichnen des Titels verwendet wird
  631. DLLEXPORT TextFeld* getTTextFeld() const;
  632. //! Gibt das TextFeld ohne erhöhten Reference Counter zurück, das zum
  633. //! Zeichnen des Titels verwendet wird
  634. DLLEXPORT TextFeld* zTTextFeld() const;
  635. //! Gibt die Schrift zurück, die für den Titel verwendet wird
  636. DLLEXPORT Schrift* getTSchrift() const;
  637. //! Gibt die Schrift ohne erhöten Reference Counter zurück, die für den
  638. //! Titel verwendet wird
  639. DLLEXPORT Schrift* zTSchrift() const;
  640. //! Gibt die Schrift Farbe des Titels im A8R8G8B8 Format zurück
  641. DLLEXPORT int getTSFarbe() const;
  642. //! Gibt die Höhe einer Zeile des Titels in Pixeln zurück
  643. DLLEXPORT int getTSSize() const;
  644. //! Gibt die Hintergrundfarbe des Titels im A8R8G8B8 Format zurück
  645. DLLEXPORT int getTBgFarbe() const;
  646. //! Gibt den Farbübergang des Titels zurück
  647. DLLEXPORT AlphaFeld* getTAlphaFeld() const;
  648. //! Gibt den Farbübergang des Titels ohne erhöhten Reference COunter
  649. //! zurück
  650. DLLEXPORT AlphaFeld* zTAlphaFeld() const;
  651. //! Gibt die Farbe des Farbübergangs des Titels im A8R8G8B8 Format
  652. //! zurück
  653. DLLEXPORT int getTAfFarbe() const;
  654. //! Gibt die Stärke des Farbübergangs des Titels zurück
  655. DLLEXPORT int getTAfStrength() const;
  656. //! Gibt das Hintergrund Bild des titels zurück
  657. DLLEXPORT Bild* getTBgBild() const;
  658. //! Gibt das Hintergrund Bild des titels ohne erhöhten Reference Counter
  659. //! zurück
  660. DLLEXPORT Bild* zTBgBild() const;
  661. //! Gibt den Rahmen des Titels zurück
  662. DLLEXPORT Rahmen* getTRahmen() const;
  663. //! Gibt den Rahmen des Titels ohne erhöhten Reference Counter zurück
  664. DLLEXPORT Rahmen* zTRahmen() const;
  665. //! Gibt die Farbe des Rahmens des Titels im A8R8G8B8 Format zurück
  666. DLLEXPORT int getTRFarbe() const;
  667. //! Gibt die Stärke des Rahmens des Titels zurück
  668. DLLEXPORT int getTRBreite() const;
  669. //! Gibt die Hintergrund Farbe des Körpers zurück
  670. DLLEXPORT int getKBgFarbe() const;
  671. //! Gibt das Hintergrund Bild des Körpers zurück
  672. DLLEXPORT Bild* getKBgBild() const;
  673. //! Gibt das Hintergrund Bild des Körpers ohne erhöhten Reference
  674. //! Counter zurück
  675. DLLEXPORT Bild* zKBgBild() const;
  676. //! Gibt den Farbübergang des Körpers zurück
  677. DLLEXPORT AlphaFeld* getKAlphaFeld() const;
  678. //! Gibt den Farbübergang des Körpers ohne erhöhten Reference Counter
  679. //! zurück
  680. DLLEXPORT AlphaFeld* zKAlphaFeld() const;
  681. //! Gibt die Farbe des Farbübergangs des Körpers im A8R8G8B8 Format
  682. //! zurück
  683. DLLEXPORT int getKAfFarbe() const;
  684. //! Gibt die Stärke des Farbübergangs des Körpers zurück
  685. DLLEXPORT int getKAfStrength() const;
  686. //! Gibt die Hintergrund Farbe des Schließen Knopfes im A8R8G8B8 Format
  687. //! zurück
  688. DLLEXPORT int getSBgFarbe() const;
  689. //! Gibt das Hintergrund Bild des Schließen Knopfes zurück
  690. DLLEXPORT Bild* getSBgBild() const;
  691. //! Gibt das Hintergrund Bild des Schließen Knopfes ohne erhöhten
  692. //! Reference COunter zurück
  693. DLLEXPORT Bild* zSBgBild() const;
  694. //! Gibt den Farbübergang des Schließen Knopfes zurück
  695. DLLEXPORT AlphaFeld* getSAlphaFeld() const;
  696. //! Gibt den Farbübergang des Schließen Knopfes ohne erhöhten Reference
  697. //! COunter zurück
  698. DLLEXPORT AlphaFeld* zSAlphaFeld() const;
  699. //! Gibt die Farbe des Farbübergangs des Schließen Knopfes im A8R8G8B8
  700. //! Format zurück
  701. DLLEXPORT int getSAfFarbe() const;
  702. //! Gibt die Stärke des Farbübergangs des Schließen Knopfes zurück
  703. DLLEXPORT int getSAfStrength() const;
  704. //! Gibt den Farbübergang zurück, der verwendet wird, wenn auf den
  705. //! Schließen Knopf gedrückt wird
  706. DLLEXPORT AlphaFeld* getSKAlphaFeld() const;
  707. //! Gibt den Farbübergang ohne erhöhten Reference Counter zurück, der
  708. //! verwendet wird, wenn auf den Schließen Knopf gedrückt wird
  709. DLLEXPORT AlphaFeld* zSKAlphaFeld() const;
  710. //! Gibt die Farbe des Farbübergangs im A8R8G8B8 Format zurück, der
  711. //! verwendet wird, wenn auf den Schließen Knopf gedrückt wird
  712. DLLEXPORT int getSKAfFarbe() const;
  713. //! Gibt die Stärke des Farbübergangs zurück, der verwendet wird, wenn
  714. //! auf den Schließen Knopf gedrückt wird
  715. DLLEXPORT int getSKAfStrength() const;
  716. //! Gibt die minimale Fenstergröße in Pixeln zurück
  717. DLLEXPORT const Punkt& getMin() const;
  718. //! Gibt die maximale Fenstergröße in Pixeln zurück
  719. DLLEXPORT const Punkt& getMax() const;
  720. //! Gibt die minimale Körpergröße in Pixeln zurück
  721. DLLEXPORT const Punkt& getKMin() const;
  722. //! Gibt die maximale Körpergröße in Pixeln zurück
  723. DLLEXPORT const Punkt& getKMax() const;
  724. //! Gibt die Scrollbar vom rechten Fensterrand zurück
  725. DLLEXPORT VScrollBar* getVScrollBar() const;
  726. //! Gibt die Scrollbar vom rechten Fensterrand ohne erhöhten Reference
  727. //! Counter zurück
  728. DLLEXPORT VScrollBar* zVScrollBar() const;
  729. //! Gibt die Scrollbar vom unteren Fensterrand zurück
  730. DLLEXPORT HScrollBar* getHScrollBar() const;
  731. //! Gibt die Scrollbar vom unteren Fensterrand ohne erhöhten Reference
  732. //! Counter zurück
  733. DLLEXPORT HScrollBar* zHScrollBar() const;
  734. //! Gibt eine Liste mit Zeichnungen zurück, die im Fenster sind
  735. DLLEXPORT const RCArray<Zeichnung>& getMembers() const;
  736. //! Gibt die von den kindern benötigte Breite des Fensters zurück
  737. DLLEXPORT int getNeededChildWidth() const;
  738. //! Gibt die von den kindern benötigte Höhe des Fensters zurück
  739. DLLEXPORT int getNeededChildHeight() const;
  740. //! Erzeugt eine Kopie des Fensters, die ohne Auswirkungen auf das
  741. //! Original verändert werden kann
  742. DLLEXPORT Zeichnung* dublizieren() const override;
  743. };
  744. } // namespace Framework
  745. #endif