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