1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

TabTitle

Тема в разделе "WASM.ENGLISH", создана пользователем dcskm4200, 18 сен 2008.

  1. dcskm4200

    dcskm4200 New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2004
    Сообщения:
    173
    Адрес:
    China
    Hello,all
    the following codes can't show the correct Title.
    Код (Text):
    1. .486
    2. .model flat, stdcall
    3. option casemap :none
    4.  
    5. include \masm32\include\windows.inc
    6.  
    7. include \masm32\include\kernel32.inc
    8. include \masm32\include\user32.inc
    9. include \masm32\include\masm32.inc
    10. include \masm32\include\comctl32.inc
    11. include \masm32\include\advapi32.inc
    12. include \masm32\include\comdlg32.inc
    13. include \masm32\include\gdi32.inc
    14.  
    15. includelib \masm32\lib\kernel32.lib
    16. includelib \masm32\lib\user32.lib
    17. includelib \masm32\lib\masm32.lib
    18. includelib \masm32\lib\comctl32.lib
    19. includelib \masm32\lib\advapi32.lib
    20. includelib \masm32\lib\comdlg32.lib
    21. includelib \masm32\lib\gdi32.lib
    22.  
    23. include \masm32\macros\macros.asm
    24. DlgMain     proto   hWin:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    25. ChildDlgProc1   proto   hWin:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    26. ChildDlgProc2   proto   hWin:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    27.  
    28. .const
    29.     IDD_MAINDLG equ 1001
    30.     IDC_TAB     equ 100
    31.    
    32. .data
    33.    
    34.     TabTitle1   db "DLG_1", 0
    35.     TabTitle2   db "DLG_2", 0
    36.     Child1Name  db "IDD_CHILD1",0       ; lpTemplateName for the first child
    37.     Child2Name  db "IDD_CHILD2",0       ; lpTemplateName for the second child
    38.    
    39. .data?
    40.     hInstance   HINSTANCE   ?
    41.     ItemStruct  TC_ITEM     <?>
    42.     hTab        HWND        ?
    43.    
    44.     Handles LABEL   DWORD          
    45.     Child1hWnd  HWND        ?
    46.     Child2hWnd  HWND        ?
    47.     WhichTabChosen  DWORD       ?      
    48.  
    49. .code
    50.  
    51. start   proc
    52.     invoke  GetModuleHandle, NULL
    53.     mov hInstance, eax
    54.     invoke  DialogBoxParam, hInstance, IDD_MAINDLG, NULL, offset DlgMain, NULL
    55.     invoke  ExitProcess, NULL
    56.     invoke  InitCommonControls
    57.     ret
    58. start endp
    59.  
    60. DlgMain proc USES EBX hWin:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    61.    
    62.     .if uMsg == WM_INITDIALOG
    63.         invoke  GetDlgItem, hWin, IDC_TAB
    64.         mov     hTab, eax
    65.        
    66.         mov ItemStruct.imask,TCIF_TEXT         
    67.         mov ItemStruct.lpReserved1,0           
    68.         mov ItemStruct.lpReserved2,0           
    69.         mov ItemStruct.pszText,OFFSET TabTitle1      
    70.         mov ItemStruct.cchTextMax,sizeof TabTitle1 
    71.         mov ItemStruct.iImage,0            
    72.         mov ItemStruct.lParam,0            
    73.         invoke SendMessage,hTab,TCM_INSERTITEM,0,OFFSET ItemStruct
    74.  
    75.         mov ItemStruct.pszText,OFFSET TabTitle2
    76.         mov ItemStruct.cchTextMax,sizeof TabTitle2
    77.         invoke SendMessage,hTab,TCM_INSERTITEM,1,OFFSET ItemStruct
    78.            
    79.         mov EAX,OFFSET ChildDlgProc1
    80.         invoke CreateDialogParam,hInstance,OFFSET Child1Name,hTab,EAX,0
    81.         mov Child1hWnd,EAX
    82.            
    83.         mov EAX,OFFSET ChildDlgProc2
    84.         invoke CreateDialogParam,hInstance,OFFSET Child2Name,hTab,EAX,0
    85.         mov Child2hWnd,EAX
    86.            
    87.         mov WhichTabChosen,0               
    88.         invoke ShowWindow,Child2hWnd,SW_SHOWDEFAULT ;;==> it still shows TabTitle1
    89.         invoke ShowWindow,Child1hWnd,SW_HIDE
    90.     .elseif uMsg == WM_NOTIFY
    91.         mov eax,lParam                 
    92.         mov eax, (NMHDR PTR [eax]).code        
    93.         .if eax == TCN_SELCHANGE           
    94.             mov ebx,WhichTabChosen         
    95.             mov eax,[Handles+EBX*4]        
    96.             invoke ShowWindow,EAX,SW_HIDE      
    97.             invoke SendMessage,hTab,TCM_GETCURSEL,0,0                                               ; Ok which one is BEING chosen right now?
    98.             mov WhichTabChosen,EAX         
    99.             mov EBX,[Handles+EAX*4]        
    100.             invoke ShowWindow,EBX,SW_SHOWDEFAULT   
    101.         .endif
    102.     .elseif uMsg == WM_CLOSE
    103.         invoke EndDialog, hWin, NULL
    104.     .endif
    105.     xor eax,eax
    106.     ret
    107. DlgMain endp
    108.  
    109. ChildDlgProc1 proc hWin:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    110.    
    111.     m2m Child1hWnd, hWin
    112.     mov eax, uMsg
    113.     .if eax == WM_INITDIALOG
    114.     .elseif eax == WM_CLOSE
    115.         invoke EndDialog, hWin, NULL
    116.     .else
    117.         mov eax, FALSE
    118.         ret
    119.     .endif
    120.     mov eax, TRUE
    121.     ret
    122. ChildDlgProc1 endp
    123.  
    124. ChildDlgProc2 proc hWin:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    125.     m2m Child2hWnd, hWin
    126.     mov eax, uMsg
    127.     .if eax == WM_INITDIALOG
    128.     .elseif eax == WM_CLOSE
    129.         invoke EndDialog, hWin, NULL
    130.     .else
    131.         mov eax, FALSE
    132.         ret
    133.     .endif
    134.     mov eax, TRUE
    135.     ret
    136. ChildDlgProc2 endp
    137.  
    138. end start
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.709
    dcskm4200
    show resource file.
     
  3. dcskm4200

    dcskm4200 New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2004
    Сообщения:
    173
    Адрес:
    China
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.709
    dcskm4200
    Код (Text):
    1. ...
    2. DlgMain proc USES EBX hWin:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    3.  
    4.     .if uMsg == WM_INITDIALOG
    5. ...
    6.         mov Child2hWnd,EAX
    7.            
    8.         mov WhichTabChosen,1                        ;; !!! 0 -> 1
    9.         invoke ShowWindow,Child2hWnd,SW_SHOWDEFAULT ;;==> it still shows TabTitle1
    10.         invoke ShowWindow,Child1hWnd,SW_HIDE
    11.  
    12.         invoke SendMessage,hTab,TCM_SETCURSEL,WhichTabChosen,0      ;; !!! add
    13.  
    14.     .elseif uMsg == WM_NOTIFY
    15. ...
     
  5. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    Код (Text):
    1.         mov WhichTabChosen,0               
    2.         invoke ShowWindow,Child2hWnd,SW_HIDE
    3.         invoke ShowWindow,Child1hWnd,SW_SHOWDEFAULT
    it shows correct for me except first time until tab is clicked. swap SW_HIDE and SW_SHOWDEFAULT in WM_INITDIALOG processing and it works ok
     
  6. dcskm4200

    dcskm4200 New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2004
    Сообщения:
    173
    Адрес:
    China
    Thank you very much!