WM.H
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:20k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                                uC/GUI
  4. *                        Universal graphic software for embedded applications
  5. *
  6. *                       (c) Copyright 2002, Micrium Inc., Weston, FL
  7. *                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
  8. *
  9. *              礐/GUI is protected by international copyright laws. Knowledge of the
  10. *              source code may not be used to write a similar product. This file may
  11. *              only be used in accordance with a license and should not be redistributed
  12. *              in any way. We appreciate your understanding and fairness.
  13. *
  14. ----------------------------------------------------------------------
  15. File        : WM.H
  16. Purpose     : Windows manager include
  17. ----------------------------------------------------------------------
  18. */
  19. #ifndef WM_H            /* Make sure we only include it once */
  20. #ifndef GUI_H
  21.   #include "GUI.H"      /* Needed because of typedefs only */
  22. #endif
  23. #ifndef WM_H         /* Make sure circular reference do not lead
  24.                            to multiple-inclusion problem */
  25. #define WM_H
  26. /* Make sure we actually have configured windows. If we have not,
  27.   there is no point for a windows manager and it will therefor not
  28.   generate any code !
  29. */
  30. #if GUI_WINSUPPORT
  31. /*
  32.       *************************************************************
  33.       *                                                           *
  34.       *                 Defaults for configuration switches       *
  35.       *                                                           *
  36.       *************************************************************
  37. */
  38. #ifndef WM_ASSERT
  39.   #define WM_ASSERT(expr) GUI_DEBUG_ASSERT(expr)
  40. #endif
  41. #ifndef WM_RESULT
  42.   #define WM_RESULT void
  43. #endif
  44. #ifndef WM_SUPPORT_TOUCH
  45.   #define WM_SUPPORT_TOUCH        GUI_SUPPORT_TOUCH
  46. #endif
  47. #ifndef WM_SUPPORT_OBSTRUCT
  48.   #define WM_SUPPORT_OBSTRUCT 1
  49. #endif
  50. #ifndef WM_COMPATIBLE_MODE
  51.   #define WM_COMPATIBLE_MODE 1
  52. #endif
  53. /*
  54.       *************************************************************
  55.       *                                                           *
  56.       *               Configuration check                         *
  57.       *                                                           *
  58.       *************************************************************
  59. */
  60. /*
  61.       *************************************************************
  62.       *                                                           *
  63.       *               Locking macros                              *
  64.       *                                                           *
  65.       *************************************************************
  66.   For performance reasons, the windows manager user the same locking mechanisms
  67.   as the GUI layer. The advantage is that wiht a single call to GUI_LOCK both
  68.   the graphic level and the WM level are covered.
  69. */
  70. #define WM_LOCK()   GUI_LOCK()
  71. #define WM_UNLOCK() GUI_UNLOCK()
  72. /* Memory allocation locking is seperate from Windows managers in
  73.    order to be able to use different resource semaphores. Per
  74.  default, the same one is used.
  75. */
  76. #ifndef WMALLOC_LOCK
  77.   #define WMALLOC_LOCK()   WM_LOCK()
  78.   #define WMALLOC_UNLOCK() WM_UNLOCK()
  79. #endif
  80. /************************************************************
  81. *
  82. *          Public data (just for inline functions
  83. *                       in form of macros)
  84. *
  85. *************************************************************
  86. */
  87. extern U8 WM_IsActive;
  88. /************************************************************
  89. *
  90. *          Data types
  91. *
  92. *************************************************************
  93. */
  94. typedef struct {
  95.   int Key, PressedCnt;
  96. } WM_KEY_INFO;
  97. typedef struct {
  98.   int NumItems, v, PageSize;
  99. } WM_SCROLL_STATE;
  100. /*
  101.       *************************************************************
  102.       *                                                           *
  103.       *               Function replacement macros                 *
  104.       *                                                           *
  105.       *************************************************************
  106. */
  107. #define WM_GetIsActive()          WM_IsActive
  108. #define WM_GetNumWindows()        WM__NumWindows
  109. #define WM_GetNumInvalidWindows() WM__NumInvalidWindows
  110. /*********************************************************************
  111. *
  112. *               Messages Ids
  113. The following is the list of windows messages.
  114. */
  115. #ifndef _WINUSER_              /* Conflicts with winuser.h ... */
  116. #define WM_PAINT               1 /* Repaint window (because content is (partially) invalid */
  117. #define WM_COVER               2 /* Window has been partially covered. Normally, there is no reaction to this event. */
  118. #define WM_CREATE              3 /* The first message received, right after client has actually been created */
  119. #define WM_DELETE              4 /* Delete (Destroy) command: This tells the client to free its data strutures since the window
  120.                                     it is associates with no longer exists.*/
  121. #define WM_SIZE                6 /* Is sent to a window after its size has changed */
  122. #define WM_MOVE                7 /* window has been moved */
  123. #define WM_SHOW                8 /* windows has just received the show command */
  124. #define WM_HIDE                9 /* windows has just received the hide command */
  125. #define WM_FGND               10 /* window has been made top of window stack */
  126. #define WM_BGND               11 /* window has just been put to bottom of stack */
  127. #define WM_TOUCH              12 /* touch screen message */
  128. #define WM_KEY                13 /* Key has been pressed */
  129. #define WM_GETCLIENTRECT      100      /* get client rectangle in window coordinates*/
  130. #define WM_GETCLIENTRECT_ABS  101      /* get client rectangle in absolute coordinates*/
  131. #define WM_GET_INSIDE_RECT    102      /* get inside rectangle: client rectangle minus pixels lost to effect */
  132. #define WM_GETORG             104
  133. #define WM_GET_ID             105      /* Get id of widget */
  134. #define WM_GET_CLIENT_WINDOW  106      /* Get window handle of client window. Default is the same as window */
  135. #define WM_CAPTURE_RELEASED   107      /* Let window know that mouse capture is over */
  136. #define WM_INIT_DIALOG        109      /* Inform dialog that it is ready for init */
  137. #define WM_SET_FOCUS          110      /* Inform window that it has gotten or lost the focus */
  138. #define WM_GET_ACCEPT_FOCUS   111      /* Find out if window can accept the focus */
  139. #define WM_GET_FOCUSSED_CHILD 112      /* Which child currently has the focus */
  140. #define WM_GET_HAS_FOCUS      113      /* Does this window have the focus ? */
  141. #define WM_GET_BKCOLOR        114      /* Return back ground color (only frame window and similar) */
  142. #define WM_SET_ENABLE         115      /* Enable or disable widget */
  143. #define WM_GET_SCROLL_STATE   116      /* Query state of scroll bar */
  144. #define WM_ADD_SCROLLBAR      118      /* Scroller added */
  145. #define WM_SET_SCROLL_STATE   119      /* Set scroll info ... only effective for scrollbars */
  146. #define WM_NOTIFY_CHILD_HAS_FOCUS 120
  147. #define WM_NOTIFY_PARENT      121
  148. #define WM_USER               200      /* Reserved for user messages */
  149. /*------------------- added by scw -------------------*/
  150. #define WM_TIME_OUT   201
  151. /*-------------------- 2008-07-20 --------------------*/
  152. #endif
  153. /*********************************************************************
  154. *
  155. *               Notification codes
  156. The following is the list of notification codes send
  157. with the WM_NOTIFY message
  158. */
  159. #define WM_NOTIFICATION_CLICKED       1
  160. #define WM_NOTIFICATION_RELEASED      2
  161. #define WM_NOTIFICATION_MOVED_OUT     3
  162. #define WM_NOTIFICATION_SEL_CHANGED   4
  163. #define WM_NOTIFICATION_VALUE_CHANGED 5
  164. /*
  165.         *******************************************************************
  166.         *                                                                 *
  167.         *              Memory management                                  *
  168.         *                                                                 *
  169.         *******************************************************************
  170. */
  171. #define WM_FREE(h)     GUI_ALLOC_FREE(h)
  172. #define WM_ALLOC(h)    GUI_ALLOC_ALLOC(h)
  173. #define WM_HWIN        GUI_HWIN
  174. #define WM_HWIN_NULL   GUI_HWIN_NULL
  175. #define WM_HMEM        GUI_HMEM
  176. #define WM_HMEM2Ptr    GUI_ALLOC_H2P
  177. #define WM_FREEPTR(ph) GUI_ALLOC_FreePtr(ph)
  178. #define WM_HMEM_NULL   GUI_HMEM_NULL
  179. #define WM_HBKWIN      1                         /* Handle of background window */
  180. /*
  181.         *******************************************************************
  182.         *                                                                 *
  183.         *           Windows manager types                                 *
  184.         *                                                                 *
  185.         *******************************************************************
  186. */
  187. /* Windows create flags. These flags can be passed to the create window
  188.    function as flag-parameter. The flags are combinable using the
  189.    binary or operator.
  190. */
  191. #define WM_CF_HASTRANS   (1<<0)  /* Has transparency. Needs to be defined
  192.                                     for windows which do not fill the entire
  193.                                     section of their (client) rectangle. */
  194. #define WM_CF_HIDE       (0<<1)  /* Hide window after creation (default !) */
  195. #define WM_CF_SHOW       (1<<1)  /* Show window after creation */
  196. #define WM_CF_FGND       (0<<2)  /* Put window in foreground after creation
  197.                                     (default !) */
  198. #define WM_CF_BGND       (1<<2)  /* Put window in background after creation */
  199. #define WM_CF_MEMDEV     (1<<3)  /* Use memory device for redraws */
  200. #define WM_CF_STAYONTOP  (1<<4)  /* Stay on top */
  201. #define WM_CF_ACTIVATE   (1<<5)  /* If automatic activation upon creation of
  202.                                     window is desired */
  203. typedef struct {
  204.   int MsgId;            /* type of message */
  205.   WM_HWIN hWin;         /* Destination window */
  206.   WM_HWIN hWinSrc;      /* Source window  */
  207.   union {
  208.     void* p;            /* Some messages need more info ... */
  209.     int v;
  210.     GUI_COLOR Color;
  211.   } Data;
  212. } WM_MESSAGE;
  213. typedef void WM_CALLBACK( WM_MESSAGE* pMsg);
  214. typedef struct WM_OBJ_struct WM_Obj;
  215. struct WM_OBJ_struct {
  216.   GUI_RECT Rect;        /* outer dimensions of window */
  217.   GUI_RECT InvalidRect; /* invalid rectangle */
  218.   WM_CALLBACK* cb;      /* ptr to notification callback */
  219.   WM_HWIN hNextLin;     /* Next window in linear list */
  220.   WM_HWIN hParent, hFirstChild, hNext;
  221.   U16 Status;           /* Some status flags */
  222. };
  223. /*
  224. **********************************************************************
  225. *
  226. *              General control routines
  227. *
  228. **********************************************************************
  229. */
  230. void WM_Activate  (void);
  231. void WM_Deactivate(void);
  232. void WM_Init      (void);
  233. int  WM_Exec      (void);    /* Execute all jobs ... Return 0 if nothing was done. */
  234. int  WM_Exec1     (void);    /* Execute one job  ... Return 0 if nothing was done. */
  235. U16  WM_SetCreateFlags(U16 Flags);
  236. void WM_SetCapture(WM_HWIN hObj, int AutoRelease);
  237. void WM_ReleaseCapture(void);
  238. /*********************************************************************
  239. *
  240. *           Window manager interface
  241. *
  242. **********************************************************************
  243. */
  244. /* Create/delete windows */
  245. WM_HWIN WM_CreateWindow           (int x0, int y0, 
  246.                                    int xSize, int ySize,
  247.                                    U16 Style, WM_CALLBACK* cb, int NumExtraBytes);
  248. WM_HWIN WM_CreateWindowAsChild    (int x0, int y0, 
  249.                                    int xSize, int ySize, 
  250.                                    WM_HWIN hWinParent, 
  251.                                    U16 Style, WM_CALLBACK* cb, int NumExtraBytes);
  252. void WM_DeleteWindow              (WM_HWIN hWin);
  253. /* Check validity */
  254. int WM_IsWindow                   (WM_HWIN hWin);
  255. /* Show/hide windows */
  256. void WM_HideWindow                (WM_HWIN hWin);
  257. void WM_ShowWindow                (WM_HWIN hWin);
  258. /* Set/clear the has transparency flag */
  259. void WM_SetHasTrans               (WM_HWIN hWin);
  260. void WM_ClrHasTrans               (WM_HWIN hWin);
  261. int  WM_GetHasTrans               (WM_HWIN hWin);
  262. /* Invalidate/validate windows or rectangles */
  263. void WM_InvalidateArea            (GUI_RECT* pRect);
  264. void WM_InvalidateRect            (WM_HWIN hWin, const GUI_RECT*pRect);
  265. void WM_InvalidateWindow          (WM_HWIN hWin);
  266. void WM_ValidateRect              (WM_HWIN hWin, const GUI_RECT*pRect);
  267. void WM_ValidateWindow            (WM_HWIN hWin);
  268. /* Move/resize windows */
  269. void WM_MoveWindow                (WM_HWIN hWin, int dx, int dy);
  270. void WM_ResizeWindow              (WM_HWIN hWin, int XSize, int YSize);
  271. void WM_MoveTo                    (WM_HWIN hWin, int x, int y);
  272. void WM_SetSize                   (WM_HWIN hWin, int XSize, int YSize);
  273. /* Set (new) callback function */
  274. WM_CALLBACK* WM_SetCallback       (WM_HWIN Win, WM_CALLBACK* cb);
  275. /* Get size/origin of a window */
  276. void WM_GetClientRect             (GUI_RECT* pRect);
  277. void WM_GetInsideRect             (WM_HWIN hWin, GUI_RECT* pRect);
  278. void WM_GetWindowRect             (GUI_RECT* pRect);
  279. int  WM_GetOrgX                   (void);
  280. int  WM_GetOrgY                   (void);
  281. int  WM_GetWindowOrgX             (WM_HWIN hWin);
  282. int  WM_GetWindowOrgY             (WM_HWIN hWin);
  283. int  WM_GetWindowSizeX            (WM_HWIN hWin);
  284. int  WM_GetWindowSizeY            (WM_HWIN hWin);
  285. WM_HWIN WM_GetFirstChild          (WM_HWIN hWin);
  286. WM_HWIN WM_GetNextSibling         (WM_HWIN hWin);
  287. WM_HWIN WM_GetParent              (WM_HWIN hWin);
  288. int  WM_GetId                     (WM_HWIN hWin);
  289. WM_HWIN WM_GetClientWindow        (WM_HWIN hObj);
  290. GUI_COLOR WM_GetBkColor           (WM_HWIN hObj);
  291. /* Change Z-Order of windows */
  292. void WM_BringToBottom(WM_HWIN hWin);
  293. void WM_BringToTop(WM_HWIN hWin);
  294. GUI_COLOR WM_SetDesktopColor(GUI_COLOR Color);
  295. /* Select window used for drawing operations */
  296. WM_HWIN WM_SelectWindow           (WM_HWIN  hWin);
  297. WM_HWIN WM_GetActiveWindow        (void);
  298. void    WM_Paint                  (WM_HWIN hObj);
  299. /* Get foreground/background windows */
  300. WM_HWIN WM_GetDesktopWindow    (void);
  301. /* Reduce clipping area of a window */
  302. const GUI_RECT* WM_SetUserClipRect(const GUI_RECT* pRect);
  303. void            WM_SetDefault     (void);
  304. /* Use of memory devices */
  305. void WM_EnableMemdev              (WM_HWIN hWin);
  306. void WM_DisableMemdev             (WM_HWIN hWin);
  307. int WM_OnKey(int Key, int Pressed);
  308. /******************************************************************
  309. *
  310. *           Message related funcions
  311. *
  312. *******************************************************************
  313.   Please note that some of these functions do not yet show up in the
  314.   documentation, as they should not be required by application program.
  315. */
  316. void      WM_NotifyParent         (WM_HWIN hWin, int Notification);
  317. void      WM_SendMessage          (WM_HWIN hWin, WM_MESSAGE* p);
  318. void      WM_DefaultProc          (WM_MESSAGE* pMsg);
  319. int       WM_BroadcastMessage     (WM_MESSAGE* pMsg);
  320. void      WM_SetScrollState       (WM_HWIN hWin, const WM_SCROLL_STATE* pState);
  321. void      WM_SetEnableState       (WM_HWIN hItem, int State);
  322. void      WM_SendToParent         (WM_HWIN hWin, WM_MESSAGE* pMsg);
  323. int       WM_HasCaptured(WM_HWIN hWin);
  324. int       WM_SetFocus(WM_HWIN hWin);
  325. WM_HWIN   WM_GetFocussedChild(WM_HWIN hDialog);
  326. WM_HWIN   WM_SetFocusOnNextChild(WM_HWIN hParent);     /* Set the focus to the next child */
  327. WM_HWIN   WM_GetDialogItem(WM_HWIN hWin, int Id);
  328. void      WM_EnableWindow (WM_HWIN hWin);
  329. void      WM_DisableWindow(WM_HWIN hWin);
  330. void      WM_GetScrollState(WM_HWIN hObj, WM_SCROLL_STATE* pScrollState);
  331. /*********************************************************************
  332. *
  333. *           Misc routines
  334. *
  335. **********************************************************************
  336. */
  337. int       WM_HandleHID   (void);
  338. WM_HWIN   WM_Screen2hWin   (int x, int y);
  339. int       WM__InitIVRSearch(const GUI_RECT* pMaxRect);
  340. int       WM__GetNextIVR   (void);
  341. int       WM__GetOrgX(void);
  342. int       WM__GetOrgY(void);
  343. /*
  344.       *************************************************
  345.       *                                               *
  346.       *        Macros for lower levels                *
  347.       *                                               *
  348.       *************************************************
  349. These are the core macro of this module. They make sure that the
  350. windows manager is called an that we iterate over all the rect-
  351. angles that thw windows manager has registered as visible
  352. and invalid (IVR, for InValid Rectangle). Using these macros makes
  353. the code in the actual routines easier to read.
  354. */
  355. #define WM_ITERATE_START(pRect)                   
  356.   {                                               
  357.     GUI_LOCK();                                   
  358.     if (WM__InitIVRSearch(pRect))                 
  359.       do {
  360. #define WM_ITERATE_END()                          
  361.     } while (WM__GetNextIVR());                   
  362.     GUI_UNLOCK();                                 
  363.   }
  364. #define WM_ADDORGX(x)    x += WM__GetOrgX()
  365. #define WM_ADDORGY(y)    y += WM__GetOrgY()
  366. #define WM_ADDORG(x0,y0) WM_ADDORGX(x0); WM_ADDORGY(y0)
  367. #define WM_SUBORGX(x)    x-=WM__GetOrgX()
  368. #define WM_SUBORGY(y)    y-=WM__GetOrgY()
  369. #define WM_SUBORG(x0,y0) WM_SUBORGX(x0); WM_SUBORGY(y0)
  370. /*
  371.       *************************************************
  372.       *                                               *
  373.       *  Macros for compatibility with older versions *
  374.       *                                               *
  375.       *************************************************
  376. */
  377. #if WM_COMPATIBLE_MODE
  378.   #define HBWIN             WM_HWIN
  379.   #define HBWIN_NULL        WM_HWIN_NULL
  380.   #define WM_HideWin        WM_HideWindow
  381.   #define WM_ShowWin        WM_ShowWindow
  382.   #define WM_GetKey         GUI_GetKey
  383.   #define WM_WaitKey        GUI_WaitKey
  384.   #define WM_ExecIdle       WM_Exec
  385.   #define WM_ExecIdle1      WM_Exec1
  386.   #define WM_HideBWin       WM_HideWindow
  387.   #define WM_ShowBWin       WM_ShowWindow
  388.   #define WM_DeleteBWin     WM_DeleteWindow
  389.   #define WM_Invalidate     WM_InvalidateWindow
  390.   #define WM_InvalidateBWin WM_InvalidateWindow
  391.   #define WM_MoveBWin       WM_MoveWindow
  392.   #define WM_ResizeBWin     WM_ResizeWindow
  393.   #define WM_GetWinRect     WM_GetWindowRect
  394.   #define WM_GetWinOrgX     WM_GetWindowOrgX
  395.   #define WM_GetWinOrgY     WM_GetWindowOrgY
  396.   #define WM_GetWinSizeX    WM_GetWindowSizeX
  397.   #define WM_GetWinSizeY    WM_GetWindowSizeY
  398.   #define WM_GetXSize       WM_GetWindowSizeX
  399.   #define WM_GetYSize       WM_GetWindowSizeY
  400.   #define WM_SetFGndBWin    WM_SetForegroundWindow
  401.   #define WM_SetBGndBWin    WM_SetBackgroundWindow
  402.   #define WM_SelWin         WM_SelectWindow
  403.   #define WM_SetActiveBWin  WM_SelectWindow
  404.   #define WM_GetActiveBWin  WM_GetActiveWindow
  405.   #define WM_GetBGndBWin    WM_GetDesktopWindow
  406.   #define WM_GetBackgroundWindow  WM_GetDesktopWindow
  407.   #define WM_GetFGndBWin            0
  408.   #define WM_GetForegroundWindow    0
  409.   #define WM_SetForegroundWindow    WM_BringToTop
  410.   #define WM_SetUserClipArea WM_SetUserClipRect
  411.   #define WM_CreateBWin(x0,y0,xsize,ysize, Style,cb) WM_CreateWindow(x0,y0,xsize,ysize, Style,cb, 0)
  412.   #define WM_Start()
  413.   #define WM_Stop()
  414.   #define WM_SetBkWindowColor(Color)  WM_SetDesktopColor(Color)
  415. #endif
  416. /*
  417.   *****************************************************************
  418.   *
  419.   *              Internal types and declarations
  420.   *
  421.   *****************************************************************
  422.   The following could be placed in a file of its own as it is not
  423.   used outside of the window manager
  424. */
  425. /* Basic Windows status flags.
  426.    For module-internally use only !
  427. */
  428. #define WM_SF_HASTRANS    (1<<0)
  429. #define WM_SF_INVALID     (1<<1)
  430. #define WM_SF_INUSE       (1<<2)    /* mark entry in array as used */
  431. #define WM_SF_MEMDEV      (1<<3)
  432. #define WM_SF_STAYONTOP   WM_CF_STAYONTOP
  433. #define WM_SF_ISVIS       (1<<7)    /* Is visible flag */
  434. #define WM_HANDLE2PTR(hWin) ((WM_Obj*)WM_HMEM2Ptr(hWin))    /* older form ... to be eliminated */
  435. #define WM_H2P(hWin)        ((WM_Obj*)WM_HMEM2Ptr(hWin))
  436. /*
  437.   *****************************************************************
  438.   *
  439.   *              WM_ module internal data
  440.   *
  441.   *****************************************************************
  442. */
  443. #ifdef WM_C
  444.   #define EXTERN
  445. #else
  446.   #define EXTERN extern
  447. #endif
  448. EXTERN U16     WM__NumWindows;
  449. EXTERN U16     WM__NumInvalidWindows;
  450. EXTERN WM_HWIN WM__FirstWin;
  451. #undef EXTERN
  452. #endif   /* GUI_WINSUPPORT */
  453. #endif   /* WM_H */
  454. #endif   /* WM_H */