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

📄 listbox.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000022  4607              MOV      r7,r0
;;;208        ySize    = _CallOwnerDraw(hObj, pObj, WIDGET_ITEM_GET_YSIZE, Index);
000024  464b              MOV      r3,r9
000026  2202              MOVS     r2,#2
000028  4631              MOV      r1,r6
00002a  4640              MOV      r0,r8
00002c  f7fffffe          BL       _CallOwnerDraw
000030  4605              MOV      r5,r0
;;;209        GUI_SetFont(pOldFont);
000032  4638              MOV      r0,r7
000034  f7fffffe          BL       GUI_SetFont
                  |L23.56|
;;;210      }
;;;211      if (pItem) {
000038  b104              CBZ      r4,|L23.60|
;;;212        pItem->ySize = ySize;
00003a  8065              STRH     r5,[r4,#2]
                  |L23.60|
;;;213      }
;;;214      return ySize;
00003c  4628              MOV      r0,r5
;;;215    }
00003e  e8bd87f0          POP      {r4-r10,pc}
;;;216    
                          ENDP


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

                  _GetNumVisItems PROC
;;;280    */
;;;281    static unsigned _GetNumVisItems(const LISTBOX_Obj* pObj, LISTBOX_Handle hObj) {
000000  e92d47f0          PUSH     {r4-r10,lr}
000004  4680              MOV      r8,r0
000006  4689              MOV      r9,r1
;;;282      int NumItems, r = 1;
000008  2401              MOVS     r4,#1
00000a  3028              ADDS     r0,r0,#0x28
00000c  f7fffffe          BL       GUI_ARRAY_GetNumItems
;;;283      NumItems = LISTBOX__GetNumItems(pObj);
000010  4606              MOV      r6,r0
;;;284      if (NumItems > 1) {
000012  2801              CMP      r0,#1
000014  dd17              BLE      |L24.70|
;;;285        int i, ySize, DistY = 0;
000016  2500              MOVS     r5,#0
;;;286        ySize = _GetYSize(hObj);
000018  4648              MOV      r0,r9
00001a  f7fffffe          BL       _GetYSize
00001e  4607              MOV      r7,r0
;;;287        for (i = NumItems - 1; i >= 0; i--) {
000020  4634              MOV      r4,r6
000022  e007              B        |L24.52|
                  |L24.36|
;;;288          DistY += _GetItemSizeY(hObj, pObj, i);
000024  4622              MOV      r2,r4
000026  4641              MOV      r1,r8
000028  4648              MOV      r0,r9
00002a  f7fffffe          BL       _GetItemSizeY
00002e  4405              ADD      r5,r5,r0
;;;289          if (DistY > ySize) {
000030  42bd              CMP      r5,r7
000032  dc01              BGT      |L24.56|
                  |L24.52|
000034  1e64              SUBS     r4,r4,#1              ;287
000036  d5f5              BPL      |L24.36|
                  |L24.56|
;;;290            break;
;;;291          }
;;;292        }
;;;293        r = NumItems - i - 1;
000038  1b34              SUBS     r4,r6,r4
00003a  1e64              SUBS     r4,r4,#1
;;;294        if (r < 1) {
00003c  2c01              CMP      r4,#1
00003e  da02              BGE      |L24.70|
;;;295          return 1;
000040  2001              MOVS     r0,#1
                  |L24.66|
;;;296        }
;;;297      }
;;;298      return r;
;;;299    }
000042  e8bd87f0          POP      {r4-r10,pc}
                  |L24.70|
000046  4620              MOV      r0,r4                 ;298
000048  e7fb              B        |L24.66|
;;;300    
                          ENDP


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

                  _GetYSize PROC
;;;164    */
;;;165    static int _GetYSize(LISTBOX_Handle hObj) {
000000  b51c              PUSH     {r2-r4,lr}
;;;166      GUI_RECT Rect;
;;;167      WM_GetInsideRectExScrollbar(hObj, &Rect);
000002  4669              MOV      r1,sp
000004  f7fffffe          BL       WM_GetInsideRectExScrollbar
;;;168      return (Rect.y1 - Rect.y0 + 1);
000008  f9bd0006          LDRSH    r0,[sp,#6]
00000c  f9bd1002          LDRSH    r1,[sp,#2]
000010  1a40              SUBS     r0,r0,r1
000012  1c40              ADDS     r0,r0,#1
;;;169    }
000014  bd1c              POP      {r2-r4,pc}
;;;170    
                          ENDP


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

                  _LISTBOX_Callback PROC
;;;750    */
;;;751    static void _LISTBOX_Callback(WM_MESSAGE*pMsg) {
000000  e92d47f0          PUSH     {r4-r10,lr}
;;;752      LISTBOX_Handle hObj = pMsg->hWin;
000004  f9b0a004          LDRSH    r10,[r0,#4]
000008  4604              MOV      r4,r0                 ;751
00000a  b086              SUB      sp,sp,#0x18           ;751
;;;753      LISTBOX_Obj* pObj = LISTBOX_H2P(hObj);
00000c  4650              MOV      r0,r10
00000e  f7fffffe          BL       GUI_ALLOC_h2p
000012  4605              MOV      r5,r0
;;;754      WM_SCROLL_STATE ScrollState;
;;;755      /* Let widget handle the standard messages */
;;;756      if (WIDGET_HandleActive(hObj, pMsg) == 0) {
000014  4621              MOV      r1,r4
000016  4650              MOV      r0,r10
000018  f7fffffe          BL       WIDGET_HandleActive
00001c  b938              CBNZ     r0,|L26.46|
;;;757        /* Owner needs to be informed about focus change */
;;;758        if (pMsg->MsgId == WM_SET_FOCUS) {
00001e  6820              LDR      r0,[r4,#0]
000020  281f              CMP      r0,#0x1f
000022  d172              BNE      |L26.266|
;;;759          if (pMsg->Data.v == 0) {            /* Lost focus ? */
000024  68a0              LDR      r0,[r4,#8]
000026  2800              CMP      r0,#0
000028  d16f              BNE      |L26.266|
;;;760            _NotifyOwner(hObj, LISTBOX_NOTIFICATION_LOST_FOCUS);
00002a  210b              MOVS     r1,#0xb
00002c  e08d              B        |L26.330|
                  |L26.46|
;;;761          }
;;;762        }
;;;763        return;
;;;764      }
;;;765      switch (pMsg->MsgId) {
00002e  6821              LDR      r1,[r4,#0]
000030  290e              CMP      r1,#0xe
000032  d06b              BEQ      |L26.268|
000034  dc0d              BGT      |L26.82|
000036  2905              CMP      r1,#5
000038  d069              BEQ      |L26.270|
00003a  290b              CMP      r1,#0xb
00003c  d068              BEQ      |L26.272|
00003e  290c              CMP      r1,#0xc
                  |L26.64|
000040  d115              BNE      |L26.110|
000042  68a0              LDR      r0,[r4,#8]
000044  2800              CMP      r0,#0
000046  d07f              BEQ      |L26.328|
000048  7a00              LDRB     r0,[r0,#8]
00004a  2800              CMP      r0,#0
00004c  d15d              BNE      |L26.266|
00004e  2102              MOVS     r1,#2
000050  e07b              B        |L26.330|
                  |L26.82|
000052  290f              CMP      r1,#0xf
000054  d02f              BEQ      |L26.182|
000056  2911              CMP      r1,#0x11
000058  d033              BEQ      |L26.194|
00005a  2926              CMP      r1,#0x26
00005c  d1f0              BNE      |L26.64|
;;;766      case WM_NOTIFY_PARENT:
;;;767        switch (pMsg->Data.v) {
00005e  68a0              LDR      r0,[r4,#8]
000060  2805              CMP      r0,#5
000062  d005              BEQ      |L26.112|
000064  2806              CMP      r0,#6
000066  d1eb              BNE      |L26.64|
;;;768        case WM_NOTIFICATION_VALUE_CHANGED:
;;;769          if (pMsg->hWinSrc  == WM_GetScrollbarV(hObj)) {
;;;770            WM_GetScrollState(pMsg->hWinSrc, &ScrollState);
;;;771            pObj->ScrollStateV.v = ScrollState.v;
;;;772            LISTBOX__InvalidateInsideArea(hObj);
;;;773            _NotifyOwner(hObj, WM_NOTIFICATION_SCROLL_CHANGED);
;;;774          } else if (pMsg->hWinSrc == WM_GetScrollbarH(hObj)) {
;;;775            WM_GetScrollState(pMsg->hWinSrc, &ScrollState);
;;;776            pObj->ScrollStateH.v = ScrollState.v;
;;;777            LISTBOX__InvalidateInsideArea(hObj);
;;;778            _NotifyOwner(hObj, WM_NOTIFICATION_SCROLL_CHANGED);
;;;779          }
;;;780          break;
;;;781        case WM_NOTIFICATION_SCROLLBAR_ADDED:
;;;782          LISTBOX_UpdateScrollers(hObj);
000068  4650              MOV      r0,r10
00006a  f7fffffe          BL       LISTBOX_UpdateScrollers
                  |L26.110|
;;;783          break;
00006e  e088              B        |L26.386|
                  |L26.112|
000070  4650              MOV      r0,r10                ;769
000072  f7fffffe          BL       WM_GetScrollbarV
000076  4601              MOV      r1,r0                 ;769
000078  f9b40006          LDRSH    r0,[r4,#6]            ;769
00007c  4281              CMP      r1,r0                 ;769
00007e  d105              BNE      |L26.140|
000080  a903              ADD      r1,sp,#0xc            ;770
000082  f7fffffe          BL       WM_GetScrollState
000086  9804              LDR      r0,[sp,#0x10]         ;771
000088  6368              STR      r0,[r5,#0x34]         ;773
00008a  e00c              B        |L26.166|
                  |L26.140|
00008c  4650              MOV      r0,r10                ;774
00008e  f7fffffe          BL       WM_GetScrollbarH
000092  4601              MOV      r1,r0                 ;774
000094  f9b40006          LDRSH    r0,[r4,#6]            ;774
000098  4281              CMP      r1,r0                 ;774
00009a  d172              BNE      |L26.386|
00009c  a903              ADD      r1,sp,#0xc            ;775
00009e  f7fffffe          BL       WM_GetScrollState
0000a2  9804              LDR      r0,[sp,#0x10]         ;776
0000a4  6428              STR      r0,[r5,#0x40]         ;776
                  |L26.166|
0000a6  4650              MOV      r0,r10                ;772
0000a8  f7fffffe          BL       LISTBOX__InvalidateInsideArea
0000ac  210a              MOVS     r1,#0xa               ;773
0000ae  4650              MOV      r0,r10                ;773
0000b0  f7fffffe          BL       _NotifyOwner
0000b4  e065              B        |L26.386|
                  |L26.182|
;;;784        }
;;;785        break;
;;;786      case WM_PAINT:
;;;787        _OnPaint(hObj, pObj, pMsg);
0000b6  4622              MOV      r2,r4
0000b8  4629              MOV      r1,r5
0000ba  4650              MOV      r0,r10
0000bc  f7fffffe          BL       _OnPaint
;;;788        break;
0000c0  e05f              B        |L26.386|
                  |L26.194|
;;;789      case WM_PID_STATE_CHANGED:
;;;790        {
;;;791          const WM_PID_STATE_CHANGED_INFO* pInfo = (const WM_PID_STATE_CHANGED_INFO*)pMsg->Data.p;
;;;792          if (pInfo->State) {
0000c2  68a0              LDR      r0,[r4,#8]
0000c4  7a01              LDRB     r1,[r0,#8]
0000c6  2900              CMP      r1,#0
0000c8  d05b              BEQ      |L26.386|
0000ca  c890              LDM      r0!,{r4,r7}
0000cc  f04f38ff          MOV      r8,#0xffffffff
0000d0  a901              ADD      r1,sp,#4
0000d2  4650              MOV      r0,r10
0000d4  f7fffffe          BL       WM_GetInsideRectExScrollbar
0000d8  f9bd0004          LDRSH    r0,[sp,#4]
0000dc  42a0              CMP      r0,r4
0000de  dc24              BGT      |L26.298|
0000e0  f9bd0006          LDRSH    r0,[sp,#6]
0000e4  42b8              CMP      r0,r7
0000e6  dc20              BGT      |L26.298|
0000e8  f9bd0008          LDRSH    r0,[sp,#8]
0000ec  42a0              CMP      r0,r4
0000ee  db1c              BLT      |L26.298|
0000f0  f9bd000a          LDRSH    r0,[sp,#0xa]
0000f4  42b8              CMP      r0,r7
0000f6  db18              BLT      |L26.298|
0000f8  f1050028          ADD      r0,r5,#0x28
0000fc  f7fffffe          BL       GUI_ARRAY_GetNumItems
000100  4681              MOV      r9,r0
000102  f9bd6006          LDRSH    r6,[sp,#6]
000106  6b6c              LDR      r4,[r5,#0x34]
000108  e00d              B        |L26.294|
                  |L26.266|
00010a  e021              B        |L26.336|
                  |L26.268|
00010c  e028              B        |L26.352|
                  |L26.270|
00010e  e032              B        |L26.374|
                  |L26.272|
000110  e021              B        |L26.342|
                  |L26.274|
000112  42b7              CMP      r7,r6
000114  db00              BLT      |L26.280|
000116  46a0              MOV      r8,r4
                  |L26.280|
000118  4622              MOV      r2,r4
00011a  4629              MOV      r1,r5
00011c  4650              MOV      r0,r10
00011e  f7fffffe          BL       _GetItemSizeY
000122  4406              ADD      r6,r6,r0
000124  1c64              ADDS     r4,r4,#1
                  |L26.294|
000126  454c              CMP      r4,r9
000128  dbf3              BLT      |L26.274|
                  |L26.298|
00012a  f1b80400          SUBS     r4,r8,#0
;;;793            int Sel;
;;;794            Sel = _GetItemFromPos(hObj, pObj, pInfo->x, pInfo->y);
;;;795            if (Sel >= 0) {
00012e  db08              BLT      |L26.322|
;;;796              _ToggleMultiSel(hObj, pObj, Sel);
000130  4622              MOV      r2,r4
000132  4629 

⌨️ 快捷键说明

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