Fenster.h 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742
  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(Punkt& pos, 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 unverändert bleiben soll
  370. static const __int64 CustomTitle = 0x4000000000;
  371. // Vereint die Flags MinHö, MaxHö, MaxBr, MaxHö
  372. static const __int64 min_max = MinHi | MaxHi | MaxBr | MaxHi;
  373. // Vereint die Flags Körper_minBr, Körper_maxBr, Körper_minHö,
  374. // Körper_maxBr
  375. static const __int64 body_min_max
  376. = BodyMinBr | BodyMaxBr | BodyMinHi | BodyMaxBr;
  377. // Vereint die Flags VScroll, HScroll
  378. static const __int64 scroll = VScroll | HScroll;
  379. // Vereint die Flags TitelHöheÄnderbar, HöheÄnderbar,
  380. // BreiteÄnderbar, Beweglich
  381. static const __int64 nichtfixiert = TitelHeightChangeable
  382. | HeightChangeable
  383. | BreiteChangeable | Beweglich;
  384. // Vereint die Flags Sichtbar, Erlaubt, Rahmen, Titel,
  385. // TitelBuffered, Schließbar, SchließHBild, SchließKlickBuffer,
  386. // Beweglich
  387. static const __int64 normal
  388. = Sichtbar | Erlaubt | Rahmen | Titel | TitelBuffered | Closable
  389. | ClosingHBild | ClosingKlickBuffer | Beweglich
  390. | MEIgnoreVerarbeitet | MEIgnoreSichtbar | MEIgnoreParentInside
  391. | MEIgnoreInside;
  392. };
  393. private:
  394. MausAktion closingMe;
  395. void* closingMeParam;
  396. Rahmen* rahmen;
  397. TextFeld* titel;
  398. RCArray<Zeichnung>* members;
  399. int bgBodyColor;
  400. Bild* bgBodyPicture;
  401. AlphaFeld* bodyBuffer;
  402. int bgClosingFarbe;
  403. Bild* bgClosingBild;
  404. AlphaFeld* closeBuffer;
  405. AlphaFeld* closeKlickBuffer;
  406. VScrollBar* vScroll;
  407. HScrollBar* hScroll;
  408. Punkt min, max;
  409. Punkt kMin, kMax;
  410. bool closeKlick, klick;
  411. int moving;
  412. int mx, my;
  413. protected:
  414. //! Verarbeitet Maus Nachrichten
  415. //! \param me Das Ereignis, was durch die Mauseingabe ausgelößt wurde
  416. DLLEXPORT void doMausEreignis(MausEreignis& me, bool userRet) override;
  417. public:
  418. //! Konstruktor
  419. DLLEXPORT Fenster();
  420. //! Destruktor
  421. DLLEXPORT virtual ~Fenster();
  422. //! Setzt einen Zeiger auf den Rahmen des Fensters
  423. //! \param ram Der Rahmen
  424. DLLEXPORT void setRahmenZ(Rahmen* ram);
  425. //! Setzt die Farbe des Fensterrahmens
  426. //! \param f Die Farbe im A8R8G8B8 Format
  427. DLLEXPORT void setRFarbe(int f);
  428. //! Setzt die Breite des Fensterrahmens
  429. //! \param br Die Breite in Pixeln
  430. DLLEXPORT void setRBreite(int br);
  431. //! Setzt den Titel des Fensters
  432. //! \param txt Der Text
  433. DLLEXPORT void setTitel(Text* txt);
  434. //! Setzt einen Zeiger auf den Titel Text
  435. //! \param txt Der neue Text
  436. DLLEXPORT void setTitelZ(Text* txt);
  437. //! Setzt den Titel des Fensters
  438. //! \param txt Der Textv
  439. DLLEXPORT void setTitel(const char* txt);
  440. //! Setzt einen Zeiger auf das TextFeld, das den Titeltext zeichnet
  441. //! \param tf Das TextFeld
  442. DLLEXPORT void setTTextFeldZ(TextFeld* tf);
  443. //! Setzt die Schrift, die für den Titel verwendet werden soll
  444. //! \param schrift Die Schrift
  445. DLLEXPORT void setTSchriftZ(Schrift* schrift);
  446. //! Setzt die Farbe der Schrift, die für den Titel verwendet werden soll
  447. //! \param f Die Farbe im A8R8G8B8 Format
  448. DLLEXPORT void setTSFarbe(int f);
  449. //! Setzt die Größe der Schrift, die für den Titel verwendet werden soll
  450. //! \param gr Die Höhe einer zeile in Pixeln
  451. DLLEXPORT void setTSSize(int gr);
  452. //! Setzt die Hintergrund Farbe des Titels
  453. //! \param f Die Farbe im A8R8G8B8 Format
  454. DLLEXPORT void setTBgFarbe(int f);
  455. //! Setzt einen Zeiger auf den Farbübergang des Titels
  456. //! \param af Der Farbübergang
  457. DLLEXPORT void setTAlphaFeldZ(AlphaFeld* af);
  458. //! Setzt die Farbe des Farbübergangs des Titels
  459. //! \param f Die Farbe im A8R8G8B8 Format
  460. DLLEXPORT void setTAfFarbe(int f);
  461. //! Setzt die Stärke des Farbübergangs des Titels
  462. //! \param st Die Stärke
  463. DLLEXPORT void setTAfStrength(int st);
  464. //! Setzt das Hintergrund Bild des Titels durch kopieren
  465. //! \param b Das Bild, was kopiert werden soll
  466. DLLEXPORT void setTBgBild(Bild* b);
  467. //! Setzt einen Zeiger auf das Hintergrund Bild des Titels
  468. //! \param b Das Bild
  469. DLLEXPORT void setTBgBildZ(Bild* b);
  470. //! Setzt einen Zeiger auf den Rahmen des Titels
  471. //! \param ram Der Rahmen
  472. DLLEXPORT void setTRahmenZ(Rahmen* ram);
  473. //! Setzt die Farbe des Rahmens des Titels
  474. //! \param f Die Farbe im A8R8G8B8 Format
  475. DLLEXPORT void setTRFarbe(int f);
  476. //! Setzt die Breite des Rahmens des Titels
  477. //! \param br Die Breite in Pixeln
  478. DLLEXPORT void setTRBreite(int br);
  479. //! Setzt die Hintergrundfarbe des Körpers
  480. //! \param f Die Farbe im A8R8G8B8 Format
  481. DLLEXPORT void setKBgFarbe(int f);
  482. //! Setzt das Hintergrund Bild des Körpers durch kopieren
  483. //! \param b Das Bild, das kopiert werden soll
  484. DLLEXPORT void setKBgBild(Bild* b);
  485. //! Setzt einen Zeiger auf das Hintergrund Bild des Körpers
  486. //! \param b Das Bild
  487. DLLEXPORT void setKBgBildZ(Bild* b);
  488. //! Setzt einen Zeiger auf den Farbübergang des Körpers
  489. //! \param af Der Farbübergang
  490. DLLEXPORT void setKAlphaFeldZ(AlphaFeld* af);
  491. //! Setzt die Farbe des Farbübergangs des Körpers
  492. //! \param f Die Farbe im A8R8G8B8 Format
  493. DLLEXPORT void setKAfFarbe(int f);
  494. //! Setzt die Stärke des Farbübergangs des Körpers
  495. //! \param st Die Stärke
  496. DLLEXPORT void setKAfStrength(int st);
  497. //! Setzt den Parameter der Rückruffunktion, die aufgerufen wird, wenn
  498. //! der Schließen Knopf ein MausEreignis erhält \param param Der
  499. //! Parameter
  500. DLLEXPORT void setClosingMeParam(void* param);
  501. //! Setzt die Rückruffunktion, die Aufgerufen wird, wenn der Schließen
  502. //! Knopf ein MausEreignis erhält Wenn die Rückruffunktion 0
  503. //! zurückgiebt, oder nicht gesetzt wurde, wird ein Maus Ereignis von
  504. //! der Zeichnung nicht weiter beachtet Das Fenster wird nicht von
  505. //! selbst geschlossen, sondern sollte in der Rückruffunktion durch den
  506. //! aufruf von löscheStyle( Fenster::Style::Sichtbar ); geschlossen
  507. //! werden \param ak Ein Zeiger auf die Rückruffunktion
  508. DLLEXPORT void setClosingMe(MausAktion closingMe);
  509. //! Setzt die Hintergrund Farbe des Schließen Knopfes
  510. //! \param f Die Farbe im A8R8G8B8 Format
  511. DLLEXPORT void setSBgFarbe(int f);
  512. //! Setzt das Hintergrund Bild des Schließen Knopfes durch kopieren
  513. //! \param b Das Bild, das kopiert werden soll
  514. DLLEXPORT void setSBgBild(Bild* b);
  515. //! Setzt einen Zeiger auf das Hintergrund Bild des Schließen Knopfes
  516. //! \param b Das Bild
  517. DLLEXPORT void setSBgBildZ(Bild* b);
  518. //! Setzt einen Zeiger auf den Farbübergang des Schließen Knopfes
  519. //! \param af Der Farbübergang
  520. DLLEXPORT void setSAlphaFeldZ(AlphaFeld* af);
  521. //! Setzt die Farbe des Farbübergangs des Schließen Knopfes
  522. //! \param f Die Farbe im A8R8G8B8 Format
  523. DLLEXPORT void setSAfFarbe(int f);
  524. //! Setzt die Stärke des Farbübergangs des Schließen Knopfes
  525. //! \param st Die Stärke
  526. DLLEXPORT void setSAfStrength(int st);
  527. //! Setzt einen Zeiger auf den Farbübergang, der beim Klicken des
  528. //! Schließen Knopfes verwendet wird \param af Der Farbübergnag
  529. DLLEXPORT void setSKAlphaFeldZ(AlphaFeld* af);
  530. //! Setzt die Farbe des Farbübergangs, der beim Klicken des Schließen
  531. //! Knopfes verwendet wird \param f Die Farbe im A8R8G8B8 Format
  532. DLLEXPORT void setSKAfFarbe(int f);
  533. //! Setzt die Stärke des Farbübergangs, der beim Klicken des Schließen
  534. //! Knopfes verwendet wird \param st Die Stärke
  535. DLLEXPORT void setSKAfStrength(int st);
  536. //! Setzt die Minimale Größe des Fensters
  537. //! \param mx Die Minimale Breite in Pixeln
  538. //! \param my Die Minimale Höhe in Pixeln
  539. DLLEXPORT void setMin(int mx, int my);
  540. //! Setzt die Minimale Größe des Fensters
  541. //! \param min Die Minimale Breite und Höhe in Pixeln
  542. DLLEXPORT void setMin(const Punkt& min);
  543. //! Setzt die Maximale Größe des Fensters
  544. //! \param mx Die Maximale Breite in Pixeln
  545. //! \param my Die Maximale Höhe in Pixeln
  546. DLLEXPORT void setMax(int mx, int my);
  547. //! Setzt die Maximale Größe des Fensters
  548. //! \param min Die Maximale Breite und Höhe in Pixeln
  549. DLLEXPORT void setMax(const Punkt& max);
  550. //! Setzt die Minimale Größe des Fenster Körpers
  551. //! \param mx Die Minimale Breite in Pixeln
  552. //! \param my Die Minimale Höhe in Pixeln
  553. DLLEXPORT void setKMin(int mx, int my);
  554. //! Setzt die Minimale Größe des Fenster Körpers
  555. //! \param min Die Minimale Breite und Höhe in Pixeln
  556. DLLEXPORT void setKMin(const Punkt& min);
  557. //! Setzt die Maximale Größe des Fenster Körpers
  558. //! \param mx Die Maximale Breite in Pixeln
  559. //! \param my Die Maximale Höhe in Pixeln
  560. DLLEXPORT void setKMax(int mx, int my);
  561. //! Setzt die Maximale Größe des Fenster Körpers
  562. //! \param min Die Maximale Breite und Höhe in Pixeln
  563. DLLEXPORT void setKMax(const Punkt& max);
  564. //! Setzt einen Zeiger auf die Scrollbar am unteren Rand des Fensters
  565. //! \param hScroll Die Scrollbar
  566. DLLEXPORT void setHScrollBarZ(HScrollBar* hScroll);
  567. //! Setzt einen Zeiger auf die Scrollbar am rechten Rand des Fensters
  568. //! \param vScroll Die Scrollbar
  569. DLLEXPORT void setVScrollBarZ(VScrollBar* vScroll);
  570. //! Setzt die Maximale Scroll breite des Fenster Körpers
  571. //! \param max Die Breite in Pixeln
  572. DLLEXPORT void setHSBMax(int max);
  573. //! Setzt die Maximale Scroll höhe des Fenster Körpers
  574. //! \param max Die Höhe in Pixeln
  575. DLLEXPORT void setVSBMax(int max);
  576. //! Scrollt zu einer bestimmten x Position im Fenster Körper
  577. //! \param scroll Die Anzahl der Pixel, die der Inhalt nach links
  578. //! verschoben werden soll
  579. DLLEXPORT void setHSBScroll(int scroll);
  580. //! Scrollt zu einer bestimmten y Position im Fenster Körper
  581. //! \param scroll Die Anzahl der Pixel, die der Inhalt nach oben
  582. //! verschoben werden soll
  583. DLLEXPORT void setVSBScroll(int scroll);
  584. //! Fügt dem Fenster eine Zeichnung hinzu
  585. //! \param obj Die Zeichnung
  586. DLLEXPORT virtual void addMember(Zeichnung* obj);
  587. //! Entfernt eine Zeichnung aus dem Fenster
  588. //! \param zObj Die Zeichnung (ohne erhöhten reference Counter)
  589. DLLEXPORT virtual void removeMember(Zeichnung* zObj);
  590. //! Entfernt alle Zeichnungen aus dem Fenster
  591. DLLEXPORT virtual void removeAll();
  592. //! Aktualisiert das Objekt. Wird vom Framework aufgerufen
  593. //! \param tickVal Die Zeit in sekunden, die seit dem lezten Aufruf
  594. //! dieser Funktion vergangen ist \return 1, wenn sich etwas verändert
  595. //! hat und das Bild neu gezeichnet werden muss. 0 sonst
  596. DLLEXPORT bool tick(double tickval) override;
  597. //! Verarbeitet Tastatur Nachrichten
  598. //! \param me Das Ereignis, was durch die Tastatureingabe ausgelößt
  599. //! wurde
  600. DLLEXPORT void doTastaturEreignis(TastaturEreignis& te) override;
  601. //! Zeichnet das Fentster nach zRObj, falls es sichtbar ist
  602. //! \param zRObj Das Bild, in welches gezeichnet werden soll
  603. DLLEXPORT void render(Bild& zRObj) override;
  604. //! Gibt die Breite des Innenraumes in der Zeichnung in Pixeln zurück
  605. DLLEXPORT int getInnenBreite() const override;
  606. //! Gibt die Höhe des Innenraumes in der Zeichnung in Pixeln zurück
  607. DLLEXPORT int getInnenHeight() const override;
  608. //! Gibt den Rahmen des Fensters zurück
  609. DLLEXPORT Rahmen* getRahmen() const;
  610. //! Gibt den Rahmen des Fensters ohne erhöhen Reference Counter zurück
  611. DLLEXPORT Rahmen* zRahmen() const;
  612. //! Gibt die Farbe des Rahmens des Fensters im A8R8G8B8 Format zurück
  613. DLLEXPORT int getRFarbe() const;
  614. //! Gibt die Breite des Rahmens des Fensters in Pixeln zurück
  615. DLLEXPORT int getRBreite() const;
  616. //! Gibt den Titel des Fensters zurück
  617. DLLEXPORT Text* getTitel() const;
  618. //! Gibt den Titel des Fensters ohne erhöhten Reference Counter zurück
  619. DLLEXPORT Text* zTitel() const;
  620. //! Gibt das TextFeld zurück, das zum Zeichnen des Titels verwendet wird
  621. DLLEXPORT TextFeld* getTTextFeld() const;
  622. //! Gibt das TextFeld ohne erhöhten Reference Counter zurück, das zum
  623. //! Zeichnen des Titels verwendet wird
  624. DLLEXPORT TextFeld* zTTextFeld() const;
  625. //! Gibt die Schrift zurück, die für den Titel verwendet wird
  626. DLLEXPORT Schrift* getTSchrift() const;
  627. //! Gibt die Schrift ohne erhöten Reference Counter zurück, die für den
  628. //! Titel verwendet wird
  629. DLLEXPORT Schrift* zTSchrift() const;
  630. //! Gibt die Schrift Farbe des Titels im A8R8G8B8 Format zurück
  631. DLLEXPORT int getTSFarbe() const;
  632. //! Gibt die Höhe einer Zeile des Titels in Pixeln zurück
  633. DLLEXPORT int getTSSize() const;
  634. //! Gibt die Hintergrundfarbe des Titels im A8R8G8B8 Format zurück
  635. DLLEXPORT int getTBgFarbe() const;
  636. //! Gibt den Farbübergang des Titels zurück
  637. DLLEXPORT AlphaFeld* getTAlphaFeld() const;
  638. //! Gibt den Farbübergang des Titels ohne erhöhten Reference COunter
  639. //! zurück
  640. DLLEXPORT AlphaFeld* zTAlphaFeld() const;
  641. //! Gibt die Farbe des Farbübergangs des Titels im A8R8G8B8 Format
  642. //! zurück
  643. DLLEXPORT int getTAfFarbe() const;
  644. //! Gibt die Stärke des Farbübergangs des Titels zurück
  645. DLLEXPORT int getTAfStrength() const;
  646. //! Gibt das Hintergrund Bild des titels zurück
  647. DLLEXPORT Bild* getTBgBild() const;
  648. //! Gibt das Hintergrund Bild des titels ohne erhöhten Reference Counter
  649. //! zurück
  650. DLLEXPORT Bild* zTBgBild() const;
  651. //! Gibt den Rahmen des Titels zurück
  652. DLLEXPORT Rahmen* getTRahmen() const;
  653. //! Gibt den Rahmen des Titels ohne erhöhten Reference Counter zurück
  654. DLLEXPORT Rahmen* zTRahmen() const;
  655. //! Gibt die Farbe des Rahmens des Titels im A8R8G8B8 Format zurück
  656. DLLEXPORT int getTRFarbe() const;
  657. //! Gibt die Stärke des Rahmens des Titels zurück
  658. DLLEXPORT int getTRBreite() const;
  659. //! Gibt die Hintergrund Farbe des Körpers zurück
  660. DLLEXPORT int getKBgFarbe() const;
  661. //! Gibt das Hintergrund Bild des Körpers zurück
  662. DLLEXPORT Bild* getKBgBild() const;
  663. //! Gibt das Hintergrund Bild des Körpers ohne erhöhten Reference
  664. //! Counter zurück
  665. DLLEXPORT Bild* zKBgBild() const;
  666. //! Gibt den Farbübergang des Körpers zurück
  667. DLLEXPORT AlphaFeld* getKAlphaFeld() const;
  668. //! Gibt den Farbübergang des Körpers ohne erhöhten Reference Counter
  669. //! zurück
  670. DLLEXPORT AlphaFeld* zKAlphaFeld() const;
  671. //! Gibt die Farbe des Farbübergangs des Körpers im A8R8G8B8 Format
  672. //! zurück
  673. DLLEXPORT int getKAfFarbe() const;
  674. //! Gibt die Stärke des Farbübergangs des Körpers zurück
  675. DLLEXPORT int getKAfStrength() const;
  676. //! Gibt die Hintergrund Farbe des Schließen Knopfes im A8R8G8B8 Format
  677. //! zurück
  678. DLLEXPORT int getSBgFarbe() const;
  679. //! Gibt das Hintergrund Bild des Schließen Knopfes zurück
  680. DLLEXPORT Bild* getSBgBild() const;
  681. //! Gibt das Hintergrund Bild des Schließen Knopfes ohne erhöhten
  682. //! Reference COunter zurück
  683. DLLEXPORT Bild* zSBgBild() const;
  684. //! Gibt den Farbübergang des Schließen Knopfes zurück
  685. DLLEXPORT AlphaFeld* getSAlphaFeld() const;
  686. //! Gibt den Farbübergang des Schließen Knopfes ohne erhöhten Reference
  687. //! COunter zurück
  688. DLLEXPORT AlphaFeld* zSAlphaFeld() const;
  689. //! Gibt die Farbe des Farbübergangs des Schließen Knopfes im A8R8G8B8
  690. //! Format zurück
  691. DLLEXPORT int getSAfFarbe() const;
  692. //! Gibt die Stärke des Farbübergangs des Schließen Knopfes zurück
  693. DLLEXPORT int getSAfStrength() const;
  694. //! Gibt den Farbübergang zurück, der verwendet wird, wenn auf den
  695. //! Schließen Knopf gedrückt wird
  696. DLLEXPORT AlphaFeld* getSKAlphaFeld() const;
  697. //! Gibt den Farbübergang ohne erhöhten Reference Counter zurück, der
  698. //! verwendet wird, wenn auf den Schließen Knopf gedrückt wird
  699. DLLEXPORT AlphaFeld* zSKAlphaFeld() const;
  700. //! Gibt die Farbe des Farbübergangs im A8R8G8B8 Format zurück, der
  701. //! verwendet wird, wenn auf den Schließen Knopf gedrückt wird
  702. DLLEXPORT int getSKAfFarbe() const;
  703. //! Gibt die Stärke des Farbübergangs zurück, der verwendet wird, wenn
  704. //! auf den Schließen Knopf gedrückt wird
  705. DLLEXPORT int getSKAfStrength() const;
  706. //! Gibt die minimale Fenstergröße in Pixeln zurück
  707. DLLEXPORT const Punkt& getMin() const;
  708. //! Gibt die maximale Fenstergröße in Pixeln zurück
  709. DLLEXPORT const Punkt& getMax() const;
  710. //! Gibt die minimale Körpergröße in Pixeln zurück
  711. DLLEXPORT const Punkt& getKMin() const;
  712. //! Gibt die maximale Körpergröße in Pixeln zurück
  713. DLLEXPORT const Punkt& getKMax() const;
  714. //! Gibt die Scrollbar vom rechten Fensterrand zurück
  715. DLLEXPORT VScrollBar* getVScrollBar() const;
  716. //! Gibt die Scrollbar vom rechten Fensterrand ohne erhöhten Reference
  717. //! Counter zurück
  718. DLLEXPORT VScrollBar* zVScrollBar() const;
  719. //! Gibt die Scrollbar vom unteren Fensterrand zurück
  720. DLLEXPORT HScrollBar* getHScrollBar() const;
  721. //! Gibt die Scrollbar vom unteren Fensterrand ohne erhöhten Reference
  722. //! Counter zurück
  723. DLLEXPORT HScrollBar* zHScrollBar() const;
  724. //! Gibt eine Liste mit Zeichnungen zurück, die im Fenster sind
  725. DLLEXPORT Iterator<Zeichnung*> getMembers() const;
  726. //! Erzeugt eine Kopie des Fensters, die ohne Auswirkungen auf das
  727. //! Original verändert werden kann
  728. DLLEXPORT Zeichnung* dublizieren() const override;
  729. };
  730. } // namespace Framework
  731. #endif