GameWindow.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. /*
  2. ** Command & Conquer Generals Zero Hour(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. ////////////////////////////////////////////////////////////////////////////////
  19. // //
  20. // (c) 2001-2003 Electronic Arts Inc. //
  21. // //
  22. ////////////////////////////////////////////////////////////////////////////////
  23. // FILE: GameWindow.h /////////////////////////////////////////////////////////
  24. //-----------------------------------------------------------------------------
  25. //
  26. // Westwood Studios Pacific.
  27. //
  28. // Confidential Information
  29. // Copyright (C) 2001 - All Rights Reserved
  30. //
  31. //-----------------------------------------------------------------------------
  32. //
  33. // Project: RTS3
  34. //
  35. // File name: GameWindow.h
  36. //
  37. // Created: Colin Day, June 2001
  38. //
  39. // Desc: Header for game windowing system for generic windows and GUI
  40. // elements
  41. //
  42. //-----------------------------------------------------------------------------
  43. ///////////////////////////////////////////////////////////////////////////////
  44. #pragma once
  45. #ifndef __GAMEWINDOW_H_
  46. #define __GAMEWINDOW_H_
  47. // SYSTEM INCLUDES ////////////////////////////////////////////////////////////
  48. // USER INCLUDES //////////////////////////////////////////////////////////////
  49. #include "Lib/BaseType.h"
  50. #include "Common/GameMemory.h"
  51. #include "GameClient/Image.h"
  52. #include "GameClient/DisplayString.h"
  53. #include "GameClient/WinInstanceData.h"
  54. #include "GameClient/Color.h"
  55. ///////////////////////////////////////////////////////////////////////////////
  56. // FORWARD REFERENCES /////////////////////////////////////////////////////////
  57. ///////////////////////////////////////////////////////////////////////////////
  58. class GameWindow;
  59. class WindowLayout;
  60. class GameFont;
  61. struct GameWindowEditData;
  62. ///////////////////////////////////////////////////////////////////////////////
  63. // TYPE DEFINES ///////////////////////////////////////////////////////////////
  64. ///////////////////////////////////////////////////////////////////////////////
  65. enum { WIN_COLOR_UNDEFINED = GAME_COLOR_UNDEFINED };
  66. // WindowMsgData --------------------------------------------------------------
  67. //-----------------------------------------------------------------------------
  68. typedef UnsignedInt WindowMsgData;
  69. //-----------------------------------------------------------------------------
  70. enum WindowMsgHandledType { MSG_IGNORED, MSG_HANDLED };
  71. // callback types -------------------------------------------------------------
  72. typedef void (*GameWinMsgBoxFunc)( void ); //used for the Message box callbacks.
  73. typedef void (*GameWinDrawFunc)( GameWindow *,
  74. WinInstanceData * );
  75. typedef void (*GameWinTooltipFunc)( GameWindow *,
  76. WinInstanceData *,
  77. UnsignedInt );
  78. typedef WindowMsgHandledType (*GameWinInputFunc)( GameWindow *,
  79. UnsignedInt,
  80. WindowMsgData,
  81. WindowMsgData );
  82. typedef WindowMsgHandledType (*GameWinSystemFunc)( GameWindow *,
  83. UnsignedInt,
  84. WindowMsgData,
  85. WindowMsgData );
  86. enum
  87. {
  88. WIN_MAX_WINDOWS = 576,
  89. CURSOR_MOVE_TOL_SQ = 4,
  90. TOOLTIP_DELAY = 10,
  91. WIN_TOOLTIP_LEN = 64, // max length of tooltip text
  92. };
  93. // macros for easier conversion -----------------------------------------------
  94. #define SHORTTOLONG(a, b) ((UnsignedShort)(a) | ((UnsignedShort)(b) << 16))
  95. #define LOLONGTOSHORT(a) ((a) & 0x0000FFFF)
  96. #define HILONGTOSHORT(b) (((b) & 0xFFFF0000) >> 16)
  97. // Game window messages -------------------------------------------------------
  98. //-----------------------------------------------------------------------------
  99. enum GameWindowMessage
  100. {
  101. GWM_NONE = 0,
  102. GWM_CREATE, GWM_DESTROY,
  103. GWM_ACTIVATE, GWM_ENABLE,
  104. GWM_LEFT_DOWN, GWM_LEFT_UP,
  105. GWM_LEFT_DOUBLE_CLICK, GWM_LEFT_DRAG,
  106. GWM_MIDDLE_DOWN, GWM_MIDDLE_UP,
  107. GWM_MIDDLE_DOUBLE_CLICK, GWM_MIDDLE_DRAG,
  108. GWM_RIGHT_DOWN, GWM_RIGHT_UP,
  109. GWM_RIGHT_DOUBLE_CLICK, GWM_RIGHT_DRAG,
  110. GWM_MOUSE_ENTERING, GWM_MOUSE_LEAVING,
  111. GWM_WHEEL_UP, GWM_WHEEL_DOWN,
  112. GWM_CHAR, GWM_SCRIPT_CREATE,
  113. // note that GWM_MOUSE_POS is only actually propogated to windows if the static
  114. // sendMousePosMessages is set to true in the window manager file. See the
  115. // comment on the static declaration for addtional info
  116. GWM_INPUT_FOCUS, GWM_MOUSE_POS,
  117. GWM_IME_CHAR, GWM_IME_STRING
  118. };
  119. // WinInputReturnCode ------------------------------------------------------
  120. /** These return codes are returned when after processing events through
  121. * the window system */
  122. //-----------------------------------------------------------------------------
  123. enum WinInputReturnCode
  124. {
  125. WIN_INPUT_NOT_USED = 0,
  126. WIN_INPUT_USED,
  127. };
  128. #define GWM_USER 32768
  129. // Window status flags --------------------------------------------------------
  130. //-----------------------------------------------------------------------------
  131. enum
  132. {
  133. // when you edit this, remember to edit WindowStatusNames[]
  134. WIN_STATUS_NONE = 0x00000000, // No status bits set at all
  135. WIN_STATUS_ACTIVE = 0x00000001, // At the top of the window list
  136. WIN_STATUS_TOGGLE = 0x00000002, // If set, click to toggle
  137. WIN_STATUS_DRAGABLE = 0x00000004, // Window can be dragged
  138. WIN_STATUS_ENABLED = 0x00000008, // Window can receive input
  139. WIN_STATUS_HIDDEN = 0x00000010, // Window is hidden, no input
  140. WIN_STATUS_ABOVE = 0x00000020, // Window is always above others
  141. WIN_STATUS_BELOW = 0x00000040, // Window is always below others
  142. WIN_STATUS_IMAGE = 0x00000080, // Window is drawn with images
  143. WIN_STATUS_TAB_STOP = 0x00000100, // Window is a tab stop
  144. WIN_STATUS_NO_INPUT = 0x00000200, // Window does not take input
  145. WIN_STATUS_NO_FOCUS = 0x00000400, // Window does not take focus
  146. WIN_STATUS_DESTROYED = 0x00000800, // Window has been destroyed
  147. WIN_STATUS_BORDER = 0x00001000, // Window will be drawn with Borders & Corners
  148. WIN_STATUS_SMOOTH_TEXT = 0x00002000, // Window text will be drawn with smoothing
  149. WIN_STATUS_ONE_LINE = 0x00004000, // Window text will be drawn on only one line
  150. WIN_STATUS_NO_FLUSH = 0x00008000, // Window images will not be unloaded when window is hidden
  151. WIN_STATUS_SEE_THRU = 0x00010000, // Will not draw, but it NOT hidden ... does not apply to children
  152. WIN_STATUS_RIGHT_CLICK = 0x00020000, // Window pays attention to right clicks
  153. WIN_STATUS_WRAP_CENTERED = 0x00040000, // Text will be centered on each word wrap or \n
  154. WIN_STATUS_CHECK_LIKE = 0x00080000, // Make push buttons "check-like" with dual state
  155. WIN_STATUS_HOTKEY_TEXT = 0x00100000, // Make push buttons "check-like" with dual state
  156. WIN_STATUS_USE_OVERLAY_STATES = 0x00200000, // Push buttons will use the global automatic rendering overlay for disabled, hilited, and pushed.
  157. WIN_STATUS_NOT_READY = 0x00400000, // A disabled button that is available -- but not yet (power charge, fire delay).
  158. WIN_STATUS_FLASHING = 0x00800000, // Used for buttons that do cameo flashes.
  159. WIN_STATUS_ALWAYS_COLOR = 0x01000000, // Never render these buttons using greyscale renderer when button disabled.
  160. WIN_STATUS_ON_MOUSE_DOWN = 0x02000000, // Pushbutton triggers on mouse down.
  161. WIN_STATUS_SHORTCUT_BUTTON = 0x04000000, // Oh god... this is a total hack for shortcut buttons to handle rendering text top left corner...
  162. // when you edit this, remember to edit WindowStatusNames[]
  163. };
  164. // Message Box Button flags --------------------------------------------------------
  165. //-----------------------------------------------------------------------------
  166. enum
  167. {
  168. MSG_BOX_YES = 0x01, //Display the yes button
  169. MSG_BOX_NO = 0x02, //Display the No button
  170. MSG_BOX_OK = 0x08, //Display the Ok button
  171. MSG_BOX_CANCEL = 0x04, //Display the Cancel button
  172. };
  173. // WindowMessageBoxData ---------------------------------------------------------
  174. /** Data attached to each Message box window */
  175. //-----------------------------------------------------------------------------
  176. struct WindowMessageBoxData
  177. {
  178. GameWinMsgBoxFunc yesCallback; ///<Function pointer to the Yes Button Callback
  179. GameWinMsgBoxFunc noCallback;///<Function pointer to the No Button Callback
  180. GameWinMsgBoxFunc okCallback;///<Function pointer to the Ok Button Callback
  181. GameWinMsgBoxFunc cancelCallback;///<Function pointer to the Cancel Button Callback
  182. };
  183. // GameWindowEditData ---------------------------------------------------------
  184. /** Data attached to each window specifically for the editor */
  185. //-----------------------------------------------------------------------------
  186. struct GameWindowEditData
  187. {
  188. AsciiString systemCallbackString; ///< string for callback
  189. AsciiString inputCallbackString; ///< string for callback
  190. AsciiString tooltipCallbackString; ///< string for callback
  191. AsciiString drawCallbackString; ///< string for callback
  192. };
  193. // GameWindow -----------------------------------------------------------------
  194. /** Class definition for a game window. These are the basic elements of the
  195. * whole windowing sytem, all windows are GameWindows, as are all GUI controls
  196. * etc. */
  197. //-----------------------------------------------------------------------------
  198. class GameWindow : public MemoryPoolObject
  199. {
  200. MEMORY_POOL_GLUE_ABC( GameWindow ) ///< this abstract class needs memory pool hooks
  201. friend class GameWindowManager;
  202. public:
  203. GameWindow( void );
  204. // already defined by MPO.
  205. // virtual ~GameWindow( void );
  206. /// draw border for this window only, NO child windows or anything
  207. virtual void winDrawBorder( void ) = 0;
  208. Int winSetWindowId( Int id ); ///< set id for this window
  209. Int winGetWindowId( void ); ///< return window id for this window
  210. Int winSetSize( Int width, Int height ); ///< set size
  211. Int winGetSize( Int *width, Int *height ); ///< return size
  212. Int winActivate( void ); ///< pop window to top of list and activate
  213. Int winBringToTop( void ); ///< bring this window to the top of the win list
  214. Int winEnable( Bool enable ); /**< enable/disable a window, a disbled
  215. window can be seen but accepts no input */
  216. Bool winGetEnabled( void ); ///< Is window enabled?
  217. Int winHide( Bool hide ); ///< hide/unhide a window
  218. Bool winIsHidden( void ); ///< is this window hidden/
  219. UnsignedInt winSetStatus( UnsignedInt status ); ///< set status bits
  220. UnsignedInt winClearStatus( UnsignedInt status ); ///< clear status bits
  221. UnsignedInt winGetStatus( void ); ///< get status bits
  222. UnsignedInt winGetStyle( void ); ///< get style bits
  223. Int winNextTab( void ); ///< advance focus to next window
  224. Int winPrevTab( void ); ///< change focus to previous window
  225. Int winSetPosition( Int x, Int y ); ///< set window position
  226. Int winGetPosition( Int *x, Int *y ); ///< get window position
  227. Int winGetScreenPosition( Int *x, Int *y ); ///< get screen coordinates
  228. Int winGetRegion( IRegion2D *region ); ///< get window region
  229. Int winSetCursorPosition( Int x, Int y ); ///< set window cursor position
  230. Int winGetCursorPosition( Int *x, Int *y ); ///< get window cursor position
  231. // --------------------------------------------------------------------------
  232. // new methods for setting images
  233. Int winSetEnabledImage( Int index, const Image *image );
  234. Int winSetEnabledColor( Int index, Color color );
  235. Int winSetEnabledBorderColor( Int index, Color color );
  236. const Image *winGetEnabledImage( Int index ) { return m_instData.m_enabledDrawData[ index ].image; }
  237. Color winGetEnabledColor( Int index ) { return m_instData.m_enabledDrawData[ index ].color; }
  238. Color winGetEnabledBorderColor( Int index ) { return m_instData.m_enabledDrawData[ index ].borderColor; }
  239. Int winSetDisabledImage( Int index, const Image *image );
  240. Int winSetDisabledColor( Int index, Color color );
  241. Int winSetDisabledBorderColor( Int index, Color color );
  242. const Image *winGetDisabledImage( Int index ) { return m_instData.m_disabledDrawData[ index ].image; }
  243. Color winGetDisabledColor( Int index ) { return m_instData.m_disabledDrawData[ index ].color; }
  244. Color winGetDisabledBorderColor( Int index ) { return m_instData.m_disabledDrawData[ index ].borderColor; }
  245. Int winSetHiliteImage( Int index, const Image *image );
  246. Int winSetHiliteColor( Int index, Color color );
  247. Int winSetHiliteBorderColor( Int index, Color color );
  248. const Image *winGetHiliteImage( Int index ) { return m_instData.m_hiliteDrawData[ index ].image; }
  249. Color winGetHiliteColor( Int index ) { return m_instData.m_hiliteDrawData[ index ].color; }
  250. Color winGetHiliteBorderColor( Int index ) { return m_instData.m_hiliteDrawData[ index ].borderColor; }
  251. // --------------------------------------------------------------------------
  252. // draw methods and data
  253. Int winDrawWindow( void ); ///< draws the default background
  254. void winSetDrawOffset( Int x, Int y ); ///< set offset for drawing background image data
  255. void winGetDrawOffset( Int *x, Int *y ); ///< get draw offset
  256. void winSetHiliteState( Bool state ); ///< set hilite state
  257. void winSetTooltip( UnicodeString tip ); ///< set tooltip text
  258. Int getTooltipDelay() { return m_instData.m_tooltipDelay; } ///< get tooltip delay
  259. void setTooltipDelay(Int delay) { m_instData.m_tooltipDelay = delay; } ///< set tooltip delay
  260. //-----------------------------------------------------------------------------
  261. // text methods
  262. virtual Int winSetText( UnicodeString newText ); ///< set text string
  263. UnicodeString winGetText( void ); ///< get text string
  264. Int winGetTextLength(); ///< get number of chars in text string
  265. GameFont *winGetFont( void ); ///< get the font being used by this window
  266. virtual void winSetFont( GameFont *font ); ///< set font for window
  267. void winSetEnabledTextColors( Color color, Color borderColor );
  268. void winSetDisabledTextColors( Color color, Color borderColor );
  269. void winSetIMECompositeTextColors( Color color, Color borderColor );
  270. void winSetHiliteTextColors( Color color, Color borderColor );
  271. Color winGetEnabledTextColor( void );
  272. Color winGetEnabledTextBorderColor( void );
  273. Color winGetDisabledTextColor( void );
  274. Color winGetDisabledTextBorderColor( void );
  275. Color winGetIMECompositeTextColor( void );
  276. Color winGetIMECompositeBorderColor( void );
  277. Color winGetHiliteTextColor( void );
  278. Color winGetHiliteTextBorderColor( void );
  279. // window instance data
  280. Int winSetInstanceData( WinInstanceData *data ); ///< copy over instance data
  281. WinInstanceData *winGetInstanceData( void ); ///< get instance data
  282. void *winGetUserData( void ); ///< get the window user data
  283. void winSetUserData( void *userData ); ///< set the user data
  284. // heirarchy methods
  285. Int winSetParent( GameWindow *parent ); ///< set parent
  286. GameWindow *winGetParent( void ); ///< get parent
  287. Bool winIsChild( GameWindow *child ); ///< verifies parent
  288. GameWindow *winGetChild( void ); ///< get the child window
  289. Int winSetOwner( GameWindow *owner ); ///< set owner
  290. GameWindow *winGetOwner( void ); ///< get window's owner
  291. void winSetNext( GameWindow *next ); ///< set next pointer
  292. void winSetPrev( GameWindow *prev ); ///< set prev pointer
  293. GameWindow *winGetNext( void ); ///< get next window in window list
  294. GameWindow *winGetPrev( void ); ///< get previous window in window list
  295. // these are for interacting with a group of windows as a shell "screen"
  296. void winSetNextInLayout( GameWindow *next ); ///< set next in layout
  297. void winSetPrevInLayout( GameWindow *prev ); ///< set prev in layout
  298. void winSetLayout( WindowLayout *layout ); ///< set layout
  299. WindowLayout *winGetLayout( void ); ///< get layout layout
  300. GameWindow *winGetNextInLayout( void ); ///< get next window in layout
  301. GameWindow *winGetPrevInLayout( void ); ///< get prev window in layout
  302. // setting the callbacks ----------------------------------------------------
  303. Int winSetSystemFunc( GameWinSystemFunc system ); ///< set system
  304. Int winSetInputFunc( GameWinInputFunc input ); ///< set input
  305. Int winSetDrawFunc( GameWinDrawFunc draw ); ///< set draw
  306. Int winSetTooltipFunc( GameWinTooltipFunc tooltip ); ///< set tooltip
  307. Int winSetCallbacks( GameWinInputFunc input,
  308. GameWinDrawFunc draw,
  309. GameWinTooltipFunc tooltip ); ///< set draw, input, tooltip
  310. // pick correlation ---------------------------------------------------------
  311. Bool winPointInWindow( Int x, Int y ); /**is point inside this window?
  312. also return TRUE if point is in
  313. a child */
  314. /** given a piont, return the child window which contains the mouse pointer,
  315. if the point is not in a chilc, the function returns the 'window' paramater
  316. back to the caller */
  317. GameWindow *winPointInChild( Int x, Int y, Bool ignoreEnableCheck = FALSE, Bool playDisabledSound = FALSE );
  318. /** finds the child which contains the mouse pointer - reguardless of
  319. the enabled status of the child */
  320. GameWindow *winPointInAnyChild( Int x, Int y, Bool ignoreHidden, Bool ignoreEnableCheck = FALSE );
  321. // get the callbacks for a window -------------------------------------------
  322. GameWinInputFunc winGetInputFunc( void );
  323. GameWinSystemFunc winGetSystemFunc( void );
  324. GameWinDrawFunc winGetDrawFunc( void );
  325. GameWinTooltipFunc winGetTooltipFunc( void );
  326. // editor access only -------------------------------------------------------
  327. void winSetEditData( GameWindowEditData *editData );
  328. GameWindowEditData *winGetEditData( void );
  329. protected:
  330. /// 'images' should be taken care of when we hide ourselves or are destroyed
  331. void freeImages( void ) { }
  332. Bool isEnabled( void ); ///< see if we and our parents are enabled
  333. void normalizeWindowRegion( void ); ///< put UL corner in window region.lo
  334. GameWindow *findFirstLeaf( void ); ///< return first leaf of branch
  335. GameWindow *findLastLeaf( void ); ///< return last leaf of branch
  336. GameWindow *findPrevLeaf( void ); ///< return prev leav in tree
  337. GameWindow *findNextLeaf( void ); ///< return next leaf in tree
  338. // **************************************************************************
  339. Int m_status; // Status bits for this window
  340. ICoord2D m_size; // Width and height of the window
  341. IRegion2D m_region; // Current region occupied by window.
  342. // Low x,y is the window's origin
  343. Int m_cursorX; // window cursor X position if any
  344. Int m_cursorY; // window cursor Y position if any
  345. void *m_userData; // User defined data area
  346. WinInstanceData m_instData; // Class data, varies by window type
  347. void *m_inputData; // Client data
  348. // user defined callbacks
  349. GameWinInputFunc m_input; ///< callback for input
  350. GameWinSystemFunc m_system; ///< callback for system messages
  351. GameWinDrawFunc m_draw; ///< callback for drawing
  352. GameWinTooltipFunc m_tooltip; ///< callback for tooltip execution
  353. GameWindow *m_next, *m_prev; // List of sibling windows
  354. GameWindow *m_parent; // Window which contains this window
  355. GameWindow *m_child; // List of windows within this window
  356. //
  357. // the following are for "layout screens" and ONLY apply to root/parent
  358. // windows in a layout, any children of a window that is part of a layout
  359. // does NOT have layout screen information
  360. //
  361. GameWindow *m_nextLayout; ///< next in layout
  362. GameWindow *m_prevLayout; ///< prev in layout
  363. WindowLayout *m_layout; ///< layout this window is a part of
  364. // game window edit data for the GUIEditor only
  365. GameWindowEditData *m_editData;
  366. }; // end class GameWindow
  367. // ModalWindow ----------------------------------------------------------------
  368. //-----------------------------------------------------------------------------
  369. class ModalWindow : public MemoryPoolObject
  370. {
  371. MEMORY_POOL_GLUE_WITH_USERLOOKUP_CREATE( ModalWindow, "ModalWindow" )
  372. public:
  373. GameWindow *window; // Pointer to Modal Window
  374. ModalWindow *next; // Next Window Pointer
  375. };
  376. EMPTY_DTOR(ModalWindow)
  377. // Errors returned by window functions
  378. enum
  379. {
  380. WIN_ERR_OK = 0, // No Error
  381. WIN_ERR_GENERAL_FAILURE = -1, // General library failure
  382. WIN_ERR_INVALID_WINDOW = -2, // Window parameter was invalid
  383. WIN_ERR_INVALID_PARAMETER = -3, // Parameter was invalid
  384. WIN_ERR_MOUSE_CAPTURED = -4, // Mouse already captured
  385. WIN_ERR_KEYBOARD_CAPTURED = -5, // Keyboard already captured
  386. WIN_ERR_OUT_OF_WINDOWS = -6 // Too many windows have been created
  387. };
  388. // Input capture/release flags
  389. enum
  390. {
  391. WIN_CAPTURE_MOUSE = 0x00000001, // capture mouse
  392. WIN_CAPTURE_KEYBOARD = 0x00000002, // capture keyboard
  393. WIN_CAPTURE_ALL = 0xFFFFFFFF, // capture keyboard and mouse
  394. };
  395. // INLINING ///////////////////////////////////////////////////////////////////
  396. // EXTERNALS //////////////////////////////////////////////////////////////////
  397. extern void GameWinDefaultDraw( GameWindow *window,
  398. WinInstanceData *instData );
  399. extern WindowMsgHandledType GameWinDefaultSystem( GameWindow *window,
  400. UnsignedInt msg,
  401. WindowMsgData mData1,
  402. WindowMsgData mData2 );
  403. extern WindowMsgHandledType GameWinDefaultInput( GameWindow *window,
  404. UnsignedInt msg,
  405. WindowMsgData mData1,
  406. WindowMsgData mData2 );
  407. extern WindowMsgHandledType GameWinBlockInput( GameWindow *window,
  408. UnsignedInt msg,
  409. WindowMsgData mData1,
  410. WindowMsgData mData2 );
  411. extern void GameWinDefaultTooltip( GameWindow *window,
  412. WinInstanceData *instData,
  413. UnsignedInt mouse );
  414. extern const char *WindowStatusNames[];
  415. extern const char *WindowStyleNames[];
  416. #endif // __GAMEWINDOW_H_