📄 framewin.txt
字号:
00005c 4668 MOV r0,sp ;354
00005e c00e STM r0!,{r1-r3} ;354
000060 f8ad7004 STRH r7,[sp,#4] ;355
000064 4668 MOV r0,sp ;356
000066 47b0 BLX r6 ;356
|L9.104|
;;;385 case WM_GET_INSIDE_RECT: /* This should not be passed to parent ... (We do not want parents coordinates)*/
;;;386 case WM_GET_ID: /* This should not be passed to parent ... (Possible recursion problem)*/
;;;387 case WM_GET_CLIENT_WINDOW: /* return handle to client window. For most windows, there is no seperate client window, so it is the same handle */
;;;388 WM_DefaultProc(pMsg);
;;;389 return; /* We are done ! */
;;;390 }
;;;391 /* Call user callback. Note that the user callback gets the handle of the Framewindow itself, NOT the Client. */
;;;392 if (cb) {
;;;393 pMsg->hWin = hParent;
;;;394 (*cb)(pMsg);
;;;395 } else {
;;;396 WM_DefaultProc(pMsg);
;;;397 }
;;;398 }
000068 e8bd83fe POP {r1-r9,pc}
|L9.108|
00006c 68a0 LDR r0,[r4,#8] ;360
00006e 2800 CMP r0,#0 ;360
000070 d0fa BEQ |L9.104|
000072 f9b5005e LDRSH r0,[r5,#0x5e] ;361
000076 b120 CBZ r0,|L9.130|
000078 42b8 CMP r0,r7 ;361
00007a d002 BEQ |L9.130|
00007c f7fffffe BL WM_SetFocus
000080 e004 B |L9.140|
|L9.130|
000082 4638 MOV r0,r7 ;364
000084 f7fffffe BL WM_SetFocusOnNextChild
000088 f8a5005e STRH r0,[r5,#0x5e] ;364
|L9.140|
00008c 2000 MOVS r0,#0 ;366
|L9.142|
00008e 60a0 STR r0,[r4,#8] ;366
000090 e7ea B |L9.104|
|L9.146|
000092 4621 MOV r1,r4 ;370
000094 4640 MOV r0,r8 ;370
000096 b003 ADD sp,sp,#0xc ;370
000098 e8bd43f0 POP {r4-r9,lr} ;370
00009c f7ffbffe B.W WIDGET_HandleActive
|L9.160|
0000a0 68a0 LDR r0,[r4,#8] ;373
0000a2 6841 LDR r1,[r0,#4] ;373
0000a4 2900 CMP r1,#0 ;373
0000a6 dd08 BLE |L9.186|
0000a8 6800 LDR r0,[r0,#0] ;374
0000aa 2809 CMP r0,#9 ;375
0000ac d105 BNE |L9.186|
0000ae 4638 MOV r0,r7 ;377
0000b0 f7fffffe BL WM_SetFocusOnNextChild
0000b4 f8a5005e STRH r0,[r5,#0x5e] ;377
0000b8 e7d6 B |L9.104|
|L9.186|
0000ba b13e CBZ r6,|L9.204|
0000bc f8a48004 STRH r8,[r4,#4] ;393
0000c0 4620 MOV r0,r4 ;394
0000c2 46b4 MOV r12,r6 ;394
0000c4 b003 ADD sp,sp,#0xc ;394
0000c6 e8bd43f0 POP {r4-r9,lr} ;394
0000ca 4760 BX r12 ;394
|L9.204|
0000cc 4620 MOV r0,r4 ;396
0000ce e8bd43fe POP {r1-r9,lr} ;396
0000d2 f7ffbffe B.W WM_DefaultProc
;;;399
ENDP
AREA ||i._FRAMEWIN_Callback||, CODE, READONLY, ALIGN=2
_FRAMEWIN_Callback PROC
;;;245 */
;;;246 static void _FRAMEWIN_Callback (WM_MESSAGE *pMsg) {
000000 e92d41f0 PUSH {r4-r8,lr}
;;;247 FRAMEWIN_Handle hWin = (FRAMEWIN_Handle)(pMsg->hWin);
000004 f9b06004 LDRSH r6,[r0,#4]
000008 4605 MOV r5,r0 ;246
00000a b088 SUB sp,sp,#0x20 ;246
;;;248 FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hWin);
00000c 4630 MOV r0,r6
00000e f7fffffe BL GUI_ALLOC_h2p
000012 4604 MOV r4,r0
;;;249 GUI_RECT* pRect = (GUI_RECT*)(pMsg->Data.p);
;;;250 POSITIONS Pos;
;;;251 GUI_HOOK* pHook;
;;;252 /* Call hook functions */
;;;253 for (pHook = pObj->pFirstHook; pHook; pHook = pHook->pNext) {
000014 f8d58008 LDR r8,[r5,#8]
000018 6e47 LDR r7,[r0,#0x64]
00001a e005 B |L10.40|
|L10.28|
;;;254 int r;
;;;255 r = (*pHook->pHookFunc)(pMsg);
00001c 6879 LDR r1,[r7,#4]
00001e 4628 MOV r0,r5
000020 4788 BLX r1
;;;256 if (r) {
000022 2800 CMP r0,#0
000024 d128 BNE |L10.120|
000026 683f LDR r7,[r7,#0] ;253
|L10.40|
000028 2f00 CMP r7,#0 ;253
00002a d1f7 BNE |L10.28|
;;;257 return; /* Message handled */
;;;258 }
;;;259 }
;;;260 switch (pMsg->MsgId) {
00002c 6828 LDR r0,[r5,#0]
00002e 2817 CMP r0,#0x17
000030 d045 BEQ |L10.190|
000032 dc32 BGT |L10.154|
000034 280d CMP r0,#0xd
000036 d075 BEQ |L10.292|
000038 dc21 BGT |L10.126|
00003a 280b CMP r0,#0xb
00003c d071 BEQ |L10.290|
00003e 280c CMP r0,#0xc
000040 d13c BNE |L10.188|
000042 68ad LDR r5,[r5,#8]
000044 2d00 CMP r5,#0
000046 d017 BEQ |L10.120|
000048 7a28 LDRB r0,[r5,#8]
00004a 2800 CMP r0,#0
00004c d014 BEQ |L10.120|
00004e f8b4005c LDRH r0,[r4,#0x5c]
000052 0700 LSLS r0,r0,#28
000054 d402 BMI |L10.92|
000056 4630 MOV r0,r6
000058 f7fffffe BL WM_SetFocus
|L10.92|
00005c 4630 MOV r0,r6
00005e f7fffffe BL WM_BringToTop
000062 f8b4005c LDRH r0,[r4,#0x5c]
000066 06c0 LSLS r0,r0,#27
000068 d506 BPL |L10.120|
00006a 4849 LDR r0,|L10.400|
00006c 4629 MOV r1,r5
00006e f9b02000 LDRSH r2,[r0,#0] ; FRAMEWIN__MinVisibility
000072 4630 MOV r0,r6
000074 f7fffffe BL WM_SetCaptureMove
|L10.120|
;;;261 case WM_HANDLE_DIALOG_STATUS:
;;;262 if (pMsg->Data.p) { /* set pointer to Dialog status */
;;;263 pObj->pDialogStatus = (WM_DIALOG_STATUS*)pMsg->Data.p;
;;;264 } else { /* return pointer to Dialog status */
;;;265 pMsg->Data.p = pObj->pDialogStatus;
;;;266 }
;;;267 return;
;;;268 case WM_PAINT:
;;;269 _Paint(pObj);
;;;270 break;
;;;271 case WM_TOUCH:
;;;272 _OnTouch(hWin, pObj, pMsg);
;;;273 return; /* Return here ... Message handled */
;;;274 case WM_GET_INSIDE_RECT:
;;;275 FRAMEWIN__CalcPositions(pObj, &Pos);
;;;276 *pRect = Pos.rClient;
;;;277 return; /* Return here ... Message handled */
;;;278 case WM_GET_CLIENT_WINDOW: /* return handle to client window. For most windows, there is no seperate client window, so it is the same handle */
;;;279 pMsg->Data.v = (int)pObj->hClient;
;;;280 return; /* Return here ... Message handled */
;;;281 case WM_NOTIFY_PARENT:
;;;282 if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) {
;;;283 WM_MESSAGE Msg;
;;;284 Msg.hWinSrc = hWin;
;;;285 Msg.Data = pMsg->Data;
;;;286 Msg.MsgId = WM_NOTIFY_PARENT_REFLECTION;
;;;287 WM_SendMessage(pMsg->hWinSrc, &Msg);
;;;288 }
;;;289 return;
;;;290 case WM_SET_FOCUS: /* We have received or lost focus */
;;;291 if (pMsg->Data.v == 1) {
;;;292 if (WM_IsWindow(pObj->hFocussedChild)) {
;;;293 WM_SetFocus(pObj->hFocussedChild);
;;;294 } else {
;;;295 pObj->hFocussedChild = WM_SetFocusOnNextChild(pObj->hClient);
;;;296 }
;;;297 FRAMEWIN_SetActive(hWin, 1);
;;;298 pMsg->Data.v = 0; /* Focus could be accepted */
;;;299 } else {
;;;300 FRAMEWIN_SetActive(hWin, 0);
;;;301 }
;;;302 return;
;;;303 case WM_TOUCH_CHILD:
;;;304 /* If a child of this framewindow has been touched and the frame window was not active,
;;;305 the framewindow will receive the focus.
;;;306 */
;;;307 if (!(pObj->Flags & FRAMEWIN_SF_ACTIVE)) {
;;;308 const WM_MESSAGE * pMsgOrg;
;;;309 const GUI_PID_STATE * pState;
;;;310 pMsgOrg = (const WM_MESSAGE*)pMsg->Data.p; /* The original touch message */
;;;311 pState = (const GUI_PID_STATE*)pMsgOrg->Data.p;
;;;312 if (pState) { /* Message may not have a valid pointer (moved out) ! */
;;;313 if (pState->Pressed) {
;;;314 WM_SetFocus(hWin);
;;;315 }
;;;316 }
;;;317 }
;;;318 break;
;;;319 case WM_NOTIFY_CHILD_HAS_FOCUS:
;;;320 _OnChildHasFocus(hWin, pObj, pMsg);
;;;321 break;
;;;322 case WM_DELETE:
;;;323 GUI_DEBUG_LOG("FRAMEWIN: _FRAMEWIN_Callback(WM_DELETE)\n");
;;;324 GUI_ALLOC_FreePtr(&pObj->hText);
;;;325 break;
;;;326 }
;;;327 /* Let widget handle the standard messages */
;;;328 if (WIDGET_HandleActive(hWin, pMsg) == 0) {
;;;329 return;
;;;330 }
;;;331 WM_DefaultProc(pMsg);
;;;332 }
000078 b008 ADD sp,sp,#0x20
00007a e8bd81f0 POP {r4-r8,pc}
|L10.126|
00007e 280f CMP r0,#0xf ;260
000080 d019 BEQ |L10.182|
000082 2814 CMP r0,#0x14 ;260
000084 d17a BNE |L10.380|
000086 a903 ADD r1,sp,#0xc ;275
000088 4620 MOV r0,r4 ;275
00008a f7fffffe BL FRAMEWIN__CalcPositions
00008e 2208 MOVS r2,#8 ;276
000090 a904 ADD r1,sp,#0x10 ;276
000092 4640 MOV r0,r8 ;276
000094 f7fffffe BL __aeabi_memcpy
|L10.152|
000098 e7ee B |L10.120|
|L10.154|
00009a 281f CMP r0,#0x1f ;260
00009c d021 BEQ |L10.226|
00009e 2821 CMP r0,#0x21 ;260
0000a0 d04d BEQ |L10.318|
0000a2 2826 CMP r0,#0x26 ;260
0000a4 d00e BEQ |L10.196|
0000a6 282a CMP r0,#0x2a ;260
0000a8 d168 BNE |L10.380|
0000aa 68a8 LDR r0,[r5,#8] ;262
0000ac b108 CBZ r0,|L10.178|
0000ae 6620 STR r0,[r4,#0x60] ;263
0000b0 e7e2 B |L10.120|
|L10.178|
0000b2 6e20 LDR r0,[r4,#0x60] ;265
0000b4 e02d B |L10.274|
|L10.182|
0000b6 4620 MOV r0,r4 ;269
0000b8 f7fffffe BL _Paint
|L10.188|
0000bc e05e B |L10.380|
|L10.190|
0000be f9b4004c LDRSH r0,[r4,#0x4c] ;279
0000c2 e026 B |L10.274|
|L10.196|
0000c4 68a8 LDR r0,[r5,#8] ;282
0000c6 2802 CMP r0,#2 ;282
0000c8 d1d6 BNE |L10.120|
0000ca f8ad6006 STRH r6,[sp,#6] ;284
0000ce 68a8 LDR r0,[r5,#8] ;285
0000d0 9002 STR r0,[sp,#8] ;286
0000d2 2027 MOVS r0,#0x27 ;286
0000d4 9000 STR r0,[sp,#0] ;287
0000d6 f9b50006 LDRSH r0,[r5,#6] ;287
0000da 4669 MOV r1,sp ;287
0000dc f7fffffe BL WM_SendMessage
0000e0 e7ca B |L10.120|
|L10.226|
0000e2 68a8 LDR r0,[r5,#8] ;291
0000e4 2801 CMP r0,#1 ;291
0000e6 d116 BNE |L10.278|
0000e8 f9b4005e LDRSH r0,[r4,#0x5e] ;292
0000ec f7fffffe BL WM_IsWindow
0000f0 b120 CBZ r0,|L10.252|
0000f2 f9b4005e LDRSH r0,[r4,#0x5e] ;293
0000f6 f7fffffe BL WM_SetFocus
0000fa e005 B |L10.264|
|L10.252|
0000fc f9b4004c LDRSH r0,[r4,#0x4c] ;295
000100 f7fffffe BL WM_SetFocusOnNextChild
000104 f8a4005e STRH r0,[r4,#0x5e] ;295
|L10.264|
000108 2101 MOVS r1,#1 ;297
00010a 4630 MOV r0,r6 ;297
00010c f7fffffe BL FRAMEWIN_SetActive
000110 2000 MOVS r0,#0 ;298
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -