亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? framewin.c

?? C語言和ucGUI實現的電子地圖功能,地圖的移動(方向鍵),縮放,查找
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*********************************************************************************************************
*                                                uC/GUI
*                        Universal graphic software for embedded applications
*
*                       (c) Copyright 2002, Micrium Inc., Weston, FL
*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
*              礐/GUI is protected by international copyright laws. Knowledge of the
*              source code may not be used to write a similar product. This file may
*              only be used in accordance with a license and should not be redistributed
*              in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File        : FRAMEWIN.c
Purpose     : Implementation of framewindow widget
---------------------------END-OF-HEADER------------------------------
*/

#include <stdlib.h>
#include <string.h>
#include "FRAMEWIN_Private.h"
#include "GUI_Protected.h"
#include "WM_Intern.h"

#if GUI_WINSUPPORT

/******************************************************************
*
*        Config defaults
*
*******************************************************************
*/

/* Support for 3D effects */
#ifndef FRAMEWIN_CLIENTCOLOR_DEFAULT
  #define FRAMEWIN_CLIENTCOLOR_DEFAULT 0xc0c0c0
#endif

/* Default for top frame size */
#ifndef FRAMEWIN_TITLEHEIGHT_DEFAULT
  #define FRAMEWIN_TITLEHEIGHT_DEFAULT 0
#endif

/* Default for left/right/top/bottom frame size */
#ifndef FRAMEWIN_BORDER_DEFAULT
  #define FRAMEWIN_BORDER_DEFAULT 3
#endif

/* Default for inner frame size */
#ifndef FRAMEWIN_IBORDER_DEFAULT
  #define FRAMEWIN_IBORDER_DEFAULT 1
#endif

/* Default font */
#ifndef FRAMEWIN_DEFAULT_FONT
  #define FRAMEWIN_DEFAULT_FONT &GUI_Font8_1
#endif

/* Default barcolor when framewin is active */
#ifndef FRAMEWIN_BARCOLOR_ACTIVE_DEFAULT
  #define FRAMEWIN_BARCOLOR_ACTIVE_DEFAULT 0xFF0000
#endif

/* Default barcolor when framewin is inactive */
#ifndef FRAMEWIN_BARCOLOR_INACTIVE_DEFAULT
  #define FRAMEWIN_BARCOLOR_INACTIVE_DEFAULT 0x404040
#endif

/* Default framecolor */
#ifndef FRAMEWIN_FRAMECOLOR_DEFAULT
  #define FRAMEWIN_FRAMECOLOR_DEFAULT 0xAAAAAA
#endif

/* Default textcolor when framewin is active */
#ifndef FRAMEWIN_TEXTCOLOR0_DEFAULT
  #define FRAMEWIN_TEXTCOLOR0_DEFAULT GUI_WHITE
#endif

/* Default textcolor when framewin is inactive */
#ifndef FRAMEWIN_TEXTCOLOR1_DEFAULT
  #define FRAMEWIN_TEXTCOLOR1_DEFAULT GUI_WHITE
#endif

/*********************************************************************
*
*       public data, defaults (internal use only)
*
**********************************************************************
*/

FRAMEWIN_PROPS FRAMEWIN__DefaultProps = {
  FRAMEWIN_DEFAULT_FONT,
  FRAMEWIN_BARCOLOR_INACTIVE_DEFAULT,
  FRAMEWIN_BARCOLOR_ACTIVE_DEFAULT,
  FRAMEWIN_TEXTCOLOR0_DEFAULT,
  FRAMEWIN_TEXTCOLOR1_DEFAULT,
  FRAMEWIN_CLIENTCOLOR_DEFAULT,
  FRAMEWIN_TITLEHEIGHT_DEFAULT,
  FRAMEWIN_BORDER_DEFAULT,
  FRAMEWIN_IBORDER_DEFAULT
};

/*********************************************************************
*
*       static data
*
**********************************************************************
*/

static I16 FRAMEWIN__MinVisibility = 5;

/*********************************************************************
*
*           Static routines
*
**********************************************************************
*/

/*********************************************************************
*
*       _SetActive
*/
static void _SetActive(FRAMEWIN_Handle hObj, int State) {
  FRAMEWIN_Obj* pObj;
  pObj = FRAMEWIN_H2P(hObj);
  if        (State && !(pObj->Flags & FRAMEWIN_SF_ACTIVE)) {
    pObj->Flags |= FRAMEWIN_CF_ACTIVE;
    FRAMEWIN_Invalidate(hObj);
  } else if (!State && (pObj->Flags & FRAMEWIN_SF_ACTIVE)) {
    pObj->Flags &= ~FRAMEWIN_CF_ACTIVE;
    FRAMEWIN_Invalidate(hObj);
  }
}

/*********************************************************************
*
*       _OnTouch
*/
static void _OnTouch(FRAMEWIN_Handle hWin, FRAMEWIN_Obj* pObj, WM_MESSAGE* pMsg) {
  const GUI_PID_STATE* pState;
  pState = (const GUI_PID_STATE*)pMsg->Data.p;
  if (pMsg->Data.p) {  /* Something happened in our area (pressed or released) */
    if (pState->Pressed) {
      if (!(pObj->Flags & FRAMEWIN_SF_ACTIVE)) {
        WM_SetFocus(hWin);
      }
      WM_BringToTop(hWin);
      if (pObj->Flags & FRAMEWIN_SF_MOVEABLE) {
        WM_SetCaptureMove(hWin, pState, FRAMEWIN__MinVisibility);
      }
    }
  }
}

/*********************************************************************
*
*       _Paint  (Frame)
*
*/
static void _Paint(FRAMEWIN_Obj* pObj) {
  WM_HWIN hWin = WM_GetActiveWindow();
  const char* pText = NULL;
  int xsize = WM_GetWindowSizeX(hWin);
  int ysize = WM_GetWindowSizeY(hWin);
  int BorderSize = pObj->Props.BorderSize;
  int y0, Index;
  POSITIONS Pos;
  GUI_RECT r, rText;

  /* Perform computations */
  FRAMEWIN__CalcPositions(pObj, &Pos);
  Index = (pObj->Flags & FRAMEWIN_SF_ACTIVE) ? 1 : 0;

  if (pObj->hText) {
    pText = (const char*) GUI_ALLOC_h2p(pObj->hText);
  }
  r.x0 = Pos.rClient.x0;
  r.x1 = Pos.rClient.x1;
  r.y0 = Pos.rTitleText.y0;
  r.y1 = Pos.rTitleText.y1;
  Pos.rTitleText.y0++;
  Pos.rTitleText.x0++;
  Pos.rTitleText.x1--;
  GUI_SetFont(pObj->Props.pFont);
  GUI__CalcTextRect(pText, &Pos.rTitleText, &rText, pObj->TextAlign);
  y0 = Pos.TitleHeight + BorderSize;

  /* Perform drawing operations */
  WM_ITERATE_START(NULL) {
    /* Draw Title */
    LCD_SetBkColor(pObj->Props.aBarColor[Index]);
    LCD_SetColor(pObj->Props.aTextColor[Index]);
    WIDGET__FillStringInRect(pText, &r, &Pos.rTitleText, &rText);
    /* Draw Frame */
    LCD_SetColor(FRAMEWIN_FRAMECOLOR_DEFAULT);
    GUI_FillRect(0, 0, xsize-1, BorderSize-1);
	  GUI_FillRect(0, 0, Pos.rClient.x0-1, ysize-1);
	  GUI_FillRect(Pos.rClient.x1+1, 0, xsize-1, ysize-1);
    GUI_FillRect(0, Pos.rClient.y1+1, xsize-1, ysize-1);
    GUI_FillRect(0, y0, xsize - 1, y0 + pObj->Props.IBorderSize - 1);
    /* Draw the 3D effect (if configured) */
    if (pObj->Props.BorderSize >= 2) {
      WIDGET_EFFECT_3D_DrawUp();  /* pObj->Widget.pEffect->pfDrawUp(); */
    }

  } WM_ITERATE_END();


}

/*********************************************************************
*
*       _OnChildHasFocus
*
* Function:
*   A child has received or lost the focus.
*   The basic idea is to make sure the framewindow is active if a
*   descendant has the focus.
*   If the focus travels from one desc. to an other, there is no need
*   to make the framewindow inactive and active again.
*   Avoiding this complicates the code a litlle, but avoids flicker
*   and waste of CPU load.
*   
*/
static void _OnChildHasFocus(FRAMEWIN_Handle hWin, FRAMEWIN_Obj* pObj, WM_MESSAGE *pMsg) {
  if (pMsg->Data.p) {
    const WM_NOTIFY_CHILD_HAS_FOCUS_INFO * pInfo = (const WM_NOTIFY_CHILD_HAS_FOCUS_INFO *)pMsg->Data.p;
    int IsDesc = WM__IsAncestorOrSelf(pInfo->hNew, hWin);
    if (IsDesc) {                         /* A child has received the focus, Framewindow needs to be activated */
      _SetActive(hWin, 1);
    } else {                  /* A child has lost the focus, we need to deactivate */
      _SetActive(hWin, 0);
      /* Remember the child which had the focus so we can reactive this child */
      if (WM__IsAncestor(pInfo->hOld, hWin)) {
        pObj->hFocussedChild = pInfo->hOld;
      }
    }
  }
}

/*********************************************************************
*
*       Framewin Callback
*/
static void _FRAMEWIN_Callback (WM_MESSAGE *pMsg) {
  FRAMEWIN_Handle hWin = (FRAMEWIN_Handle)(pMsg->hWin);
  FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hWin);
  GUI_RECT* pRect = (GUI_RECT*)(pMsg->Data.p);
  POSITIONS Pos;
  GUI_HOOK* pHook;
  /* Call hook functions */
  for (pHook = pObj->pFirstHook; pHook; pHook = pHook->pNext) {
    int r;
    r = (*pHook->pHookFunc)(pMsg);
    if (r) {
      return;   /* Message handled */
    }
  }
  switch (pMsg->MsgId) {
  case WM_HANDLE_DIALOG_STATUS:
    if (pMsg->Data.p) {                           /* set pointer to Dialog status */
      pObj->pDialogStatus = (WM_DIALOG_STATUS*)pMsg->Data.p;
    } else {                                      /* return pointer to Dialog status */
      pMsg->Data.p = pObj->pDialogStatus;      
    }
    return;
  case WM_PAINT:
    _Paint(pObj);
    break;
  case WM_TOUCH:
    _OnTouch(hWin, pObj, pMsg);
    return;                       /* Return here ... Message handled */
  case WM_GET_INSIDE_RECT:
    FRAMEWIN__CalcPositions(pObj, &Pos);
		*pRect = Pos.rClient;
    return;                       /* Return here ... Message handled */
  case WM_GET_CLIENT_WINDOW:      /* return handle to client window. For most windows, there is no seperate client window, so it is the same handle */
    pMsg->Data.v = (int)pObj->hClient;
    return;                       /* Return here ... Message handled */
  case WM_NOTIFY_PARENT:
    if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) {
      WM_MESSAGE Msg;
      Msg.hWinSrc = hWin;
      Msg.Data    = pMsg->Data;
      Msg.MsgId   = WM_NOTIFY_PARENT_REFLECTION;
      WM_SendMessage(pMsg->hWinSrc, &Msg);
    }
    return;
  case WM_SET_FOCUS:                 /* We have received or lost focus */
    if (pMsg->Data.v == 1) {
      if (WM_IsWindow(pObj->hFocussedChild)) {
        WM_SetFocus(pObj->hFocussedChild);
      } else {
        pObj->hFocussedChild = WM_SetFocusOnNextChild(pObj->hClient);
      }
      FRAMEWIN_SetActive(hWin, 1);
      pMsg->Data.v = 0;              /* Focus could be accepted */
    } else {
      FRAMEWIN_SetActive(hWin, 0);
    }
    return;
  case WM_TOUCH_CHILD:
    /* If a child of this framewindow has been touched and the frame window was not active,
       the framewindow will receive the focus.
     */
    if (!(pObj->Flags & FRAMEWIN_SF_ACTIVE)) {
      const WM_MESSAGE * pMsgOrg;
      const GUI_PID_STATE * pState;
      pMsgOrg = (const WM_MESSAGE*)pMsg->Data.p;      /* The original touch message */
      pState = (const GUI_PID_STATE*)pMsgOrg->Data.p;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91年精品国产| 一本色道综合亚洲| 五月天丁香久久| 亚洲国产日产av| 亚洲免费视频中文字幕| 一区二区三区在线观看动漫| 国产精品美女久久久久av爽李琼| 中文字幕成人在线观看| 国产精品女主播在线观看| 中文字幕国产一区二区| 综合久久久久久| 亚洲激情欧美激情| 亚洲国产精品自拍| 婷婷综合五月天| 国产曰批免费观看久久久| 国产一二精品视频| 99视频精品全部免费在线| 色综合久久中文字幕| 欧美日韩中文字幕精品| 欧美一区欧美二区| 国产午夜精品理论片a级大结局| 日本一区二区免费在线观看视频 | 欧美一区三区二区| 精品国产一区二区三区忘忧草| 久久香蕉国产线看观看99| 国产蜜臀97一区二区三区| 一区二区在线观看av| 五月天网站亚洲| 激情综合五月天| 精品国产人成亚洲区| 久久99热这里只有精品| 久久se精品一区精品二区| 日韩1区2区3区| 国产成人亚洲综合a∨婷婷| 91天堂素人约啪| 久久久久久久久久久久久久久99| 亚洲另类色综合网站| 毛片不卡一区二区| 91久久精品日日躁夜夜躁欧美| 制服丝袜中文字幕一区| 1区2区3区国产精品| 麻豆视频一区二区| 在线观看视频91| 国产精品区一区二区三区| 亚洲成a人片综合在线| 成人国产亚洲欧美成人综合网| 欧美精品 日韩| 亚洲欧美偷拍另类a∨色屁股| 看国产成人h片视频| 色欧美片视频在线观看| 国产亚洲一二三区| 蜜桃视频一区二区三区在线观看| 91天堂素人约啪| 国产欧美一区二区精品仙草咪| 天堂蜜桃一区二区三区| 91免费观看视频在线| 久久久精品中文字幕麻豆发布| 亚洲成av人片www| 91亚洲资源网| 国产精品区一区二区三| 国产高清精品在线| 精品99久久久久久| 国产最新精品免费| 日韩精品最新网址| 奇米777欧美一区二区| 在线观看欧美黄色| 亚洲欧洲精品天堂一级 | 色欧美88888久久久久久影院| 久久久精品国产免大香伊| 国模一区二区三区白浆| 欧美成人精精品一区二区频| 日韩不卡在线观看日韩不卡视频| 欧美三级乱人伦电影| 一区二区三区成人| 色8久久人人97超碰香蕉987| 中文字幕一区二区三区乱码在线| 国产成人在线视频网站| 久久久久久久久久久久久女国产乱 | 欧美大肚乱孕交hd孕妇| 奇米精品一区二区三区四区| 制服丝袜日韩国产| 久久机这里只有精品| 日韩一区二区三区观看| 美女在线观看视频一区二区| 91精品国产欧美一区二区成人 | 欧美在线制服丝袜| 午夜精品成人在线| 欧美mv日韩mv| 成人一区二区三区中文字幕| 国产精品视频免费| 在线亚洲+欧美+日本专区| 亚洲第一激情av| 日韩亚洲欧美综合| 国产成人aaaa| 日韩美女视频一区二区 | 2020国产精品久久精品美国| 国产成人自拍网| 一区二区在线观看视频在线观看| 欧美另类久久久品| 国产在线看一区| 国产精品国产精品国产专区不蜜| 日本韩国精品在线| 狂野欧美性猛交blacked| 国产欧美一区二区三区沐欲 | 极品少妇xxxx精品少妇| 国产精品久久久久毛片软件| 欧美日韩午夜在线| 成人午夜短视频| 亚洲高清不卡在线| 国产亚洲污的网站| 欧美日韩精品欧美日韩精品一| 国产精品一品二品| 亚洲永久精品大片| 国产精品视频免费| 欧美一区二区三区在线电影| 不卡电影一区二区三区| 麻豆成人免费电影| 亚洲女同女同女同女同女同69| 日韩欧美国产1| 精品成人私密视频| 欧美精品欧美精品系列| 成人影视亚洲图片在线| 蜜桃av一区二区三区电影| 自拍偷自拍亚洲精品播放| 日韩精品一区二区三区视频播放| 99re这里只有精品首页| 国产精品99久久久| 日韩av在线发布| 亚洲成人精品一区二区| 中文字幕一区二| 久久综合精品国产一区二区三区 | 国产综合久久久久影院| 一区二区在线免费观看| 中文久久乱码一区二区| 欧美电影免费观看完整版| 欧美精品自拍偷拍| 欧美日韩综合在线免费观看| 99精品热视频| 成人国产精品免费网站| 从欧美一区二区三区| 国产一区视频导航| 日本特黄久久久高潮| 亚洲国产精品久久不卡毛片| 亚洲欧洲精品一区二区三区| 久久天堂av综合合色蜜桃网| 精品久久久久99| 精品国精品国产尤物美女| 91精品久久久久久久99蜜桃| 一本色道久久加勒比精品| 99re这里只有精品首页| 91小视频免费看| 91丝袜美腿高跟国产极品老师| 成人激情开心网| 91丨porny丨最新| 色综合久久综合中文综合网| 91一区二区三区在线观看| 91浏览器入口在线观看| 色悠悠亚洲一区二区| 色乱码一区二区三区88| 91丝袜美腿高跟国产极品老师 | 国产精品三级电影| 国产精品剧情在线亚洲| 亚洲天堂2016| 亚洲123区在线观看| 日本va欧美va瓶| 国产成人精品一区二| 成人av电影免费在线播放| av爱爱亚洲一区| 欧美日韩精品一区二区三区| 制服丝袜在线91| 久久精品人人做人人爽97 | 在线观看日韩电影| 欧美美女黄视频| 亚洲精品一线二线三线无人区| 久久久久久久性| 亚洲在线观看免费| 激情成人午夜视频| 一道本成人在线| 91精品国产乱码| 中文字幕成人av| 亚洲一区免费在线观看| 极品瑜伽女神91| 亚洲人成网站影音先锋播放| 五月天一区二区| 欧美日韩成人激情| 亚洲国产精品久久久男人的天堂| 色综合久久天天综合网| 国产精品夫妻自拍| 国产成人精品一区二区三区网站观看 | 久久久另类综合| 免费高清不卡av| 正在播放一区二区| 亚洲国产va精品久久久不卡综合 | 亚洲精选一二三| 久久丁香综合五月国产三级网站| 92国产精品观看| 日本一区二区三区电影| 蜜桃视频一区二区三区在线观看| 色综合色狠狠综合色| 国产日韩av一区二区|