📄 listbox.txt
字号:
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 + -