⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 framewin.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 4 页
字号:
                  |L6.42|
;;;439      }
;;;440      TitleHeight = FRAMEWIN__CalcTitleHeight(pObj);
00002a  4628              MOV      r0,r5
00002c  f7fffffe          BL       FRAMEWIN__CalcTitleHeight
000030  4607              MOV      r7,r0
;;;441      if (pObj->hMenu) {
000032  f9b5004e          LDRSH    r0,[r5,#0x4e]
000036  b110              CBZ      r0,|L6.62|
;;;442        MenuHeight = WM_GetWindowSizeY(pObj->hMenu);
000038  f7fffffe          BL       WM_GetWindowSizeY
00003c  4680              MOV      r8,r0
                  |L6.62|
;;;443      }
;;;444      pPos->TitleHeight = TitleHeight;
00003e  8027              STRH     r7,[r4,#0]
;;;445      pPos->MenuHeight  = MenuHeight;
000040  f8a48002          STRH     r8,[r4,#2]
;;;446      /* Set object properties accordingly */
;;;447      pPos->rClient.x0  =         BorderSize;
;;;448      pPos->rClient.x1  = xsize - BorderSize - 1;
000044  ebab0006          SUB      r0,r11,r6
;;;449      pPos->rClient.y0  =         BorderSize + IBorderSize + TitleHeight + MenuHeight;
000048  eb060109          ADD      r1,r6,r9
00004c  80a6              STRH     r6,[r4,#4]            ;447
00004e  1e40              SUBS     r0,r0,#1              ;448
000050  19ca              ADDS     r2,r1,r7
000052  8120              STRH     r0,[r4,#8]            ;448
000054  eb020108          ADD      r1,r2,r8
000058  80e1              STRH     r1,[r4,#6]
;;;450      pPos->rClient.y1  = ysize - BorderSize - 1;
00005a  ebaa0106          SUB      r1,r10,r6
00005e  1e49              SUBS     r1,r1,#1
000060  8161              STRH     r1,[r4,#0xa]
;;;451      /* Calculate title rect */
;;;452      pPos->rTitleText.x0 =         BorderSize;
000062  81a6              STRH     r6,[r4,#0xc]
;;;453      pPos->rTitleText.x1 = xsize - BorderSize - 1;
000064  8220              STRH     r0,[r4,#0x10]
;;;454      pPos->rTitleText.y0 =         BorderSize;
;;;455      pPos->rTitleText.y1 =         BorderSize + TitleHeight - 1;
000066  19f0              ADDS     r0,r6,r7
000068  81e6              STRH     r6,[r4,#0xe]          ;454
00006a  1e40              SUBS     r0,r0,#1
00006c  8260              STRH     r0,[r4,#0x12]
;;;456      /* Iterate over all children */
;;;457      for (hChild = pObj->Widget.Win.hFirstChild; hChild; hChild = pChild->hNext) {
00006e  f9b50018          LDRSH    r0,[r5,#0x18]
000072  e022              B        |L6.186|
                  |L6.116|
;;;458        pChild = WM_H2P(hChild);
000074  f7fffffe          BL       GUI_ALLOC_h2p
;;;459        x0 = pChild->Rect.x0 - pObj->Widget.Win.Rect.x0;
000078  f9b01000          LDRSH    r1,[r0,#0]
00007c  f9b52000          LDRSH    r2,[r5,#0]
;;;460        x1 = pChild->Rect.x1 - pObj->Widget.Win.Rect.x0;
000080  f9b03004          LDRSH    r3,[r0,#4]
000084  1a89              SUBS     r1,r1,r2              ;459
000086  1a9a              SUBS     r2,r3,r2
;;;461        y0 = pChild->Rect.y0 - pObj->Widget.Win.Rect.y0;
000088  f9b03002          LDRSH    r3,[r0,#2]
00008c  f9b57002          LDRSH    r7,[r5,#2]
000090  1bdb              SUBS     r3,r3,r7
;;;462        if (y0 == BorderSize) {
000092  42b3              CMP      r3,r6
000094  d10f              BNE      |L6.182|
;;;463          if (pChild->Status & WM_SF_ANCHOR_RIGHT) {
000096  8b83              LDRH     r3,[r0,#0x1c]
000098  061b              LSLS     r3,r3,#24
00009a  d506              BPL      |L6.170|
;;;464            if (x0 <= pPos->rTitleText.x1) {
00009c  f9b42010          LDRSH    r2,[r4,#0x10]
0000a0  428a              CMP      r2,r1
0000a2  db08              BLT      |L6.182|
;;;465              pPos->rTitleText.x1 = x0 - 1;
0000a4  1e49              SUBS     r1,r1,#1
0000a6  8221              STRH     r1,[r4,#0x10]
0000a8  e005              B        |L6.182|
                  |L6.170|
;;;466            }
;;;467          } else {
;;;468            if (x1 >= pPos->rTitleText.x0) {
0000aa  f9b4100c          LDRSH    r1,[r4,#0xc]
0000ae  4291              CMP      r1,r2
0000b0  dc01              BGT      |L6.182|
;;;469              pPos->rTitleText.x0 = x1 + 1;
0000b2  1c52              ADDS     r2,r2,#1
0000b4  81a2              STRH     r2,[r4,#0xc]
                  |L6.182|
0000b6  f9b0001a          LDRSH    r0,[r0,#0x1a]         ;457
                  |L6.186|
0000ba  2800              CMP      r0,#0                 ;457
0000bc  d1da              BNE      |L6.116|
;;;470            }
;;;471          }
;;;472        }
;;;473      }
;;;474    }
0000be  e8bd9ff0          POP      {r4-r12,pc}
;;;475    
                          ENDP


                          AREA ||i.FRAMEWIN__CalcTitleHeight||, CODE, READONLY, ALIGN=1

                  FRAMEWIN__CalcTitleHeight PROC
;;;409    */
;;;410    int FRAMEWIN__CalcTitleHeight(FRAMEWIN_Obj* pObj) {
000000  b510              PUSH     {r4,lr}
000002  4601              MOV      r1,r0
;;;411      int r = 0;
;;;412      if (pObj->Widget.State & FRAMEWIN_SF_TITLEVIS) {
000004  8cca              LDRH     r2,[r1,#0x26]
000006  2000              MOVS     r0,#0                 ;411
000008  0692              LSLS     r2,r2,#26
00000a  d507              BPL      |L7.28|
;;;413        r = pObj->Props.TitleHeight;
00000c  f9b10040          LDRSH    r0,[r1,#0x40]
;;;414        if (r == 0) {
000010  2800              CMP      r0,#0
000012  d103              BNE      |L7.28|
;;;415          r = 2 + GUI_GetYSizeOfFont(pObj->Props.pFont);
000014  6a88              LDR      r0,[r1,#0x28]
000016  f7fffffe          BL       GUI_GetYSizeOfFont
00001a  1c80              ADDS     r0,r0,#2
                  |L7.28|
;;;416        }
;;;417      }
;;;418      return r;
;;;419    }
00001c  bd10              POP      {r4,pc}
;;;420    
                          ENDP


                          AREA ||i.FRAMEWIN__UpdatePositions||, CODE, READONLY, ALIGN=1

                  FRAMEWIN__UpdatePositions PROC
;;;479    */
;;;480    void FRAMEWIN__UpdatePositions(FRAMEWIN_Obj* pObj) {
000000  b510              PUSH     {r4,lr}
000002  4604              MOV      r4,r0
;;;481      /* Move client window accordingly */
;;;482      if (pObj->hClient || pObj->hMenu) {
000004  f8b0004c          LDRH     r0,[r0,#0x4c]
000008  b086              SUB      sp,sp,#0x18           ;480
00000a  b918              CBNZ     r0,|L8.20|
00000c  f8b4004e          LDRH     r0,[r4,#0x4e]
000010  2800              CMP      r0,#0
000012  d029              BEQ      |L8.104|
                  |L8.20|
;;;483        POSITIONS Pos;
;;;484        FRAMEWIN__CalcPositions(pObj, &Pos);
000014  a901              ADD      r1,sp,#4
000016  4620              MOV      r0,r4
000018  f7fffffe          BL       FRAMEWIN__CalcPositions
;;;485        if (pObj->hClient) {
00001c  f9b4004c          LDRSH    r0,[r4,#0x4c]
000020  b1a8              CBZ      r0,|L8.78|
;;;486          WM_MoveChildTo(pObj->hClient, Pos.rClient.x0, Pos.rClient.y0);
000022  f9bd200a          LDRSH    r2,[sp,#0xa]
000026  f9bd1008          LDRSH    r1,[sp,#8]
00002a  f7fffffe          BL       WM_MoveChildTo
;;;487          WM_SetSize(pObj->hClient, 
00002e  f9bd000e          LDRSH    r0,[sp,#0xe]
000032  f9bd100a          LDRSH    r1,[sp,#0xa]
000036  1a42              SUBS     r2,r0,r1
000038  f9bd000c          LDRSH    r0,[sp,#0xc]
00003c  f9bd1008          LDRSH    r1,[sp,#8]
000040  1c52              ADDS     r2,r2,#1
000042  1a41              SUBS     r1,r0,r1
000044  1c49              ADDS     r1,r1,#1
000046  f9b4004c          LDRSH    r0,[r4,#0x4c]
00004a  f7fffffe          BL       WM_SetSize
                  |L8.78|
;;;488                     Pos.rClient.x1 - Pos.rClient.x0 + 1, 
;;;489                     Pos.rClient.y1 - Pos.rClient.y0 + 1);
;;;490        }
;;;491        if (pObj->hMenu) {
00004e  f9b4004e          LDRSH    r0,[r4,#0x4e]
000052  2800              CMP      r0,#0
000054  d008              BEQ      |L8.104|
;;;492          WM_MoveChildTo(pObj->hMenu, Pos.rClient.x0, Pos.rClient.y0 - Pos.MenuHeight);
000056  f9bd100a          LDRSH    r1,[sp,#0xa]
00005a  f9bd2006          LDRSH    r2,[sp,#6]
00005e  1a8a              SUBS     r2,r1,r2
000060  f9bd1008          LDRSH    r1,[sp,#8]
000064  f7fffffe          BL       WM_MoveChildTo
                  |L8.104|
;;;493        }
;;;494      }
;;;495    }
000068  b006              ADD      sp,sp,#0x18
00006a  bd10              POP      {r4,pc}
;;;496    
                          ENDP


                          AREA ||i.FRAMEWIN__cbClient||, CODE, READONLY, ALIGN=1

                  FRAMEWIN__cbClient PROC
;;;337    */
;;;338    static void FRAMEWIN__cbClient(WM_MESSAGE* pMsg) {
000000  e92d43fe          PUSH     {r1-r9,lr}
000004  4604              MOV      r4,r0
;;;339      WM_HWIN hWin    = pMsg->hWin;
000006  f9b00004          LDRSH    r0,[r0,#4]
00000a  4607              MOV      r7,r0
;;;340      WM_HWIN hParent = WM_GetParent(pMsg->hWin);
00000c  f7fffffe          BL       WM_GetParent
000010  4680              MOV      r8,r0
;;;341      FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hParent);
000012  f7fffffe          BL       GUI_ALLOC_h2p
000016  4605              MOV      r5,r0
;;;342      WM_CALLBACK* cb = pObj->cb;
;;;343      switch (pMsg->MsgId) {
000018  6c86              LDR      r6,[r0,#0x48]
00001a  6820              LDR      r0,[r4,#0]
00001c  2817              CMP      r0,#0x17
00001e  d055              BEQ      |L9.204|
000020  dc08              BGT      |L9.52|
000022  280e              CMP      r0,#0xe
000024  d03c              BEQ      |L9.160|
000026  280f              CMP      r0,#0xf
000028  d00c              BEQ      |L9.68|
00002a  2814              CMP      r0,#0x14
00002c  d04e              BEQ      |L9.204|
00002e  2815              CMP      r0,#0x15
000030  d04c              BEQ      |L9.204|
000032  e042              B        |L9.186|
                  |L9.52|
000034  281f              CMP      r0,#0x1f
000036  d019              BEQ      |L9.108|
000038  2820              CMP      r0,#0x20
00003a  d02a              BEQ      |L9.146|
00003c  2822              CMP      r0,#0x22
00003e  d13c              BNE      |L9.186|
;;;344      case WM_PAINT:
;;;345        if (pObj->Props.ClientColor != GUI_INVALID_COLOR) {
;;;346          LCD_SetBkColor(pObj->Props.ClientColor);
;;;347          GUI_Clear();
;;;348        }
;;;349        /* Give the user callback  a chance to draw.
;;;350         * Note that we can not run into the bottom part, as this passes the parents handle
;;;351         */
;;;352        if (cb) {
;;;353    	    WM_MESSAGE Msg;
;;;354          Msg      = *pMsg;
;;;355          Msg.hWin = hWin;
;;;356          (*cb)(&Msg);
;;;357        }
;;;358        return;
;;;359      case WM_SET_FOCUS:
;;;360        if (pMsg->Data.v) {     /* Focus received */
;;;361          if (pObj->hFocussedChild && (pObj->hFocussedChild != hWin)) {
;;;362            WM_SetFocus(pObj->hFocussedChild);
;;;363          } else {
;;;364            pObj->hFocussedChild = WM_SetFocusOnNextChild(hWin);
;;;365          }
;;;366          pMsg->Data.v = 0;     /* Focus change accepted */
;;;367        }
;;;368        return;
;;;369      case WM_GET_ACCEPT_FOCUS:
;;;370        WIDGET_HandleActive(hParent, pMsg);
;;;371        return;
;;;372      case WM_KEY:
;;;373        if (((const WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt > 0) {
;;;374          int Key = ((const WM_KEY_INFO*)(pMsg->Data.p))->Key;
;;;375          switch (Key) {
;;;376          case GUI_KEY_TAB:
;;;377            pObj->hFocussedChild = WM_SetFocusOnNextChild(hWin);
;;;378            return;
;;;379          }
;;;380        }
;;;381        break;	                       /* Send to parent by not doing anything */
;;;382      case WM_GET_BKCOLOR:
;;;383        pMsg->Data.Color = pObj->Props.ClientColor;
;;;384        return;                       /* Message handled */
000040  6be8              LDR      r0,[r5,#0x3c]
000042  e024              B        |L9.142|
                  |L9.68|
000044  6be8              LDR      r0,[r5,#0x3c]         ;345
000046  f06f4170          MVN      r1,#0xf0000000        ;345
00004a  4288              CMP      r0,r1                 ;345
00004c  d003              BEQ      |L9.86|
00004e  f7fffffe          BL       LCD_SetBkColor
000052  f7fffffe          BL       GUI_Clear
                  |L9.86|
000056  2e00              CMP      r6,#0                 ;352
000058  d006              BEQ      |L9.104|
00005a  cc0e              LDM      r4!,{r1-r3}           ;354

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -