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

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

?? framewin.c

?? C語言和ucGUI實現(xiàn)的電子地圖功能,地圖的移動(方向鍵),縮放,查找
?? C
?? 第 1 頁 / 共 2 頁
字號:
      if (pState) {          /* Message may not have a valid pointer (moved out) ! */
        if (pState->Pressed) {
          WM_SetFocus(hWin);
        }
      }
    }
    break;
  case WM_NOTIFY_CHILD_HAS_FOCUS:
    _OnChildHasFocus(hWin, pObj, pMsg);
    break;
  case WM_DELETE:
    GUI_DEBUG_LOG("FRAMEWIN: _FRAMEWIN_Callback(WM_DELETE)\n");
    GUI_ALLOC_FreePtr(&pObj->hText);
    break;
  }
  /* Let widget handle the standard messages */
  if (WIDGET_HandleActive(hWin, pMsg) == 0) {
    return;
  }
  WM_DefaultProc(pMsg);
}

/*********************************************************************
*
*       Client Callback
*/
static void FRAMEWIN__cbClient(WM_MESSAGE* pMsg) {
  WM_HWIN hWin    = pMsg->hWin;
  WM_HWIN hParent = WM_GetParent(pMsg->hWin);
  FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hParent);
  WM_CALLBACK* cb = pObj->cb;
  switch (pMsg->MsgId) {
  case WM_PAINT:
    if (pObj->Props.ClientColor != GUI_INVALID_COLOR) {
      LCD_SetBkColor(pObj->Props.ClientColor);
      GUI_Clear();
    }
    /* Give the user callback  a chance to draw.
     * Note that we can not run into the bottom part, as this passes the parents handle
     */
    if (cb) {
	    WM_MESSAGE Msg;
      Msg      = *pMsg;
      Msg.hWin = hWin;
      (*cb)(&Msg);
    }
    return;
  case WM_SET_FOCUS:
    if (pMsg->Data.v) {     /* Focus received */
      if (pObj->hFocussedChild && (pObj->hFocussedChild != hWin)) {
        WM_SetFocus(pObj->hFocussedChild);
      } else {
        pObj->hFocussedChild = WM_SetFocusOnNextChild(hWin);
      }
      pMsg->Data.v = 0;     /* Focus change accepted */
    }
    return;
  case WM_GET_ACCEPT_FOCUS:
    WIDGET_HandleActive(hParent, pMsg);
    return;
  case WM_KEY:
    if (((const WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt > 0) {
      int Key = ((const WM_KEY_INFO*)(pMsg->Data.p))->Key;
      switch (Key) {
      case GUI_KEY_TAB:
        pObj->hFocussedChild = WM_SetFocusOnNextChild(hWin);
        return;
      }
    }
    break;	                       /* Send to parent by not doing anything */
  case WM_GET_BKCOLOR:
    pMsg->Data.Color = pObj->Props.ClientColor;
    return;                       /* Message handled */
  case WM_GET_INSIDE_RECT:        /* This should not be passed to parent ... (We do not want parents coordinates)*/
  case WM_GET_ID:                 /* This should not be passed to parent ... (Possible recursion problem)*/
  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 */
    WM_DefaultProc(pMsg);
    return;                       /* We are done ! */
  }
  /* Call user callback. Note that the user callback gets the handle of the Framewindow itself, NOT the Client. */
  if (cb) {
    pMsg->hWin = hParent;
    (*cb)(pMsg);
  } else {
    WM_DefaultProc(pMsg);
  }
}

/*********************************************************************
*
*        Exported module-internal routines:
*
**********************************************************************
*/
/*********************************************************************
*
*       FRAMEWIN__CalcTitleHeight
*/
int FRAMEWIN__CalcTitleHeight(FRAMEWIN_Obj* pObj) {
  int r = 0;
  if (pObj->Widget.State & FRAMEWIN_SF_TITLEVIS) {
    r = pObj->Props.TitleHeight;
    if (r == 0) {
      r = 2 + GUI_GetYSizeOfFont(pObj->Props.pFont);
    }
  }
  return r;
}

/*********************************************************************
*
*       FRAMEWIN__CalcPositions
*/
void FRAMEWIN__CalcPositions(FRAMEWIN_Obj* pObj, POSITIONS* pPos) {
  WM_HWIN hChild;
  WM_Obj* pChild;
  int TitleHeight;
  int MenuHeight = 0;
  int IBorderSize = 0;
  int BorderSize;
  int xsize, ysize;
  int x0, x1, y0;
  BorderSize = pObj->Props.BorderSize;
  xsize = WM__GetWindowSizeX(&pObj->Widget.Win);
  ysize = WM__GetWindowSizeY(&pObj->Widget.Win);
  if (pObj->Widget.State & FRAMEWIN_SF_TITLEVIS) {
    IBorderSize = pObj->Props.IBorderSize;
  }
  TitleHeight = FRAMEWIN__CalcTitleHeight(pObj);
  if (pObj->hMenu) {
    MenuHeight = WM_GetWindowSizeY(pObj->hMenu);
  }
  pPos->TitleHeight = TitleHeight;
  pPos->MenuHeight  = MenuHeight;
  /* Set object properties accordingly */
  pPos->rClient.x0  =         BorderSize;
  pPos->rClient.x1  = xsize - BorderSize - 1;
  pPos->rClient.y0  =         BorderSize + IBorderSize + TitleHeight + MenuHeight;
  pPos->rClient.y1  = ysize - BorderSize - 1;
  /* Calculate title rect */
  pPos->rTitleText.x0 =         BorderSize;
  pPos->rTitleText.x1 = xsize - BorderSize - 1;
  pPos->rTitleText.y0 =         BorderSize;
  pPos->rTitleText.y1 =         BorderSize + TitleHeight - 1;
  /* Iterate over all children */
  for (hChild = pObj->Widget.Win.hFirstChild; hChild; hChild = pChild->hNext) {
    pChild = WM_H2P(hChild);
    x0 = pChild->Rect.x0 - pObj->Widget.Win.Rect.x0;
    x1 = pChild->Rect.x1 - pObj->Widget.Win.Rect.x0;
    y0 = pChild->Rect.y0 - pObj->Widget.Win.Rect.y0;
    if (y0 == BorderSize) {
      if (pChild->Status & WM_SF_ANCHOR_RIGHT) {
        if (x0 <= pPos->rTitleText.x1) {
          pPos->rTitleText.x1 = x0 - 1;
        }
      } else {
        if (x1 >= pPos->rTitleText.x0) {
          pPos->rTitleText.x0 = x1 + 1;
        }
      }
    }
  }
}

/*********************************************************************
*
*       FRAMEWIN__UpdatePositions
*/
void FRAMEWIN__UpdatePositions(FRAMEWIN_Obj* pObj) {
  /* Move client window accordingly */
  if (pObj->hClient || pObj->hMenu) {
    POSITIONS Pos;
    FRAMEWIN__CalcPositions(pObj, &Pos);
    if (pObj->hClient) {
      WM_MoveChildTo(pObj->hClient, Pos.rClient.x0, Pos.rClient.y0);
      WM_SetSize(pObj->hClient, 
                 Pos.rClient.x1 - Pos.rClient.x0 + 1, 
                 Pos.rClient.y1 - Pos.rClient.y0 + 1);
    }
    if (pObj->hMenu) {
      WM_MoveChildTo(pObj->hMenu, Pos.rClient.x0, Pos.rClient.y0 - Pos.MenuHeight);
    }
  }
}

/*********************************************************************
*
*        Exported API routines:  Create
*
**********************************************************************
*/
/*********************************************************************
*
*       FRAMEWIN_CreateEx
*/
FRAMEWIN_Handle FRAMEWIN_CreateEx(int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
                                  int WinFlags, int ExFlags, int Id, const char* pTitle, WM_CALLBACK* cb)
{
  FRAMEWIN_Handle hObj;
  /* Create the window */
  WinFlags |= WM_CF_LATE_CLIP;    /* Always use late clipping since widget is optimized for it. */
  hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent, WinFlags, _FRAMEWIN_Callback,
                                sizeof(FRAMEWIN_Obj) - sizeof(WM_Obj));
  if (hObj) {
    FRAMEWIN_Obj* pObj;
    POSITIONS Pos;
    GUI_LOCK();
    pObj = FRAMEWIN_H2P(hObj);
    /* init widget specific variables */
    WIDGET__Init(&pObj->Widget, Id, WIDGET_STATE_FOCUSSABLE | FRAMEWIN_SF_TITLEVIS);
    /* init member variables */
    pObj->Props = FRAMEWIN__DefaultProps;
    pObj->TextAlign      = GUI_TA_LEFT;
    pObj->cb             = cb;
    pObj->Flags          = ExFlags;
    pObj->hFocussedChild = 0;
    pObj->hMenu          = 0;
    pObj->pFirstHook     = NULL;
    FRAMEWIN__CalcPositions(pObj, &Pos);
    pObj->hClient = WM_CreateWindowAsChild(Pos.rClient.x0,Pos.rClient.y0,
                                           Pos.rClient.x1 - Pos.rClient.x0 +1,
                                           Pos.rClient.y1 - Pos.rClient.y0 +1,
                                           hObj, 
                                           WM_CF_ANCHOR_RIGHT | WM_CF_ANCHOR_LEFT | WM_CF_ANCHOR_TOP | WM_CF_ANCHOR_BOTTOM | WM_CF_SHOW | WM_CF_LATE_CLIP, 
                                           FRAMEWIN__cbClient, 0);
    /* Normally we disable memory devices for the frame window:
     * The frame window does not flicker, and not using memory devices is usually faster.
     * You can still use memory by explicitly specifying the flag
     */
    if ((WinFlags & (WM_CF_MEMDEV | (WM_CF_MEMDEV_ON_REDRAW))) == 0) {
      WM_DisableMemdev(hObj);
    }
    FRAMEWIN_SetText(hObj, pTitle);
    GUI_UNLOCK();
  }
  return hObj;
}

/*********************************************************************
*
*        Exported routines:  Set Properties
*
**********************************************************************
*/
/*********************************************************************
*
*       FRAMEWIN_SetText
*/
void FRAMEWIN_SetText(FRAMEWIN_Handle hObj, const char* s) {
  if (hObj) {
    FRAMEWIN_Obj* pObj;
    GUI_LOCK();
    pObj = FRAMEWIN_H2P(hObj);
    if (GUI__SetText(&pObj->hText, s)) {
      FRAMEWIN_Invalidate(hObj);
    }
    GUI_UNLOCK();
  }
}

/*********************************************************************
*
*       FRAMEWIN_SetTextAlign
*/
void FRAMEWIN_SetTextAlign(FRAMEWIN_Handle hObj, int Align) {
  if (hObj) {
    FRAMEWIN_Obj* pObj;
    GUI_LOCK();
    pObj = FRAMEWIN_H2P(hObj);
    if (pObj->TextAlign != Align) {
      pObj->TextAlign = Align;
      FRAMEWIN_Invalidate(hObj);
    }
    GUI_UNLOCK();
  }
}

/*********************************************************************
*
*       FRAMEWIN_SetMoveable
*/
void FRAMEWIN_SetMoveable(FRAMEWIN_Handle hObj, int State) {
  if (hObj) {
    FRAMEWIN_Obj* pObj;
    GUI_LOCK();
    pObj = FRAMEWIN_H2P(hObj);
    if (State) {
      pObj->Flags |= FRAMEWIN_CF_MOVEABLE;
    } else {
      pObj->Flags &= ~FRAMEWIN_CF_MOVEABLE;
    }
    GUI_UNLOCK();
  }
}

/*********************************************************************
*
*       FRAMEWIN_SetActive
*/
void FRAMEWIN_SetActive(FRAMEWIN_Handle hObj, int State) {
  if (hObj) {
    WM_LOCK();
    _SetActive(hObj, State);
    WM_UNLOCK();
  }
}

#else
  void WIDGET_FrameWin(void) {} /* avoid empty object files */
#endif /* GUI_WINSUPPORT */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97精品视频在线观看自产线路二| 亚洲成人先锋电影| 欧美一区二区三区视频免费 | 国产欧美日韩亚州综合| 精品国产区一区| 久久夜色精品国产噜噜av | 色美美综合视频| 色综合天天综合网天天狠天天| 国产91在线看| av不卡在线观看| 在线观看三级视频欧美| 欧美一区二区三区免费视频| 欧美大片免费久久精品三p| 久久在线免费观看| 中文字幕在线不卡| 午夜视黄欧洲亚洲| 国产成人自拍网| 色哟哟国产精品| 91精品国产综合久久久久久久久久| 日韩欧美国产wwwww| 欧美激情一区二区三区| 亚洲一区在线观看免费观看电影高清| 午夜欧美电影在线观看| 国产福利不卡视频| 欧美综合天天夜夜久久| 欧美一区二区三区爱爱| 欧美国产日韩一二三区| 亚洲国产综合色| 国产精品一级二级三级| 91精彩视频在线观看| 日韩一区二区在线看| 国产精品色婷婷| 日本不卡一区二区| 成人手机电影网| 在线综合+亚洲+欧美中文字幕| 精品国产91洋老外米糕| 亚洲精品第一国产综合野| 日本欧美大码aⅴ在线播放| 成人性生交大合| 欧美巨大另类极品videosbest | 国产精品系列在线观看| 欧美三级三级三级| 国产精品美女视频| 激情亚洲综合在线| 欧美日韩一区不卡| 日韩一区有码在线| 国产一区福利在线| 欧美一区二区在线视频| 亚洲免费观看在线观看| 国产在线看一区| 欧美电影一区二区| 亚洲精品成人少妇| 99久久伊人久久99| 国产天堂亚洲国产碰碰| 免费一区二区视频| 欧美浪妇xxxx高跟鞋交| 亚洲另类一区二区| 91视频你懂的| 国产精品视频看| 夫妻av一区二区| 精品国产乱子伦一区| 日本不卡在线视频| 3d成人h动漫网站入口| 亚洲一区二区五区| 91高清在线观看| 亚洲男同1069视频| 91色porny在线视频| 欧美高清在线精品一区| 国产精品中文字幕日韩精品| 精品国产一区二区国模嫣然| 青青草国产成人99久久| 欧美人体做爰大胆视频| 亚洲电影你懂得| 欧美日韩色综合| 亚洲6080在线| 在线91免费看| 久久精品99国产精品日本| 欧美电影免费观看完整版| 狠狠色丁香婷婷综合久久片| 久久综合五月天婷婷伊人| 国产福利一区二区三区视频| 国产亚洲人成网站| 成人高清视频免费观看| 亚洲男人的天堂网| 欧美人与z0zoxxxx视频| 美女网站色91| 国产日韩影视精品| 91麻豆6部合集magnet| 亚洲最大成人综合| 555夜色666亚洲国产免| 日本vs亚洲vs韩国一区三区 | 日韩一区二区三区电影 | av在线一区二区三区| 国产三级一区二区| 色婷婷亚洲精品| 日韩国产精品久久| 中文字幕不卡三区| 日本韩国一区二区| 热久久一区二区| 国产目拍亚洲精品99久久精品| 色综合色综合色综合色综合色综合 | 日韩精品一区二区三区视频播放 | 日韩综合一区二区| 久久麻豆一区二区| 91福利精品第一导航| 激情五月婷婷综合| 亚洲欧美日韩国产另类专区| 日韩三级精品电影久久久| 粉嫩av亚洲一区二区图片| 亚洲成av人片一区二区梦乃| 久久嫩草精品久久久精品一| 色吧成人激情小说| 久久国产精品99精品国产| 亚洲精选视频在线| 精品国产三级a在线观看| 色又黄又爽网站www久久| 国产乱子轮精品视频| 亚洲国产精品嫩草影院| 国产精品的网站| 精品裸体舞一区二区三区| 欧美日韩一区中文字幕| 高清shemale亚洲人妖| 青青草伊人久久| 亚洲综合免费观看高清完整版| 国产日本欧美一区二区| 日韩欧美精品在线| 欧洲av在线精品| av中文字幕亚洲| 国产精品18久久久久久久网站| 日本三级亚洲精品| 亚洲不卡一区二区三区| 亚洲欧美偷拍卡通变态| 中文字幕一区二区三中文字幕| 欧美成人r级一区二区三区| 欧美日韩免费视频| 色琪琪一区二区三区亚洲区| 99久久婷婷国产综合精品电影| 国产福利精品一区| 国产一区二区三区蝌蚪| 蜜桃视频在线一区| 蜜臀久久久久久久| 日韩成人av影视| 视频在线观看国产精品| 亚洲v中文字幕| 石原莉奈一区二区三区在线观看| 亚洲精品久久久久久国产精华液| 国产精品进线69影院| 综合在线观看色| 亚洲欧洲另类国产综合| 亚洲人妖av一区二区| 亚洲丝袜精品丝袜在线| 亚洲丝袜精品丝袜在线| 亚洲曰韩产成在线| 性做久久久久久免费观看欧美| 亚洲香肠在线观看| 日日摸夜夜添夜夜添精品视频| 日日夜夜免费精品| 久久99精品久久久久久动态图| 国内精品不卡在线| 岛国精品在线观看| 91在线国内视频| 欧美亚洲禁片免费| 91精品国产综合久久小美女| 日韩三级免费观看| 久久日韩粉嫩一区二区三区| 国产片一区二区| 亚洲裸体xxx| 亚洲bdsm女犯bdsm网站| 久久疯狂做爰流白浆xx| 大胆亚洲人体视频| 91影院在线免费观看| 欧美喷潮久久久xxxxx| 精品国产乱码久久久久久牛牛 | 久草精品在线观看| 成人小视频在线观看| 在线中文字幕一区二区| 日韩视频123| 亚洲女子a中天字幕| 麻豆91精品视频| 99精品久久免费看蜜臀剧情介绍| 欧美美女视频在线观看| 久久综合色8888| 一区二区高清免费观看影视大全 | www.亚洲色图.com| 欧美嫩在线观看| 欧美国产日韩精品免费观看| 亚洲午夜激情av| 国产a久久麻豆| 欧美一区二区久久| 成人欧美一区二区三区白人| 蜜桃视频一区二区三区| 成人国产在线观看| 日韩欧美一区二区三区在线| 亚洲青青青在线视频| 久久成人av少妇免费| 色999日韩国产欧美一区二区| 久久婷婷一区二区三区| 日韩国产欧美在线视频| 91丨九色丨尤物| 亚洲国产成人私人影院tom|