создаю , создаётся нормально Код (Text): push 0 push [HINST] push 1 push DWORD PTR [ebp+04h] push 200 push 200 push 5 push 5 PUSH WS_CHILD or WS_VISIBLE or TCS_BOTTOM or TCS_HOTTRACK or\ TCS_FOCUSNEVER or WS_CLIPSIBLINGS or WS_CLIPCHILDREN ;or TCS_OWNERDRAWFIXED PUSH OFFSET CPEDT PUSH OFFSET szClassTabControl PUSH 0 CALL CreateWindowExA mov hwnd_tab,EAX обрабатываю сообщения Код (Text): cmp DWORD PTR [ebp+8],WM_NOTIFY je WMNOTIFY jmp defwndproc WMNOTIFY: mov edi,DWORD PTR [ebp+010h];lparam assume edi:ptr NMHDR mov ecx,[edi].code mov eax,[edi].hwndFrom nop .if eax==[hwnd_tab] && ecx==TCN_SELCHANGE ;Tab control invoke SendMessage,hwnd_tab,TCM_GETCURSEL,0,0 invoke MessageBox,0,OFFSET CPEDT,OFFSET CPEDT,0 .endif jmp finish вот тут проблема, както неполучается сделать коректный переход по вкладкам вроде этот код я взял из другова исхочника думал дожнен был работать вот если есть примеры
Это мой любимый контрол. Я юзаю его очень часто, правда уже готовый, из диалога, вот привожу участки кода по созданию и обработке. Инициализация Код (Text): init_tab_dialog proc uses ebx hWin:dword LOCAL ts:TC_ITEM xor ebx,ebx invoke GetDlgItem,hWin,TAB_MAIN mov hTab,eax mov ts.imask,TCIF_TEXT mov ts.lpReserved1,0 mov ts.lpReserved2,0 mov ts.iImage,-1 mov ts.lParam,0 mov ts.pszText,offset TabTitle1 mov ts.cchTextMax,sizeof TabTitle1 invoke SendMessage,hTab,TCM_INSERTITEM,0,addr ts mov ts.pszText,offset TabTitle2 mov ts.cchTextMax,sizeof TabTitle2 invoke SendMessage,hTab,TCM_INSERTITEM,1,addr ts mov ts.pszText,offset TabTitle3 mov ts.cchTextMax,sizeof TabTitle3 invoke SendMessage,hTab,TCM_INSERTITEM,2,addr ts invoke CreateDialogParam,hInstance,DLG_SOCKS,hTab,addr dialog_socks,0 mov hTabDlg[0],eax invoke CreateDialogParam,hInstance,DLG_MAIN_OPT,hTab,addr dialog_options_proc,0 mov hTabDlg[4],eax invoke CreateDialogParam,hInstance,DLG_OPT,hTab,addr dialog_about_proc,0 mov hTabDlg[8],eax ret init_tab_dialog endp Обработка Код (Text): .elseif eax==WM_NOTIFY mov eax,lParam mov eax,[eax].NMHDR.code .if eax==TCN_SELCHANGE ;Tab selection invoke SendMessage,hTab,TCM_GETCURSEL,ebx,ebx .if eax!=SelTab push eax mov eax,SelTab invoke ShowWindow,[hTabDlg+eax*4],SW_HIDE pop eax mov SelTab,eax invoke ShowWindow,[hTabDlg+eax*4],SW_SHOWDEFAULT .endif .endif
Сохранять ebp, ebx, edi, esi не учили? Флаги можешь на место поставить, они не при чём Код (Text): WndProc proc hWin:DWORD, msg:DWORD, wParam:DWORD, lParam:DWORD .if (msg==WM_NOTIFY) mov eax,lParam assume eax:ptr NMHDR mov ecx,hwnd_tab .if [eax].hwndFrom==ecx .if [eax].code==TCN_SELCHANGE ;Tab control invoke SendMessage,hwnd_tab,TCM_GETCURSEL,0,0 invoke MessageBox,0,OFFSET CPEDT,OFFSET CPEDT,0 .endif .endif assume eax:nothing xor eax,eax ;!!!!!! .elseif (msg==WM_CREATE) push hWin call interfejsProc .elseif (msg==WM_DESTROY) push 0 call PostQuitMessage .else invoke DefWindowProc, hWin, msg, wParam, lParam .endif ret WndProc endp interfejsProc proc hParent:DWORD push 0 push [HINST] push 1 push hParent push 200 push 200 push 5 push 5 PUSH WS_CHILD or WS_VISIBLE or TCS_HOTTRACK PUSH OFFSET CPEDT PUSH OFFSET szClassTabControl PUSH 0 CALL CreateWindowExA mov hwnd_tab,EAX mov TC.imask, TCIF_TEXT mov TC.pszText, offset CPEDT mov TC.cchTextMax, sizeof CPEDT invoke SendMessage, hwnd_tab, TCM_INSERTITEM, 0, offset TC mov TC.pszText, offset szClassTabControl mov TC.cchTextMax, sizeof szClassTabControl invoke SendMessage, hwnd_tab, TCM_INSERTITEM, 1, offset TC ret interfejsProc endp
всё дело было в последнем xor eax,eax значит если eax неравен 0 то ошибка видимо возвращается всем спасибо