проблемы с SysTabControl32

Тема в разделе "WASM.WIN32", создана пользователем readme, 12 фев 2006.

  1. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    создаю , создаётся нормально
    Код (Text):
    1.  
    2.         push 0
    3.         push [HINST]
    4.         push 1
    5.         push DWORD PTR [ebp+04h]
    6.         push 200
    7.         push 200
    8.         push 5
    9.         push 5
    10.         PUSH WS_CHILD or WS_VISIBLE or TCS_BOTTOM or TCS_HOTTRACK or\
    11.                  TCS_FOCUSNEVER or WS_CLIPSIBLINGS or WS_CLIPCHILDREN ;or TCS_OWNERDRAWFIXED
    12.         PUSH OFFSET CPEDT
    13.         PUSH OFFSET szClassTabControl
    14.         PUSH 0
    15.         CALL CreateWindowExA
    16.         mov hwnd_tab,EAX
    17.  




    обрабатываю сообщения
    Код (Text):
    1.  
    2.         cmp DWORD PTR [ebp+8],WM_NOTIFY
    3.         je WMNOTIFY
    4.         jmp defwndproc
    5. WMNOTIFY:
    6.         mov edi,DWORD PTR [ebp+010h];lparam
    7.         assume edi:ptr NMHDR
    8.         mov ecx,[edi].code
    9.         mov eax,[edi].hwndFrom
    10.         nop
    11.         .if eax==[hwnd_tab] && ecx==TCN_SELCHANGE     ;Tab control
    12.         invoke SendMessage,hwnd_tab,TCM_GETCURSEL,0,0
    13.         invoke MessageBox,0,OFFSET CPEDT,OFFSET CPEDT,0
    14.         .endif
    15. jmp finish
    16.  


    вот тут проблема, както неполучается сделать коректный переход по вкладкам вроде этот код я взял из другова исхочника думал дожнен был работать

    вот если есть примеры
     
  2. Guest

    Guest Guest

    Публикаций:
    0
    Это мой любимый контрол. Я юзаю его очень часто, правда уже готовый, из диалога, вот привожу участки кода по созданию и обработке.

    Инициализация
    Код (Text):
    1.  
    2. init_tab_dialog proc uses ebx   hWin:dword
    3. LOCAL   ts:TC_ITEM
    4.  
    5.     xor ebx,ebx
    6.    
    7.     invoke  GetDlgItem,hWin,TAB_MAIN
    8.     mov hTab,eax
    9.    
    10.     mov ts.imask,TCIF_TEXT
    11.     mov ts.lpReserved1,0
    12.     mov ts.lpReserved2,0
    13.     mov ts.iImage,-1
    14.     mov ts.lParam,0
    15.    
    16.     mov ts.pszText,offset TabTitle1
    17.     mov ts.cchTextMax,sizeof TabTitle1
    18.     invoke  SendMessage,hTab,TCM_INSERTITEM,0,addr ts
    19.    
    20.     mov ts.pszText,offset TabTitle2
    21.     mov ts.cchTextMax,sizeof TabTitle2
    22.     invoke  SendMessage,hTab,TCM_INSERTITEM,1,addr ts
    23.    
    24.     mov ts.pszText,offset TabTitle3
    25.     mov ts.cchTextMax,sizeof TabTitle3
    26.     invoke  SendMessage,hTab,TCM_INSERTITEM,2,addr ts  
    27.    
    28.     invoke  CreateDialogParam,hInstance,DLG_SOCKS,hTab,addr dialog_socks,0
    29.     mov hTabDlg[0],eax
    30.     invoke  CreateDialogParam,hInstance,DLG_MAIN_OPT,hTab,addr dialog_options_proc,0
    31.     mov hTabDlg[4],eax
    32.     invoke  CreateDialogParam,hInstance,DLG_OPT,hTab,addr dialog_about_proc,0
    33.     mov hTabDlg[8],eax
    34.    
    35.     ret
    36. init_tab_dialog endp
    37.  
    38.  


    Обработка
    Код (Text):
    1.  
    2.     .elseif eax==WM_NOTIFY
    3.         mov eax,lParam
    4.         mov eax,[eax].NMHDR.code
    5.         .if eax==TCN_SELCHANGE
    6.             ;Tab selection
    7.             invoke SendMessage,hTab,TCM_GETCURSEL,ebx,ebx
    8.             .if eax!=SelTab
    9.                 push    eax
    10.                 mov eax,SelTab
    11.                 invoke  ShowWindow,[hTabDlg+eax*4],SW_HIDE
    12.                 pop eax
    13.                 mov SelTab,eax
    14.                 invoke  ShowWindow,[hTabDlg+eax*4],SW_SHOWDEFAULT
    15.             .endif
    16.         .endif
    17.  
     
  3. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
  4. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Сохранять ebp, ebx, edi, esi не учили?

    Флаги можешь на место поставить, они не при чём


    Код (Text):
    1. WndProc proc hWin:DWORD, msg:DWORD, wParam:DWORD, lParam:DWORD
    2.  
    3.     .if (msg==WM_NOTIFY)
    4.         mov     eax,lParam
    5.         assume  eax:ptr NMHDR
    6.         mov     ecx,hwnd_tab
    7.         .if     [eax].hwndFrom==ecx
    8.             .if     [eax].code==TCN_SELCHANGE   ;Tab control
    9.                 invoke  SendMessage,hwnd_tab,TCM_GETCURSEL,0,0
    10.                 invoke  MessageBox,0,OFFSET CPEDT,OFFSET CPEDT,0
    11.             .endif
    12.         .endif
    13.         assume eax:nothing
    14.         xor     eax,eax              ;!!!!!!
    15.    
    16.     .elseif (msg==WM_CREATE)
    17.         push    hWin
    18.         call    interfejsProc
    19.        
    20.     .elseif (msg==WM_DESTROY)
    21.         push    0
    22.         call    PostQuitMessage
    23.        
    24.     .else
    25.         invoke DefWindowProc, hWin, msg, wParam, lParam
    26.     .endif
    27.  
    28.         ret
    29. WndProc endp
    30.  
    31.  
    32. interfejsProc proc hParent:DWORD
    33.     push    0
    34.     push    [HINST]
    35.     push    1
    36.     push    hParent
    37.     push    200
    38.     push    200
    39.     push    5
    40.     push    5
    41.     PUSH    WS_CHILD or WS_VISIBLE or TCS_HOTTRACK
    42.     PUSH    OFFSET CPEDT
    43.     PUSH    OFFSET szClassTabControl
    44.     PUSH    0
    45.     CALL    CreateWindowExA
    46.     mov     hwnd_tab,EAX
    47.     mov     TC.imask, TCIF_TEXT
    48.     mov     TC.pszText, offset CPEDT
    49.     mov     TC.cchTextMax, sizeof CPEDT
    50.  
    51.     invoke  SendMessage, hwnd_tab, TCM_INSERTITEM, 0, offset TC
    52.     mov     TC.pszText, offset szClassTabControl
    53.     mov     TC.cchTextMax, sizeof szClassTabControl
    54.     invoke  SendMessage, hwnd_tab, TCM_INSERTITEM, 1, offset TC
    55.     ret      
    56. interfejsProc endp
     
  5. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    всё дело было в последнем xor eax,eax

    значит если eax неравен 0 то ошибка видимо возвращается

    всем спасибо