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

📄 listbox.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;974        WM_UNLOCK();
;;;975      }
;;;976    }
000060  e8bd81f0          POP      {r4-r8,pc}
;;;977    
                          ENDP


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

                  LISTBOX_OwnerDraw PROC
;;;323    */
;;;324    int LISTBOX_OwnerDraw(const WIDGET_ITEM_DRAW_INFO* pDrawItemInfo) {
000000  e92d47ff          PUSH     {r0-r10,lr}
000004  4604              MOV      r4,r0
;;;325      switch (pDrawItemInfo->Cmd) {
000006  6840              LDR      r0,[r0,#4]
000008  b330              CBZ      r0,|L8.88|
00000a  2801              CMP      r0,#1
00000c  d00f              BEQ      |L8.46|
00000e  2802              CMP      r0,#2
000010  d17e              BNE      |L8.272|
;;;326        case WIDGET_ITEM_GET_XSIZE: {
;;;327          LISTBOX_Obj* pObj;
;;;328          const GUI_FONT GUI_UNI_PTR* pOldFont;
;;;329          const char* s;
;;;330          int DistX;
;;;331          pObj = LISTBOX_H2P(pDrawItemInfo->hWin);
;;;332          pOldFont = GUI_SetFont(pObj->Props.pFont);
;;;333          s = LISTBOX__GetpString(pObj, pDrawItemInfo->ItemIndex);
;;;334          DistX = GUI_GetStringDistX(s);
;;;335          GUI_SetFont(pOldFont);
;;;336          return DistX;
;;;337        }
;;;338        case WIDGET_ITEM_GET_YSIZE: {
;;;339          LISTBOX_Obj* pObj;
;;;340          pObj = LISTBOX_H2P(pDrawItemInfo->hWin);
000012  f9b40000          LDRSH    r0,[r4,#0]
000016  f7fffffe          BL       GUI_ALLOC_h2p
00001a  4604              MOV      r4,r0
;;;341          return GUI_GetYDistOfFont(pObj->Props.pFont) + pObj->ItemSpacing;
00001c  6c80              LDR      r0,[r0,#0x48]
00001e  f7fffffe          BL       GUI_GetYDistOfFont
000022  f8b41076          LDRH     r1,[r4,#0x76]
000026  4408              ADD      r0,r0,r1
                  |L8.40|
;;;342        }
;;;343        case WIDGET_ITEM_DRAW: {
;;;344          LISTBOX_Obj* pObj;
;;;345          LISTBOX_ITEM* pItem;
;;;346          WM_HMEM hItem;
;;;347          GUI_RECT r;
;;;348          int FontDistY;
;;;349          int ItemIndex = pDrawItemInfo->ItemIndex;
;;;350          const char* s;
;;;351          int ColorIndex;
;;;352          char IsDisabled;
;;;353          char IsSelected;
;;;354          pObj = LISTBOX_H2P(pDrawItemInfo->hWin);
;;;355          hItem = GUI_ARRAY_GethItem(&pObj->ItemArray, ItemIndex);
;;;356          pItem = (LISTBOX_ITEM *)GUI_ALLOC_h2p(hItem);
;;;357          WM_GetInsideRect(&r);
;;;358          FontDistY = GUI_GetFontDistY();
;;;359          /* Calculate color index */
;;;360          IsDisabled = (pItem->Status & LISTBOX_ITEM_DISABLED) ? 1 : 0;
;;;361          IsSelected = (pItem->Status & LISTBOX_ITEM_SELECTED) ? 1 : 0;
;;;362          if (pObj->Flags & LISTBOX_SF_MULTISEL) {
;;;363            if (IsDisabled) {
;;;364              ColorIndex = 3;
;;;365            } else {
;;;366              ColorIndex = (IsSelected) ? 2 : 0;
;;;367            }
;;;368          } else {
;;;369            if (IsDisabled) {
;;;370              ColorIndex = 3;
;;;371            } else {
;;;372              if (ItemIndex == pObj->Sel) {
;;;373                ColorIndex = (pObj->Widget.State & WIDGET_STATE_FOCUS) ? 2 : 1;
;;;374              } else {
;;;375                ColorIndex = 0;
;;;376              }
;;;377            }
;;;378          }
;;;379          /* Display item */
;;;380          LCD_SetBkColor(pObj->Props.aBackColor[ColorIndex]);
;;;381          LCD_SetColor  (pObj->Props.aTextColor[ColorIndex]);
;;;382          s = LISTBOX__GetpString(pObj, ItemIndex);
;;;383          GUI_SetTextMode(GUI_TM_TRANS);
;;;384          GUI_Clear();
;;;385          GUI_DispStringAt(s, pDrawItemInfo->x0 + 1, pDrawItemInfo->y0);
;;;386          /* Display focus rectangle */
;;;387          if ((pObj->Flags & LISTBOX_SF_MULTISEL) && (ItemIndex == pObj->Sel)) {
;;;388            GUI_RECT rFocus;
;;;389            rFocus.x0 = pDrawItemInfo->x0;
;;;390            rFocus.y0 = pDrawItemInfo->y0;
;;;391            rFocus.x1 = r.x1;
;;;392            rFocus.y1 = pDrawItemInfo->y0 + FontDistY - 1;
;;;393            LCD_SetColor(GUI_WHITE - pObj->Props.aBackColor[ColorIndex]);
;;;394            GUI_DrawFocusRect(&rFocus, 0);
;;;395          }
;;;396          return 0;
;;;397        }
;;;398      }
;;;399      return 0;
;;;400    }
000028  b004              ADD      sp,sp,#0x10
00002a  e8bd87f0          POP      {r4-r10,pc}
                  |L8.46|
00002e  f9b40000          LDRSH    r0,[r4,#0]            ;331
000032  f7fffffe          BL       GUI_ALLOC_h2p
000036  4605              MOV      r5,r0                 ;331
000038  6c80              LDR      r0,[r0,#0x48]         ;332
00003a  f7fffffe          BL       GUI_SetFont
00003e  4606              MOV      r6,r0                 ;332
000040  4628              MOV      r0,r5                 ;333
000042  68a1              LDR      r1,[r4,#8]            ;333
000044  f7fffffe          BL       LISTBOX__GetpString
000048  f7fffffe          BL       GUI_GetStringDistX
00004c  4604              MOV      r4,r0                 ;334
00004e  4630              MOV      r0,r6                 ;335
000050  f7fffffe          BL       GUI_SetFont
000054  4620              MOV      r0,r4                 ;336
000056  e7e7              B        |L8.40|
                  |L8.88|
000058  f9b40000          LDRSH    r0,[r4,#0]            ;354
00005c  68a6              LDR      r6,[r4,#8]            ;354
00005e  f7fffffe          BL       GUI_ALLOC_h2p
000062  4605              MOV      r5,r0                 ;354
000064  4631              MOV      r1,r6                 ;355
000066  3028              ADDS     r0,r0,#0x28           ;355
000068  f7fffffe          BL       GUI_ARRAY_GethItem
00006c  f7fffffe          BL       GUI_ALLOC_h2p
000070  4607              MOV      r7,r0                 ;356
000072  a802              ADD      r0,sp,#8              ;357
000074  f7fffffe          BL       WM_GetInsideRect
000078  f7fffffe          BL       GUI_GetFontDistY
00007c  4680              MOV      r8,r0                 ;358
00007e  7938              LDRB     r0,[r7,#4]            ;360
000080  f3c00140          UBFX     r1,r0,#1,#1           ;360
000084  f0000201          AND      r2,r0,#1              ;361
000088  f8950074          LDRB     r0,[r5,#0x74]         ;362
00008c  0740              LSLS     r0,r0,#29             ;362
00008e  d505              BPL      |L8.156|
000090  b929              CBNZ     r1,|L8.158|
000092  b10a              CBZ      r2,|L8.152|
000094  2002              MOVS     r0,#2                 ;366
000096  e00d              B        |L8.180|
                  |L8.152|
000098  2000              MOVS     r0,#0                 ;366
00009a  e00b              B        |L8.180|
                  |L8.156|
00009c  b109              CBZ      r1,|L8.162|
                  |L8.158|
00009e  2003              MOVS     r0,#3                 ;370
0000a0  e008              B        |L8.180|
                  |L8.162|
0000a2  f9b50072          LDRSH    r0,[r5,#0x72]         ;372
0000a6  42b0              CMP      r0,r6                 ;372
0000a8  d1f6              BNE      |L8.152|
0000aa  8ce9              LDRH     r1,[r5,#0x26]         ;373
0000ac  2002              MOVS     r0,#2                 ;373
0000ae  07c9              LSLS     r1,r1,#31             ;373
0000b0  d100              BNE      |L8.180|
0000b2  2001              MOVS     r0,#1                 ;373
                  |L8.180|
0000b4  eb050780          ADD      r7,r5,r0,LSL #2       ;380
0000b8  6d38              LDR      r0,[r7,#0x50]         ;380
0000ba  f7fffffe          BL       LCD_SetBkColor
0000be  6e38              LDR      r0,[r7,#0x60]         ;381
0000c0  f7fffffe          BL       LCD_SetColor
0000c4  4631              MOV      r1,r6                 ;382
0000c6  4628              MOV      r0,r5                 ;382
0000c8  f7fffffe          BL       LISTBOX__GetpString
0000cc  4681              MOV      r9,r0                 ;382
0000ce  2002              MOVS     r0,#2                 ;383
0000d0  f7fffffe          BL       GUI_SetTextMode
0000d4  f7fffffe          BL       GUI_Clear
0000d8  e9d41203          LDRD     r1,r2,[r4,#0xc]       ;385
0000dc  1c49              ADDS     r1,r1,#1              ;385
0000de  4648              MOV      r0,r9                 ;385
0000e0  f7fffffe          BL       GUI_DispStringAt
0000e4  f8950074          LDRB     r0,[r5,#0x74]         ;387
0000e8  0740              LSLS     r0,r0,#29             ;387
0000ea  d51f              BPL      |L8.300|
0000ec  f9b50072          LDRSH    r0,[r5,#0x72]         ;387
0000f0  42b0              CMP      r0,r6                 ;387
0000f2  d11b              BNE      |L8.300|
0000f4  68e0              LDR      r0,[r4,#0xc]          ;389
0000f6  f8ad0000          STRH     r0,[sp,#0]            ;389
0000fa  6920              LDR      r0,[r4,#0x10]         ;390
0000fc  f8ad0002          STRH     r0,[sp,#2]            ;390
000100  f8bd000c          LDRH     r0,[sp,#0xc]          ;391
000104  f8ad0004          STRH     r0,[sp,#4]            ;391
000108  f1a80001          SUB      r0,r8,#1              ;392
00010c  6921              LDR      r1,[r4,#0x10]         ;392
00010e  e000              B        |L8.274|
                  |L8.272|
000110  e00c              B        |L8.300|
                  |L8.274|
000112  4408              ADD      r0,r0,r1              ;392
000114  f8ad0006          STRH     r0,[sp,#6]            ;392
000118  6d38              LDR      r0,[r7,#0x50]         ;393
00011a  f06f417f          MVN      r1,#0xff000000        ;393
00011e  1a08              SUBS     r0,r1,r0              ;393
000120  f7fffffe          BL       LCD_SetColor
000124  2100              MOVS     r1,#0                 ;394
000126  4668              MOV      r0,sp                 ;394
000128  f7fffffe          BL       GUI_DrawFocusRect
                  |L8.300|
00012c  2000              MOVS     r0,#0                 ;399
00012e  e77b              B        |L8.40|
;;;401    
                          ENDP


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

                  LISTBOX_SetSel PROC
;;;1039   */
;;;1040   void LISTBOX_SetSel (LISTBOX_Handle hObj, int NewSel) {
000000  e92d41f0          PUSH     {r4-r8,lr}
000004  0006              MOVS     r6,r0
000006  460c              MOV      r4,r1
;;;1041     if (hObj) {
000008  d03a              BEQ      |L9.128|
;;;1042       LISTBOX_Obj* pObj;
;;;1043       int MaxSel;
;;;1044       WM_LOCK();
;;;1045       pObj = LISTBOX_H2P(hObj);
00000a  4630              MOV      r0,r6
00000c  f7fffffe          BL       GUI_ALLOC_h2p
000010  4605              MOV      r5,r0
000012  3028              ADDS     r0,r0,#0x28
000014  4680              MOV      r8,r0
000016  f7fffffe          BL       GUI_ARRAY_GetNumItems
;;;1046       MaxSel = LISTBOX__GetNumItems(pObj);
;;;1047       MaxSel = MaxSel ? MaxSel - 1 : 0;
00001a  b100              CBZ      r0,|L9.30|
00001c  1e40              SUBS     r0,r0,#1
                  |L9.30|
;;;1048       if (NewSel > MaxSel) {
00001e  4284              CMP      r4,r0
000020  dd00              BLE      |L9.36|
;;;1049         NewSel = MaxSel;
000022  4604              MOV      r4,r0
                  |L9.36|
;;;1050       }
;;;1051       if (NewSel < 0) {
;;;1052         NewSel = -1;
000024  f04f37ff          MOV      r7,#0xffffffff
000028  2c00              CMP      r4,#0                 ;1051
00002a  db09              BLT      |L9.64|
;;;1053       } else {
;;;1054         WM_HMEM hItem = GUI_ARRAY_GethItem(&pObj->ItemArray, NewSel);
00002c  4621              MOV      r1,r4
00002e  4640              MOV      r0,r8
000030  f7fffffe          BL       GUI_ARRAY_GethItem
;;;1055         if (hItem) {
000034  b128              CBZ      r0,|L9.66|
;;;1056           LISTBOX_ITEM* pItem = (LISTBOX_ITEM*)GUI_ALLOC_h2p(hItem);
000036  f7fffffe          BL       GUI_ALLOC_h2p
;;;1057           if (pItem->Status & LISTBOX_ITEM_DISABLED) {
00003a  7900              LDRB     r0,[r0,#4]
00003c  0780              LSLS     r0,r0,#30
00003e  d500              BPL      |L9.66|
                  |L9.64|
;;;1058             NewSel = -1;
000040  463c              MOV      r4,r7
                  |L9.66|
;;;1059           }
;;;1060         }
;;;1061       }
;;;1062       if (NewSel != pObj->Sel) {
000042  f9b57072          LDRSH    r7,[r5,#0x72]
000046  42a7              CMP      r7,r4
000048  d01a              BEQ      |L9.128|
;;;1063         int OldSel;
;;;1064         OldSel    = pObj->Sel;
;;;1065         pObj->Sel = NewSel;
00004a  f8a54072          STRH     r4,[r5,#0x72]
;;;1066         if (_UpdateScrollPos(hObj, pObj)) {
00004e  4629              MOV      r1,r5
000050  4630              MOV      r0,r6
000052  f7fffffe          BL       _UpdateScrollPos
000056  b118              CBZ      r0,|L9.96|
;;;1067           LISTBOX__InvalidateInsideArea(hObj);
000058  4630              MOV      r0,r6
00005a  f7fffffe          BL       LISTBOX__InvalidateInsideArea
00005e  e009              B        |L9.116|
                  |L9.96|
;;;1068         } else {
;;;1069           LISTBOX__InvalidateItem(hObj, pObj, OldSel);
000060  463a              MOV      r2,r7
000062  4629              MOV      r1,r5
000064  4630              MOV      r0,r6
000066  f7fffffe          BL       LISTBOX__InvalidateItem
;;;1070           LISTBOX__InvalidateItem(hObj, pObj, NewSel);
00006a  4622              MOV      r2,r4
00006c  4629              MOV      r1,r5
00006e  4630              MOV      r0,r6
000070  f7fffffe          BL       LISTBOX__InvalidateItem
                  |L9.116|
;;;1071         }
;;;1072         _NotifyOwner(hObj, WM_NOTIFICATION_SEL_CHANGED);
000074  4630              MOV      r0,r6
000076  e8bd41f0          POP      {r4-r8,lr}
00007a  2104              MOVS     r1,#4
00007c  f7ffbffe          B.W      _NotifyOwner
                  |L9.128|
;;;1073       }
;;;1074       WM_UNLOCK();
;;;1075     }

⌨️ 快捷键说明

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