STemWin Radial menu的实现方法和原理,motion support,sin cos求出每一个径向菜单中的每一个图标位置

一、实现思路:

1.首先我们想要的是滑动屏幕这个“手势”,然后图标就会跟着这个“手势”滑动的方向来运动(改变图标的位置)。
2.我们想要的是当图标滑到我们设定的位置左右时松开它能自动回正到我们设计好的正中位置(类似手机翻动到下一页并没有完全翻到时它能自动跳到下一页或退回到上一页对齐使其吸附到特定的位置,而不是处于中间或其它的任意位置),并且我们快速滑一下松开的时候会产生惯性移动的效果(第一点可以通过motion support的snapX snapY参数来实现,第二点可以通过其参数Period来实现或使用默认值)。
3.我们需要的是一个径向的菜单。如何算出每一个图标的位置呢?可由三角函数公式推算出来点我查看原理 y1 = r * Sin(θ) + y0 ; x1 = r * Sin(θ) + x0; 根据此公式就可以算出每个图标的位置,然后根据“手势”来更改θ值对应改变图标的位置。

二、实现过程:

所需要用到的关键元素:

1.motion support 运动功能支持,需要注意的是低版本的emWin是不支持的,这里用的是5.30。而且需要调用一次WM_MOTION_Enable(1);来使能运动功能。创建的时候 创建标记 WM_CF_MOTION_Y ,WM_CF_MOTION_Y 既可使能其X轴或Y轴的运动功能。也可调用WM_MOTION_SetMoveable(WM_HWIN hWin, U32 Flags, int OnOff)来使能或失能创建标记。
2.motion support 需要我们在程序中自定义处理,而不是用默认的处理方式否则就变成了对窗口的移动了。
3.制作图标,图标的来源可以由美工制作或者去相应的图标网站上下载。各种途径得到图片后需要图片最好是有alpha通道以便让图片的背景是透明的,如果下载的ICO的图片可以在安富莱的emwin教程里查看到如果转换ICO图片为位图点我查看怎么利用ps给图片加上alpha通道让图片背景透明最后用STemWin的位图转C小工具把其转为C文件便于调用。

三、开始实现

3.1实现步骤

一、WM_MOTION_Enable(1);开启motion support。
二、建一个窗口用来绘制图标,另一个窗口用来实现 motion support的相关操作。
三、编绘制图标的回调函数和motion support的回调函数,并由用户来处理motion support。
如果由管理器默认处理移动的就是窗口,如下图:
默认处理

3.2了解motion support,为实现做好准备

在实现此之前我们需要熟悉的是:WM_MOTION_Enable(1);开启了运动功能后,我们可以在回调中收到MsgId为WM_MOTION的消息,并且其消息中的Data.p里保存着WM_MOTION_INFO的结构体指针。这个结构体里的元素如下

DatatypeElement Description
intCmdDetails can be found in the section “Motion support” on page 383.
intdxDistance in X to be used to move the window.
intdyDistance in Y to be used to move the window.
intdaDistance in 1/10 dregrees to be used to move an item.
intxPosUsed to return the current position in X for custom moving operations.
intyPosUsed to return the current position in Y for custom moving operations.
intPeriodDuration of the moving operation after the PID has been released.
intSnapXRaster size in X for snapping operations, 0 if no snapping is required.
intSnapYRaster size in Y for snapping operations, 0 if no snapping is required.
intFinalMoveSet to 1 on the final moving operation.
U32FlagsTo be used to enable motion support.

这里讲清楚了每一个元素的含义和其作用。

WM_MOTION_INFO 结构体中的Cmd对应着当前操作的三种信息Cmd的三种可能的值如下:

FlagDescription
WM_MOTION_INITSent to a window to initiate a motion operation.
WM_MOTION_MOVESent to a window to achieve custom moving operations.
WM_MOTION_GETPOSSent to get the current position of custom moving operations.

以上图表,列举出了Cmd的值的可能性。
在创建窗口的时候也可以利用创建标志来来实现窗口的移动性,可用的标志如下:

FlagDescription
WM_CF_MOTION_REnables circular moveability for objects within the window.
WM_CF_MOTION_XEnables movability for the X axis.
WM_CF_MOTION_YEnables movability for the Y axis.

3.3建立两个窗口来处理绘制和处理motion support

3.3.1流程

首先需要对PAPA结构体中的一些数据初始化。
然后建立一个窗口,利用它的回调函数在窗口里绘制图标。
再建立一个窗口,利用其回调函数来自定义处理motion support产生图标的移动数据。

3.3.2 代码实现

 static ITEM_INFO  aItemInfo[GUI_COUNTOF(_aBitmapItem)]; //创建与图标数量所对应的ITEM_INFO来保存其坐标和索引
  static PARA       Para;
  WM_HWIN           hDraw;
  WM_HWIN           hMotion;
  PARA            * pPara;
  int               xSizeWindow;
  int               ySizeWindow;
  int               xSize;
  int               ySize;
  int               i;

  WM_SetCallback(WM_HBKWIN, _cbBk);
  xSize = LCD_GetXSize();
  ySize = LCD_GetYSize();
  //
  // Initialize parameter structure for items to be shown
  //
  pPara = &Para;
  pPara->NumItems    = GUI_COUNTOF(_aBitmapItem); //计算出图标的个数。
  pPara->pBitmapItem = _aBitmapItem;	 //指向图片数据数组,
  pPara->pItemInfo   = aItemInfo;				//指向每一个图标位置信息和索引号的数组
  pPara->Pos         = 0;
  //
  // Create radial menu window
  //
  hDraw              = WM_CreateWindowAsChild(20, 40, xSize - 40, ySize - 80, WM_HBKWIN,
   WM_CF_SHOW | WM_CF_HASTRANS, _cbDraw, sizeof(pPara));
  //
  // Create transparent window which receives the motion messages
  //
  xSizeWindow        = WM_GetWindowSizeX(hDraw);
  ySizeWindow        = WM_GetWindowSizeY(hDraw);
  hMotion            = WM_CreateWindowAsChild(0, ySizeWindow / 2, xSizeWindow, ySizeWindow / 2, WM_HBKWIN, 
  WM_CF_SHOW | WM_CF_MOTION_X | WM_CF_HASTRANS, _cbMotion, sizeof(pPara));

  //
  // Add pointer to parameter structure to windows
  //
  WM_SetUserData(hDraw,   &pPara, sizeof(pPara));
  WM_SetUserData(hMotion, &pPara, sizeof(pPara));
  //
  // Create checkbox
  //
  _CreateCheckbox(pPara);

3.3.3 代码说明

在上面的代码中需要注意的是我们把两个窗口都设置了WM_CF_HASTRANS透明,使其不遮盖桌面窗口。而且处理移动的窗口一定要在绘制窗口的上方,才能接受到操作信息。所以是先创建的绘制窗口再创建的处理移动的窗口。上面的代码也初始化了PAPA中的一部分数据,并创建了两个桌面子窗口且都给他们分配了额外的字节传入了用户数据(WM_SetUserData(hDraw, &pPara, sizeof(pPara)))。这里需要注意的是这个用户数据是一个结构体,其和其中的两个结构体成员如下代码:

typedef struct {
  const GUI_BITMAP * pBitmap; //图像数据
  const char       * pText;	//
  const char       * pExplanation; //说明 字符串
} BITMAP_ITEM;

typedef struct {
  int xPos;  
  int yPos; //X,Y坐标
  int Index; //索引
} ITEM_INFO;

typedef struct {
  int                 DoAnimation;
  int                 Pos;		//当前位置
  int                 NumItems;  //记录总共有多少个图标
  int                 xSizeItem,   ySizeItem; //图标的X,Y大小,每个图标的大小应当相同所以只记录一次
  int                 xSizeWindow, ySizeWindow;//窗口的x,y大小
  int                 rx,          ry;		//图标相对于圆心的半径
  int                 mx,          my;   //图标所围绕的中心
  int                 FinalMove;	 //记录“手势”移动,是否松开。
  const BITMAP_ITEM * pBitmapItem; //指向BITMAP_ITEM数组
  ITEM_INFO         * pItemInfo;	//指向ITEM_INFO数组
} PARA;

图标图片数据和其说明信息数组如下:

static const BITMAP_ITEM _aBitmapItem[] = {
  {&_bmBrowser, "Browser" , "Use the browser to explore the www"},
  {&_bmClock,   "Clock"   , "Adjust current time and date"},
  {&_bmDate,    "Date"    , "Use the diary"},
  {&_bmEmail,   "Email"   , "Read an email"},
  {&_bmSystem,  "System"  , "Change system settings"},
  {&_bmRead,    "Read"    , "Read a document"},
  {&_bmWrite,   "Write"   , "Write an email"},
  {&_bmPassword,"Password", "Determine the system password"},
  {&_bmwifi_48px,  "WIFI" , "Select WIFI"},
  {&_bmwechat_48px,  "Wechat" , "Wechat" },
  {&_bm_alipay_48px, "Alipay" , "Alipay" },
  { &_bmsingfun,	 "Singfun" , "Singfun" },
};

3.4创建窗口回调函数用于绘制图标

3.4.1绘制图标的整个流程

绘制图标所需要的一些信息:
绘制所需要的大部分信息都整合在 PARA结构体中,其中有
1.是需要做一个结构体来保存每一个图标的图片信息和其位置信息。
2.需要知道图标图片的大小以便用于绘制在位置的中心位置。
3.需要知道窗口的大小以便绘算出窗口的中心,和需要的半径x,y。
4.需要知道所有多少图标,便于计算位置的时候均匀分布。
5.需要知道 移动距离 是多少根据此来移动图标

3.4.2代码实现

static void _cbDraw(WM_MESSAGE * pMsg) {
  WM_HWIN     hWin;
  PARA      * pPara;
  int         i, a1000, Swap;
  I32         SinHQ;
  I32         CosHQ;
  I32         a;
  float		  aStep;
  ITEM_INFO   ItemInfo;

  hWin = pMsg->hWin;
  switch (pMsg->MsgId) {
  //case WM_MOTION:
	 // a = a;
	 // break;
  case WM_PAINT:
    WM_GetUserData(hWin, &pPara, sizeof(pPara));
    //
    // One time initialization of parameter structure
    //
    if (pPara->xSizeItem == 0) {
      pPara->xSizeWindow = WM_GetWindowSizeX(hWin);
      pPara->ySizeWindow = WM_GetWindowSizeY(hWin);
      pPara->xSizeItem   = pPara->pBitmapItem[0].pBitmap->XSize;
      pPara->ySizeItem   = pPara->pBitmapItem[0].pBitmap->YSize;
      pPara->rx          = ( pPara->xSizeWindow       - pPara->xSizeItem) / 2; 
      pPara->ry          = ((pPara->ySizeWindow - 30) - pPara->ySizeItem) / 2; //算出需要计算的半径要考虑不能绘制到窗口之外去了。
      pPara->mx          = pPara->xSizeWindow / 2;	
	  pPara->my			 = (pPara->ySizeWindow - 30) / 2; //窗口中心的位置,这里-30是为了留出显示文字说明的空间
	  pPara->FinalMove	 = 1;
    }
    //
    // Calculate current positions of items
    //
    a1000 = (pPara->Pos * 3600) / pPara->NumItems;// 每次移动一下就是100就是360° 再根据实际的图标个数来移动对应的角度
	aStep = (360000 / pPara->NumItems);
    for (i = 0; i < pPara->NumItems; i++) {
      a = 90000 + a1000 + i * aStep;//从90° 的地方开始每次根据图标个数均匀分配的值加上移动量来改变每一个图标的位置
      SinHQ = GUI__SinHQ(a);
      CosHQ = GUI__CosHQ(a);
      pPara->pItemInfo[i].Index = i; //此处的Index与每一个坐标对应也与每一个图标对应  
      pPara->pItemInfo[i].xPos  = pPara->mx - ((CosHQ * pPara->rx) >> 16); //(x1=r*cosA+x0)这里+0以零点先把位置算出来再以中点来移动
      pPara->pItemInfo[i].yPos  = pPara->my + ((SinHQ * pPara->ry) >> 16);//计算出每一个图片的当前位置(y1=r*sinA+y0);
    }//>>16和GUI__CosHQ这两个函数有关,可能是为了去除他的小数部分。
    //
    // Bubble sort items to be able to draw background items first
    //
      for (i = 0; i < (pPara->NumItems - 1); i++) { //pItemInfo数组下标的意义是把Y坐标的最大值排序到末尾
        if (pPara->pItemInfo[i].yPos > pPara->pItemInfo[i + 1].yPos) {
          ItemInfo                = pPara->pItemInfo[i];
          pPara->pItemInfo[i]     = pPara->pItemInfo[i + 1];
          pPara->pItemInfo[i + 1] = ItemInfo;
        }
      }
  //这里应当只需要排一次 因为我们只需要知道最大的Y值便可以知道当前选中了哪一个。
    //
    // Draw items
    //
    for (i = 0; i < pPara->NumItems; i++) {
      GUI_DrawBitmap((pPara->pBitmapItem + pPara->pItemInfo[i].Index)->pBitmap, pPara->pItemInfo[i].xPos - pPara->xSizeItem / 2, pPara->pItemInfo[i].yPos - pPara->ySizeItem / 2);
    }//显示图片且显示在x,y的中间位置
    //
    // Draw item text only after final move
    //
    if (pPara->FinalMove) {
      GUI_SetTextMode(GUI_TM_TRANS);
      GUI_SetFont(GUI_FONT_13_ASCII);
      GUI_SetColor(GUI_WHITE);
      GUI_DispStringHCenterAt((pPara->pBitmapItem + pPara->pItemInfo[pPara->NumItems - 1].Index)->pExplanation, pPara->xSizeWindow / 2, pPara->ySizeWindow - 15);
    }
    //
    // Draw frame surround the current item
    //
    GUI_SetColor(GUI_RED);
    GUI_DrawBitmap(&_bmRect_60x60, (pPara->xSizeWindow - _bmRect_60x60.XSize) / 2, pPara->my + pPara->ry - _bmRect_60x60.YSize / 2);
    break;
  }
}

3.4.3 代码说明

在上面的回调函数处理中可以看到,在收到WM_PAINT绘制指令后,如果没有计算过相应的数据就先计算出了PAPA结构体中的一部分数据,接下来的这两行代码比较容易理解

a1000 = (pPara->Pos * 3600) / pPara->NumItems;// 每次移动一下就是100就是360° 再根据实际的图标个数来移动对应的角度
	aStep = (360000 / pPara->NumItems);

第一行代码算出a1000的值,它算出当前这次计算时的初始角度(没有移动前第一次应当是0)。可以看到他的数值与Pos和NumItems有关,Pos保存的是操作屏幕的时候“手势”所移动的距离,在下面会讲到。NumItems在前面讲到过是图标元素的个数。
简单说明一下:GUI__SinHQ(a)所需传入的值是需要*1000的目的是为了获取更高的精度,Pos的值设置的是100像素的栅格自动吸附对齐的(在下面会有说明)所以这里可以看成是pPara->Pos *3.6 移动完一个100的距离刚好是360°,如果有多个元素再/pPara->NumItems,每一次的移动就对应着一个图标的完整移动。

第二行代码本次图标与上一次个图标所相差的角度。

接下来的代码就容易理解了。

a = 90000 + a1000 + i * aStep;

每个图标的角度等于初始角度+90°的自定义角度+本次图标的偏移角度。这里自定义90°是为了让第一个图标从窗口的最下方的中间开始显示。
还需要注意的就是手势移动的时候 往左移得到的值是-往右移得到的数值是 + 。但当角度增大的时候我们算出来的坐标是顺时针移动而减小的时候是逆时针移动,这与我们的操作习惯相反。

pPara->pItemInfo[i].xPos  = pPara->mx - ((CosHQ * pPara->rx) >> 16); 
pPara->pItemInfo[i].yPos  = pPara->my + ((SinHQ * pPara->ry) >> 16);

于是这里对X轴计算出来后对他反相就可以使之与我们的习惯匹配。
接下来我们找出Y值的最大值,意义是找出哪一个在原点位置,当我们移动图标的时候就可以知道是哪一个在原点位置表示我们所选定的图标。
然后再把每一个图标根据上面算出来的位置给绘制到窗口上,如果“手势移动”已结束了那么就显示出来对应图标的说明文字最后绘制一个选定框的图像到初始位置,以便清晰的看懂是哪个图标被选中了。
以上便是整个绘制过程了。

3.5创建窗口回调函数用于处理手势操作

3.5.1WM_MOTION事件和相应结构体成员及所需要处理的内容详细说明

处理WM_MOTION事件 pInfo = (WM_MOTION_INFO *)pMsg->Data.p; 把Data.p强转为WM_MOTION_INFO类型的结构体,再根据其Cmd成员,来处理WM_MOTION_INIT,WM_MOTION_MOVE,WM_MOTION_GETPOS这几种命令。
1.WM_MOTION_INIT:
If a PID move has been detected by the WM it first checks if there is any visible window available under the PID position which is already ’moveable’. This makes it possible to achieve moving operations for windows which are partially or totally covered
by child windows. If the WM does not find an already moveable window it sends the
command to the ’top window’ of the PID position.
如果PID移动被窗口管理器(WM)所检测到,首先它会检测在PID位置下是否有可见有用的并且已经是可移动的窗口。这使得实现部分或全部被子窗口覆盖的移动操作成功可能。如果窗口管理器没有找到一个“已可移动”的窗口它就会把命令发送到PID位置的顶层窗口。

If the window is not already ’moveable’ when receiving this command the element
Flags of the WM_MOTION_INFO structure can be used to enable motion support. The
creation flags explained earlier can be used here to achieve automatic motion support. The Flags element simply needs to be OR-combined with the desired flag(s)
如果窗口还没有“已可移动”,当收到这个命令时WM_MOTION_INFO结构体的Flags成员可以被用来使能motion support。早些时候对创建标志的解释可以被用在这里实现自动运动支持。结构体中的Flags 成员可以根据你所期望的标志简单的“或”在一起。
2.WM_MOTION_INIT and custom motion support:
Custom motion support means that the moving operations are not done automatically by the WM but by the callback routine of the window. This can be useful if for
example radial motions are required. To achieve custom motion support the Flags
element needs to be OR-combined with the flag WM_MOTION_MANAGE_BY_WINDOW.

自定义的运动支持意味着 移动操作不是由窗口管理器自动的完成,而是由窗口的回调程序,举个例子:如果需要径向移动,这将是非常有用的。实现自定义运动功能需要让Flags成员“或”上WM_MOTION_MANAGE_BY_WINDOW标志。
3.WM_MOTION_MOVE:
Sent to a window with custom motion support enabled. The elements dx and dy of
the WM_MOTION_INFO structure can be used to achieve the custom moving operation.

此命令发送到启动了自定义运动支持的窗口中。结构体WM_MOTION_INFO成员dx和dy可以被用来实现自定义移动操作。
4.WM_MOTION_GETPOS:
Sent to a window with custom motion support enabled. The task of the callback routine here is returning the current position. This needs to be done with the elements
xPos and yPos of the WM_MOTION_INFO structure.
此命令发送到启动了自定义运动支持的窗口中,回调函数在这里的任务就是返回当前的位置,结构体WM_MOTION_INFO成员xPos and yPos需要在这里被处理完成。

5.Snapping:
The elements SnapX and SnapY of the WM_MOTION_INFO structure can be used to
achieve snapping. These values determine a kind of grid for snapping. This means
that the deceleration of the movement operation will stop exactly on a grid position.
Also if there currently is no movement and the window is only released it will snap
into the next grid position.

结构体WM_MOTION_INFO成员 SnapX and SnapY可以被用来实现捕获。这些值用来确定捕获栅格,这意味着移动操作的减速将恰好停留在一个栅格的位置。并且如果当前没有移动并且窗口仅被释放它将会捕捉到下一个栅格位置。(用力一滑松开,它会像惯性一样跑一段距离并减速下来)

3.5.2 代码实现

static void _cbMotion(WM_MESSAGE * pMsg) {
  WM_MOTION_INFO * pInfo;
  WM_HWIN          hWin;
  PARA           * pPara;
  GUI_RECT rec;
  hWin = pMsg->hWin;
  switch (pMsg->MsgId) {
  case WM_MOTION:
    WM_GetUserData(hWin, &pPara, sizeof(pPara));
    pInfo = (WM_MOTION_INFO *)pMsg->Data.p;
    switch (pInfo->Cmd) {
    case WM_MOTION_INIT:
      pInfo->Flags = WM_CF_MOTION_X | WM_MOTION_MANAGE_BY_WINDOW; //
      pInfo->SnapX = 100;//100的栅格
      break;
    case WM_MOTION_MOVE:
      pPara->FinalMove = pInfo->FinalMove;
      pPara->Pos += pInfo->dx;
	  
      if (pPara->Pos > pPara->NumItems * 100) {//正转或反转超过了就从原点开始
        pPara->Pos -= pPara->NumItems * 100;
      }
      if (pPara->Pos < 0) {
        pPara->Pos += pPara->NumItems * 100;
      }
      WM_Invalidate(WM_GetParent(hWin));
      break;
    case WM_MOTION_GETPOS:
      pInfo->xPos = pPara->Pos;  //每次最终的xPos都需要回送给系统做处理
      break;
    }
    break;
  }
}

3.5.3代码说明

在上面的代码中,首先取出了自定义的用户数据然后把Data.p强转为WM_MOTION_INFO类型的结构体再处理Cmd的消息。
在WM_MOTION_INIT 中我们设置了X轴的运动功能,并且设置了运动功能由用户程序自定义管理,并且设置了100的栅格。移动将会被自动吸附到栅格中。
在WM_MOTION_MOVE 所得到的信息主要就是移动量和是否完成移动的消息。
把这个移动量赋值给自定义PAPA结构体的成员Pos.前面讲过会把这个位置经过计算转换成相应的角度信息,使得这里移动一个栅格图标的位置刚好也移动到一个图标的位置,利用栅格的自动捕捉的特性使图标的位置也具有捕捉的效果。
把是否移动完成赋值给用户参数中的pPara->FinalMove以便在绘制的时候收到移动完成的消息后显示图标的说明。
把得到的位置值进行确认是否超过了最大值或最小值,并做出处理。
最后我们再使桌面窗口无效化使其重绘,这里应当直接重绘绘制图标的窗口。
在WM_MOTION_GETPOS中我们按照要求把最xPos的值交由管理器处理。

四、结语

参考文档主要就是emwin的使用手册,然后就是安富莱和正点原子的emwin开发手册。还有一些小技巧小工具都放在文章的链接中了。
文中的翻译可能不太精确,详细的内容请参照emwin手册。
本文的源代码在官方的仿真文件里WM_RadialMenu.c中可以找到完整的代码。
效果如图:
自定义处理

emWin 图形库 图形用户界面 版本 5.12 手册修订版 0 emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co. KG 9 1 emWin 简介....................................................................................................................23 1.1 本文档的目的 ............................................................................................24 1.2 假定 .......................................................................................................24 1.3 如何使用本手册 .........................................................................................24 1.4 语法句子的印刷规范 ....................................................................................24 1.5 要求 .......................................................................................................25 1.5.1 目标系统 (硬件).......................................................................................25 1.5.2 开发环境 (编译器)....................................................................................25 1.6 特性 .......................................................................................................26 1.7 示例和演示 ...............................................................................................27 1.8 初学者套装 ...............................................................................................27 1.9 屏幕和坐标 ...............................................................................................27 1.10 如何将显示器连接到微控制器 .........................................................................28 1.11 数据类型..................................................................................................29 2 入门指南.........................................................................................................................31 2.1 推荐目录结构 ............................................................................................32 2.1.1 子目录 ....................................................................................................32 2.1.2 包含目录..................................................................................................32 2.2 添加 emWin 到目标程序...............................................................................32 2.3 创建库 ....................................................................................................33 2.3.1 改编库批处理文件以适应不同系统 ...................................................................33 2.4 要包含在项目的 C 文件..............................................................................35 2.5 emWin 的配置 ..........................................................................................35 2.6 初始化 emWin ..........................................................................................36 2.7 有目标硬件时使用 emWin ............................................................................37 2.8 “Hello world”示例程序 .............................................................................37 3 模拟................................................................................................................................39 3.1 使用模拟..................................................................................................40 3.1.1 通过 emWin 试用版使用模拟 .........................................................................40 3.1.1.1 目录结构..................................................................................................40 3.1.1.2 Visual C++ 工作空间 .................................................................................40 3.1.1.3 编译演示程序 ............................................................................................41 3.1.1.4 编译示例..................................................................................................41 3.1.2 通过 emWin 源代码使用模拟 .........................................................................42 3.1.2.1 目录结构..................................................................................................42 3.1.2.2 Visual C++ 工作空间 .................................................................................42 3.1.2.3 编译应用程序 ............................................................................................43 3.1.3 模拟的高级功能 .........................................................................................43 3.1.3.1 暂停和恢复 ...............................................................................................43 3.1.3.2 查看系统信息 ............................................................................................43 3.1.3.3 复制到剪贴板 ............................................................................................43 3.2 设备模拟..................................................................................................44 3.2.1 生成的框架视图 .........................................................................................45 3.2.2 自定义位图视图 .........................................................................................45 3.2.3 窗口视图..................................................................................................46 3.3 设备模拟 API ............................................................................................47 3.4 硬键模拟..................................................................................................52 3.4.1 硬键模拟 API ............................................................................................5310 emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co. KG 3.5 集成 emWin 模拟到现有模拟...................................................................... 56 3.5.1 目录结构 ................................................................................................. 56 3.5.2 使用模拟库 .............................................................................................. 56 3.5.2.1 修改 WinMain .......................................................................................... 56 3.5.2.2 应用程序示例............................................................................................ 57 3.5.3 集成到 embOS 模拟 ................................................................................ 58 3.5.3.1 WinMain................................................................................................. 58 3.5.3.2 目标程序 (main) ....................................................................................... 59 3.5.4 GUI 模拟 API ........................................................................................... 60 4 查看器 ............................................................................................................................63 4.1 使用查看器 .............................................................................................. 64 4.1.1 使用模拟和查看器 ...................................................................................... 64 4.1.2 使用带虚拟页面的查看器 .............................................................................. 65 4.1.3 总在顶部显示............................................................................................ 65 4.1.4 打开显示输出的更多窗口 .............................................................................. 65 4.1.5 缩放....................................................................................................... 66 4.1.6 将输出复制到剪贴板 ................................................................................... 66 4.1.7 使用带多种显示的查看器 .............................................................................. 67 4.1.8 使用带多种显示的查看器 .............................................................................. 67 5 显示文本.........................................................................................................................69 5.1 基本例程 ................................................................................................. 70 5.2 文本 API ................................................................................................. 71 5.3 显示文本的例程 ......................................................................................... 72 5.4 选择文本绘制模式 ...................................................................................... 79 5.5 选择文本对齐模式 ...................................................................................... 81 5.6 设置当前文本位置 ...................................................................................... 83 5.7 返回当前文本位置 ...................................................................................... 84 5.8 清除窗口或部分窗口的例程 ........................................................................... 84 6 显示数值.........................................................................................................................85 6.1 评估 API ................................................................................................. 86 6.2 显示十进制数值 ......................................................................................... 87 6.3 显示浮点数值............................................................................................ 91 6.4 显示二进制数值 ......................................................................................... 94 6.5 显示十六进制数值 ...................................................................................... 95 6.6 emWin 版 ............................................................................................... 96 7 2-D 图形库......................................................................................................................97 7.1 图形 API ................................................................................................. 98 7.2 绘制模式 ................................................................................................100 7.3 查询当前客户区矩形 ..................................................................................102 7.4 画笔大小 ................................................................................................102 7.5 基本绘制例程...........................................................................................103 7.6 Alpha 混合 .............................................................................................110 7.7 绘制位图 ................................................................................................113 7.8 绘制流位图 .............................................................................................116 7.9 绘制线条 ................................................................................................122 7.10 绘制多边形 .............................................................................................126 7.11 绘制圆 ...................................................................................................131 7.12 绘制椭圆 ................................................................................................133 7.13 绘制弧线 ................................................................................................135 7.14 绘制线图 ................................................................................................137 7.15 绘制饼图 ................................................................................................138 7.16 保存和恢复 GUI 环境 .................................................................................139 7.17 裁剪......................................................................................................140 8 显示位图文件 ...............................................................................................................141emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co. KG 11 8.1 BMP 文件支持 ......................................................................................... 142 8.1.1 支持的格式 ............................................................................................. 142 8.1.2 BMP 文件 API ......................................................................................... 142 8.2 JPEG 文件支持 ........................................................................................ 148 8.2.1 支持的 JPEG 压缩方法 ............................................................................... 148 8.2.2 将 JPEG 文件转换为 C 源 ............................................................................ 148 8.2.3 显示 JPEG 文件........................................................................................ 148 8.2.4 存储器使用 ............................................................................................. 149 8.2.5 渐进式 JPEG 文件..................................................................................... 149 8.2.6 JPEG 文件 API ........................................................................................ 149 8.3 GIF 文件支持 .......................................................................................... 154 8.3.1 将 GIF 文件转换为 C 源.............................................................................. 154 8.3.2 显示 GIF 文件 ......................................................................................... 154 8.3.3 存储器使用 ............................................................................................. 154 8.3.4 GIF 文件 API .......................................................................................... 155 8.4 PNG 文件支持 ......................................................................................... 163 8.4.1 将 PNG 文件转换为 C 源 ............................................................................. 163 8.4.2 显示 PNG 文件 ........................................................................................ 163 8.4.3 存储器使用 ............................................................................................. 163 8.4.4 PNG 文件 API ......................................................................................... 163 8.5 使用 ...Ex() 函数获取数据 .......................................................................... 167 9 字体..............................................................................................................................169 9.1 简介 ..................................................................................................... 170 9.2 字体类型................................................................................................ 170 9.3 字体格式................................................................................................ 172 9.3.1 C 文件格式 ............................................................................................. 172 9.3.2 系统独立字体 (SIF) 格式 ............................................................................ 172 9.3.3 外部位图字体 (XBF) 格式 ........................................................................... 173 9.3.4 TrueType 字体 (TTF) 格式 ......................................................................... 174 9.4 将 TTF 文件转换为 C 源.............................................................................. 174 9.5 声明自定义字体 ....................................................................................... 175 9.6 选择字体................................................................................................ 175 9.7 字体 API................................................................................................ 176 9.8 C 文件相关的字体函数 ............................................................................... 177 9.9 “SIF”文件相关的字体函数 ........................................................................ 178 9.10 “TTF”文件相关的字体函数 ........................................................................ 179 9.11 “XBF”文件相关的字体函数........................................................................ 183 9.12 常见字体相关的函数 .................................................................................. 184 9.13 字符集 .................................................................................................. 188 9.13.1 ASCII................................................................................................... 188 9.13.2 ISO 8859-1 西方拉丁字符集....................................................................... 189 9.13.3 Unicode................................................................................................ 190 9.14 字体转换器 ............................................................................................. 191 9.14.1 添加字体................................................................................................ 191 9.15 标准字体................................................................................................ 192 9.15.1 字体标识符命名约定 .................................................................................. 192 9.15.2 字体文件命名约定..................................................................................... 193 9.15.3 字体的计量、 ROM 大小和字符集 .................................................................. 193 9.15.4 比例字体................................................................................................ 194 9.15.4.1 概述 ..................................................................................................... 194 9.15.4.2 计量、 ROM 大小和使用的文件..................................................................... 194 9.15.4.3 字符 ..................................................................................................... 196 9.15.5 比例字体,带边框..................................................................................... 202 9.15.5.1 概述 ..................................................................................................... 202 9.15.5.2 计量、 ROM 大小和使用的文件..................................................................... 202 9.15.5.3 字符 ..................................................................................................... 202 9.15.6 等宽字体................................................................................................ 203 9.15.6.1 概述 ..................................................................................................... 203 9.15.6.2 计量、 ROM 大小和使用的文件..................................................................... 204 9.15.6.3 字符 ..................................................................................................... 20512 emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co. KG 9.15.7 数字字体 (比例).....................................................................................209 9.15.7.1 概述......................................................................................................209 9.15.7.2 计量、 ROM 大小和使用的文件 .....................................................................209 9.15.7.3 字符......................................................................................................209 9.15.8 数字字体 (等宽).....................................................................................210 9.15.8.1 概述......................................................................................................210 9.15.8.2 计量、 ROM 大小和使用的文件 .....................................................................211 9.15.8.3 字符......................................................................................................211 10 位图转换器.................................................................................................................213 10.1 功能......................................................................................................214 10.2 加载位图 ................................................................................................214 10.2.1 支持的输入文件格式 ..................................................................................214 10.2.2 从文件加载 .............................................................................................214 10.2.3 使用剪贴板 .............................................................................................215 10.3 从位图生成 C 文件.....................................................................................215 10.3.1 支持的位图格式 ........................................................................................215 10.3.2 调色板信息 .............................................................................................215 10.3.3 透明性 ...................................................................................................216 10.3.4 Alpha 混合 .............................................................................................216 10.3.5 选择最佳格式...........................................................................................217 10.3.6 保存文件 ................................................................................................218 10.4 色彩转换 ................................................................................................219 10.5 生成 C 流文件 ..........................................................................................220 10.6 压缩位图 ................................................................................................220 10.7 使用定制调色板 ........................................................................................221 10.7.1 保存调色板文件 ........................................................................................221 10.7.2 C 文件格式..............................................................................................221 10.7.3 固定调色板模式的调色板文件 .......................................................................221 10.7.4 转换位图 ................................................................................................222 10.8 命令行用法 .............................................................................................222 10.8.1 命令的格式 .............................................................................................222 10.8.2 有效的命令行选项 .....................................................................................222 10.9 转换位图示例...........................................................................................224 11 颜色............................................................................................................................227 11.1 预定义的颜色...........................................................................................228 11.2 颜色条测试例程 ........................................................................................228 11.3 固定调色板模式 ........................................................................................229 11.4 固定调色板模式的详细说明 ..........................................................................230 11.5 应用程序定义的色彩转换 .............................................................................240 11.6 定制调色板模式 ........................................................................................241 11.7 颜色 API ................................................................................................241 11.8 基本颜色函数...........................................................................................242 11.9 索引和色彩转换 ........................................................................................244 12 存储设备.....................................................................................................................247 12.1 使用存储设备:图示 ..................................................................................248 12.2 支持的色彩深度 (bpp)................................................................................248 12.3 存储设备和窗口管理器................................................................................249 12.4 存储设备和多层 ........................................................................................249 12.5 内存要求 ................................................................................................249 12.6 性能......................................................................................................250 12.7 基本函数 ................................................................................................251 12.8 使用存储设备的准备操作 ... .........................................................................251 12.9 多层 / 多显示配置 .....................................................................................251 12.10 配置选项 ................................................................................................251 12.10.1 GUI_USE_MEMDEV_1BPP_FOR_SCREEN....................................................251 12.11 存储设备 API...........................................................................................251 12.12 基本函数 ................................................................................................253emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co. KG 13 12.13 分段存储设备 .......................................................................................... 266 12.14 自动设备对象 .......................................................................................... 267 12.15 测量设备对象 .......................................................................................... 269 12.16 动画函数................................................................................................ 271 12.17 动画函数 (需要使用窗口管理器)................................................................. 272 13 执行模型:单任务 / 多任务.........................................................................................277 13.1 支持的执行模型 ....................................................................................... 278 13.2 单任务系统 (超循环)............................................................................... 278 13.2.1 描述 ..................................................................................................... 278 13.2.2 超循环示例 (无 emWin).......................................................................... 278 13.2.3 优势 ..................................................................................................... 278 13.2.4 缺点 ..................................................................................................... 278 13.2.5 使用 emWin ........................................................................................... 278 13.2.6 超循环示例 (有 emWin).......................................................................... 279 13.3 多任务系统:一个任务调用 emWin ............................................................... 279 13.3.1 描述 ..................................................................................................... 279 13.3.2 优势 ..................................................................................................... 279 13.3.3 缺点 ..................................................................................................... 279 13.3.4 使用 emWin ........................................................................................... 279 13.4 多任务系统:多个任务调用 emWin ............................................................... 280 13.4.1 描述 ..................................................................................................... 280 13.4.2 优势 ..................................................................................................... 280 13.4.3 缺点 ..................................................................................................... 280 13.4.4 使用 emWin ........................................................................................... 280 13.4.5 建议 ..................................................................................................... 280 13.4.6 示例 ..................................................................................................... 280 13.5 支持多任务的 GUI 配置函数 ........................................................................ 281 13.6 支持多任务的 GUI 配置宏 ........................................................................... 283 13.7 内核接口 API .......................................................................................... 284 13.7.1 示例 ..................................................................................................... 287 14 窗口管理器 (WM) .......................................................................................................289 14.1 术语说明................................................................................................ 290 14.2 回调机制,无效化和渲染 ............................................................................ 291 14.2.1 不使用回调渲染 ....................................................................................... 291 14.2.2 使用回调渲染 .......................................................................................... 292 14.2.3 背景窗口重绘和回调 .................................................................................. 292 14.2.4 无效化 .................................................................................................. 293 14.2.5 渲染透明窗口 .......................................................................................... 293 14.2.6 自动使用存储设备..................................................................................... 293 14.2.7 自动使用多帧缓冲..................................................................................... 294 14.2.8 自动使用显示驱动缓存 ............................................................................... 294 14.3 消息 ..................................................................................................... 295 14.3.1 消息结构................................................................................................ 295 14.3.2 消息清单................................................................................................ 295 14.3.3 系统定义的消息 ....................................................................................... 296 14.3.4 指针输入设备 (PID) 消息............................................................................ 300 14.3.5 系统定义的通知代码 .................................................................................. 303 14.3.6 应用定义的消息 ....................................................................................... 303 14.4 配置选项................................................................................................ 304 14.5 WM API ................................................................................................ 305 14.5.1 使用 WM API 函数.................................................................................... 307 14.6 基本函数................................................................................................ 307 14.7 存储设备支持 (可选)............................................................................... 336 14.8 定时器相关函数 ....................................................................................... 336 14.9 小工具相关函数 ....................................................................................... 339 14.10 示例 ..................................................................................................... 342 15 窗口对象 (小工具)...................................................................................................34514 emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co. KG 15.1 基础知识 ................................................................................................346 15.1.1 可用小工具 .............................................................................................346 15.1.2 了解重绘机制...........................................................................................347 15.1.3 如何使用小工具 ........................................................................................347 15.2 配置选项 ................................................................................................349 15.3 通用小工具 API ........................................................................................350 15.3.1 用于小工具的 WM 例程...............................................................................350 15.3.2 常用例程 ................................................................................................350 15.3.3 用户绘制小工具 ........................................................................................354 15.4 BUTTON:按钮小工具 ...............................................................................356 15.4.1 配置选项 ................................................................................................356 15.4.2 通知代码 ................................................................................................357 15.4.3 键盘反应 ................................................................................................357 15.4.4 BUTTON API ..........................................................................................357 15.4.5 示例......................................................................................................370 15.5 CHECKBOX:复选框小工具.........................................................................371 15.5.1 配置选项 ................................................................................................372 15.5.2 通知代码 ................................................................................................372 15.5.3 键盘反应 ................................................................................................372 15.5.4 CHECKBOX API ......................................................................................372 15.5.5 示例......................................................................................................386 15.6 DROPDOWN:下拉列表小工具 ....................................................................387 15.6.1 配置选项 ................................................................................................388 15.6.2 通知代码 ................................................................................................388 15.6.3 键盘反应 ................................................................................................388 15.6.4 DROPDOWN API.....................................................................................388 15.6.5 示例......................................................................................................400 15.7 EDIT:“编辑”小工具 ...............................................................................402 15.7.1 配置选项 ................................................................................................402 15.7.2 通知代码 ................................................................................................402 15.7.3 键盘反应 ................................................................................................403 15.7.4 EDIT API...............................................................................................403 15.7.5 示例......................................................................................................418 15.8 FRAMEWIN:框架窗口小工具......................................................................419 15.8.1 框架窗口的结构 ........................................................................................420 15.8.2 配置选项 ................................................................................................421 15.8.3 键盘反应 ................................................................................................421 15.8.4 FRAMEWIN API ......................................................................................421 15.8.5 示例......................................................................................................442 15.9 GRAPH:图形小工具 .................................................................................443 15.9.1 图形小工具的结构 .....................................................................................443 15.9.2 创建和删除图形小工具................................................................................444 15.9.3 绘制过程 ................................................................................................444 15.9.4 支持的曲线类型 ........................................................................................444 15.9.4.1 GRAPH_DATA_XY ...................................................................................445 15.9.4.2 GRAPH_DATA_YT ...................................................................................445 15.9.5 配置选项 ................................................................................................445 15.9.5.1 图形小工具 .............................................................................................445 15.9.5.2 刻度对象 ................................................................................................445 15.9.6 键盘反应 ................................................................................................445 15.9.7 图形 API ................................................................................................445 15.9.7.1 常用例程 ................................................................................................447 15.9.7.2 GRAPH_DATA_YT 相关的例程.....................................................................455 15.9.7.3 GRAPH_DATA_XY 相关的例程.....................................................................459 15.9.7.4 刻度相关的例程 ........................................................................................463 15.9.8 示例......................................................................................................467 15.10 HEADER:标题小工具 ...............................................................................469 15.10.1 配置选项 ................................................................................................470 15.10.2 通知代码 ................................................................................................470 15.10.3 键盘反应 ................................................................................................470 15.10.4 HEADER API ..........................................................................................470emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co. KG 15 15.10.5 示例 ..................................................................................................... 482 15.11 ICONVIEW:图标视图小工具 ...................................................................... 483 15.11.1 配置选项................................................................................................ 483 15.11.2 通知代码................................................................................................ 484 15.11.3 键盘反应................................................................................................ 484 15.11.4 ICONVIEW API ...................................................................................... 484 15.11.5 示例 ..................................................................................................... 494 15.12 LISTBOX:列表框小工具 ........................................................................... 496 15.12.1 配置选项................................................................................................ 496 15.12.2 通知代码................................................................................................ 496 15.12.3 键盘反应................................................................................................ 496 15.12.4 LISTBOX API......................................................................................... 497 15.12.5 示例 ..................................................................................................... 513 15.13 LISTVIEW:Listview 小工具 ...................................................................... 514 15.13.1 配置选项................................................................................................ 515 15.13.2 通知代码................................................................................................ 515 15.13.3 键盘反应................................................................................................ 515 15.13.4 LISTVIEW API ....................................................................................... 516 15.13.5 示例 ..................................................................................................... 537 15.14 LISTWHEEL:Listwheel 小工具 .................................................................. 539 15.14.1 配置选项................................................................................................ 539 15.14.2 通知代码................................................................................................ 539 15.14.3 键盘反应................................................................................................ 539 15.14.4 LISTWHEEL API ..................................................................................... 540 15.15 MENU菜单小工具 .................................................................................. 553 15.15.1 菜单消息................................................................................................ 554 15.15.2 数据结构................................................................................................ 555 15.15.3 配置选项................................................................................................ 555 15.15.4 键盘反应................................................................................................ 556 15.15.5 “菜单” API ........................................................................................... 556 15.15.6 示例 ..................................................................................................... 570 15.16 MESSAGEBOX:消息框小工具 .................................................................... 571 15.16.1 配置选项................................................................................................ 571 15.16.2 键盘反应................................................................................................ 571 15.16.3 MESSAGEBOX API.................................................................................. 571 15.17 MULTIEDIT:多行文本小工具 ..................................................................... 573 15.17.1 配置选项................................................................................................ 574 15.17.2 通知代码................................................................................................ 574 15.17.3 键盘反应................................................................................................ 574 15.17.4 MULTIEDIT API...................................................................................... 574 15.17.5 示例 ..................................................................................................... 584 15.18 MULTIPAGE:“多页”小工具 ..................................................................... 586 15.18.1 配置选项................................................................................................ 587 15.18.2 通知代码................................................................................................ 587 15.18.3 键盘反应................................................................................................ 587 15.18.4 MULTIPAGE API..................................................................................... 587 15.18.5 示例 ..................................................................................................... 598 15.19 PROGBAR:进度条小工具.......................................................................... 599 15.19.1 配置选项................................................................................................ 599 15.19.2 键盘反应................................................................................................ 599 15.19.3 PROGBAR API ....................................................................................... 599 15.19.4 示例 ..................................................................................................... 604 15.20 RADIO:单选按钮小工具 ........................................................................... 605 15.20.1 配置选项................................................................................................ 605 15.20.2 通知代码................................................................................................ 605 15.20.3 键盘反应................................................................................................ 606 15.20.4 RADIO API............................................................................................ 606 15.20.5 示例 ..................................................................................................... 615 15.21 SCROLLBAR:滚动条小工具....................................................................... 617 15.21.1 配置选项................................................................................................ 617 15.21.2 通知代码................................................................................................ 61716 emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co. KG 15.21.3 键盘反应 ................................................................................................617 15.21.4 SCROLLBAR API .....................................................................................618 15.21.5 示例......................................................................................................625 15.22 SLIDER:滑块小工具 ................................................................................626 15.22.1 配置选项 ................................................................................................626 15.22.2 通知代码 ................................................................................................626 15.22.3 键盘反应 ................................................................................................626 15.22.4 SLIDER API ...........................................................................................626 15.22.5 示例......................................................................................................632 15.23 文本文本小工具 ........................................................................................633 15.23.1 配置选项 ................................................................................................633 15.23.2 键盘反应 ................................................................................................633 15.23.3 文本 API ................................................................................................633 15.23.4 示例......................................................................................................639 15.24 TREEVIEW:树形视图小工具.......................................................................640 15.24.1 术语说明 ................................................................................................641 15.24.2 配置选项 ................................................................................................642 15.24.3 通知代码 ................................................................................................642 15.24.4 键盘反应 ................................................................................................642 15.24.5 TREEVIEW API .......................................................................................643 15.24.5.1 常用例程 ................................................................................................644 15.24.5.2 项目相关例程...........................................................................................657 15.24.6 示例......................................................................................................662 15.25 WINDOW:窗口小工具..............................................................................663 15.25.1 配置选项 ................................................................................................663 15.25.2 键盘反应 ................................................................................................663 15.25.3 WINDOW API.........................................................................................663 16 对话框 ........................................................................................................................665 16.1 对话框的基本原理 .....................................................................................666 16.2 创建对话框 .............................................................................................666 16.2.1 资源表 ...................................................................................................666 16.2.2 对话框过程函数 ........................................................................................667 16.2.2.1 初始化对话框...........................................................................................668 16.2.2.2 定义对话框行为 ........................................................................................669 16.3 对话框 API..............................................................................................670 16.4 对话框 ...................................................................................................670 17 GUIBuilder .................................................................................................................673 17.1 简介......................................................................................................674 17.2 入门指南 ................................................................................................675 17.3 创建对话框 .............................................................................................676 17.3.1 选择父小工具...........................................................................................676 17.3.2 在编辑器调整大小和定位 ..........................................................................676 17.3.3 修改小工具属性 ........................................................................................676 17.3.4 向小工具添加其他函数................................................................................676 17.3.5 删除小工具属性 ........................................................................................677 17.3.6 删除小工具 .............................................................................................677 17.4 保存当前的对话框 .....................................................................................678 17.5 GUIBuilder 的输出 ...................................................................................679 17.6 修改 C 文件 .............................................................................................681 17.7 如何使用 C 文件 .......................................................................................681 18 换肤............................................................................................................................683 18.1 “皮肤”是什么? ......................................................................................684 18.2 从使用 API 函数到换肤 ...............................................................................684 18.3 可换肤的小工具 ........................................................................................685 18.4 使用皮肤 ................................................................................................685 18.4.1 运行时间配置...........................................................................................686 18.4.2 编译时间配置...........................................................................................686emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co. KG 17 18.5 简单更改 “Flex”皮肤外观 ......................................................................... 686 18.6 对 “Flex”皮肤外观所作的重大更改 .............................................................. 687 18.6.1 换肤回调机制 .......................................................................................... 687 18.6.2 更改默认皮肤的外观 .................................................................................. 687 18.6.3 命令列表................................................................................................ 688 18.7 常用的换肤 API........................................................................................ 690 18.8 BUTTON_SKIN_FLEX .............................................................................. 693 18.8.1 配置结构................................................................................................ 693 18.8.2 配置选项................................................................................................ 693 18.8.3 换肤 API................................................................................................ 694 18.8.4 命令列表................................................................................................ 695 18.9 CHECKBOX_SKIN_FLEX .......................................................................... 696 18.9.1 配置结构................................................................................................ 696 18.9.2 配置选项................................................................................................ 696 18.9.3 换肤 API................................................................................................ 697 18.9.4 命令列表................................................................................................ 698 18.10 DROPDOWN_SKIN_FLEX......................................................................... 700 18.10.1 配置结构................................................................................................ 700 18.10.2 配置选项................................................................................................ 701 18.10.3 换肤 API................................................................................................ 701 18.10.4 命令列表................................................................................................ 702 18.11 FRAMEWIN_SKIN_FLEX .......................................................................... 703 18.11.1 配置结构................................................................................................ 703 18.11.2 配置选项................................................................................................ 704 18.11.3 换肤 API................................................................................................ 704 18.11.4 命令列表................................................................................................ 705 18.12 HEADER_SKIN_FLEX .............................................................................. 708 18.12.1 配置结构................................................................................................ 708 18.12.2 配置选项................................................................................................ 708 18.12.3 换肤 API................................................................................................ 709 18.12.4 命令列表................................................................................................ 709 18.13 PROGBAR_SKIN_FLEX ............................................................................ 711 18.13.1 配置结构................................................................................................ 711 18.13.2 配置选项................................................................................................ 711 18.13.3 换肤 API................................................................................................ 712 18.13.4 命令列表................................................................................................ 712 18.14 RADIO_SKIN_FLEX ................................................................................ 715 18.14.1 配置结构................................................................................................ 715 18.14.2 配置选项................................................................................................ 716 18.14.3 换肤 API................................................................................................ 716 18.14.4 命令列表................................................................................................ 717 18.15 SCROLLBAR_SKIN_FLEX......................................................................... 719 18.15.1 配置结构................................................................................................ 719 18.15.2 配置选项................................................................................................ 720 18.15.3 换肤 API................................................................................................ 720 18.15.4 命令列表................................................................................................ 721 18.16 SLIDER_SKIN_FLEX ............................................................................... 724 18.16.1 配置结构................................................................................................ 724 18.16.2 配置选项................................................................................................ 725 18.16.3 换肤 API................................................................................................ 725 18.16.4 命令列表................................................................................................ 726 19 多缓冲 ........................................................................................................................729 19.1 工作原理................................................................................................ 730 19.1.1 双缓冲 .................................................................................................. 730 19.1.2 三缓冲 .................................................................................................. 730 19.2 要求 ..................................................................................................... 731 19.3 限制 ..................................................................................................... 731 19.4 配置 ..................................................................................................... 731 19.4.1 LCD_X_Config() .................................................................................... 731 19.4.2 LCD_X_DisplayDriver()........................................................................... 73218 emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co. KG 19.5 通过窗口管理器自动使用多个缓冲器 ...............................................................733 19.6 多缓冲 API..............................................................................................734 20 虚拟屏幕 / 虚拟页面 ...................................................................................................739 20.1 简介......................................................................................................740 20.2 要求......................................................................................................740 20.3 配置......................................................................................................741 20.4 示例.....................................................................................................741 20.4.1 基本示例 ................................................................................................741 20.4.2 使用窗口管理器的实时示例 ..........................................................................743 20.4.3 使用窗口管理器的对话框示例 .......................................................................744 20.5 虚拟屏幕 API...........................................................................................746 21 多层 / 多显示支持 .......................................................................................................747 21.1 简介......................................................................................................748 21.1.1 选择绘图操作所使用的层 .............................................................................748 21.1.2 选择窗口所使用的层 ..................................................................................748 21.1.2.1 把窗口从一层移到另一层 .............................................................................749 21.2 使用多层支持...........................................................................................751 21.2.1 透明......................................................................................................751 21.2.2 Alpha 混合 .............................................................................................752 21.2.3 硬件游标 ................................................................................................753 21.2.4 多层示例 ................................................................................................753 21.3 使用多显示支持 ........................................................................................753 21.3.1 启用多显示支持 ........................................................................................753 21.3.2 运行时间屏幕旋转 .....................................................................................754 21.3.3 多显示示例 .............................................................................................754 21.4 配置多层支持...........................................................................................754 21.5 配置多显示支持 ........................................................................................755 21.6 多层 API .......................................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值