MASM & GDI

Тема в разделе "WASM.BEGINNERS", создана пользователем Wereww, 19 май 2010.

  1. Wereww

    Wereww Дмитрий

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    55
    Что-то я непойму ребята, собрал исходник, а он вообще не фурычит, толи лыжи не едут....

    Есть несколько вопросов: создаю контролы в ресурсе, в NewPosition позиция скролбара, при этом в обработке WM_PAINT где бы я его не вставлял - он всегда равен нулю !!?, а например при вызове SetControlsPosition NewPosition нормально работает (тому пример второй скролбар), и еще меня вгоняют в ступор строки при обработке WM_HSCROLL:

    Код (Text):
    1.                         mov eax,aParam
    2.                         and eax,0FFFFh
    Даже поставил RoundedPath из другого исходника, добавил параметр и передавал туда NewPosition, один хрен, картинка остаётся неподвижной а второй скролбар нагло шевелиться...Объясните - почему ?....

    Код (Text):
    1.         .486
    2.         .model flat,stdcall
    3.         option casemap:none   ; case sensitive
    4.    
    5. ; ####################################################
    6.    
    7.         include \masm32\include\windows.inc
    8.         include \masm32\include\user32.inc
    9.         include \masm32\include\kernel32.inc
    10.         include \masm32\include\comctl32.incinclude \masm32\include\gdi32.inc
    11.         include \masm32\include\comdlg32.inc
    12.         include \masm32\include\shell32.inc
    13.  
    14.         includelib \masm32\lib\user32.lib
    15.         includelib \masm32\lib\kernel32.lib
    16.         includelib \masm32\lib\comctl32.lib
    17.         includelib \masm32\lib\gdi32.lib
    18.         includelib \masm32\lib\comdlg32.lib
    19.         includelib \masm32\lib\shell32.lib
    20.    
    21. ; ####################################################
    22.  
    23.         ID_SCROLLBAR1 equ 301
    24.         ID_SCROLLBAR2 equ 302
    25.  
    26. ; --------------------------------------------------------
    27.    
    28.         ControlsMadness PROTO :DWORD,:DWORD,:DWORD,:DWORD
    29.         SetControlsPosition PROTO :DWORD
    30.         RoundedPath PROTO :DWORD, :DWORD
    31.    
    32. ; --------------------------------------------------------
    33.    
    34. .data
    35.         hInstance dd ?
    36.  
    37.         NewPosition dd 0
    38.         NPosPaint dd 0
    39.         hPen          dd 0
    40.         oldPen        dd 0
    41.         PathRound     db "Rounded Path",0
    42.    
    43.         dlgname db "CONTROLS",0
    44.  
    45. .data?
    46.         icex INITCOMMONCONTROLSEX <> ;structure for Controls
    47.    
    48. ; ###############################################################
    49.    
    50. .code
    51.    
    52. start:
    53.    
    54. ; ###############################################################
    55.    
    56.         invoke GetModuleHandle,NULL
    57.         mov hInstance,eax
    58.         mov icex.dwSize,sizeof INITCOMMONCONTROLSEX
    59.         mov icex.dwICC,0FFFFh
    60.         invoke InitCommonControlsEx,ADDR icex
    61.    
    62. ; ---------------------------------------------
    63. ;   Call the dialog box stored in resource file
    64. ; ---------------------------------------------
    65.         invoke DialogBoxParam,hInstance,ADDR dlgname,0,ADDR ControlsMadness,0
    66.         invoke ExitProcess,eax
    67.    
    68. ; ###############################################################
    69.    
    70. ControlsMadness proc hWin:DWORD,uMsg:DWORD,aParam:DWORD,bParam:DWORD
    71.    
    72.     LOCAL hDC:DWORD
    73.     LOCAL rct:RECT
    74.     LOCAL ps:PAINTSTRUCT
    75.    
    76.         .if uMsg == WM_INITDIALOG
    77.                     invoke SendDlgItemMessage,hWin,ID_SCROLLBAR1,SBM_SETRANGE,0,500
    78.                     invoke SendDlgItemMessage,hWin,ID_SCROLLBAR2,SBM_SETRANGE,0,100
    79.                     invoke SetFocus,hWin
    80.    
    81.         .elseif uMsg == WM_COMMAND
    82.                  
    83.         .ELSEIF uMsg == WM_PAINT
    84.                 invoke BeginPaint,hWin,ADDR ps
    85.                 mov hDC,eax
    86.                 ;-----------------------------------
    87.                 invoke SetMapMode,hDC,MM_ANISOTROPIC
    88.                 invoke SetWindowExtEx,hDC,100,100,0
    89.                 invoke GetClientRect,hWin,ADDR rct
    90.                 invoke SetViewportExtEx,hDC,rct.right,rct.bottom,0
    91.                 ;-------------------------------------------------
    92.                 invoke RoundedPath, hDC, NewPosition
    93.    
    94.         .elseif uMsg == WM_CLOSE
    95.                         invoke EndDialog,hWin,NULL
    96.    
    97.         .elseif uMsg == WM_HSCROLL
    98.                         mov eax,aParam
    99.                         and eax,0FFFFh  
    100.                         .if eax == TB_THUMBPOSITION ; Same as SB_THUMBPOSITION
    101.                             mov eax,aParam
    102.                             shr eax,16
    103.                             mov NewPosition,eax
    104.                             invoke SetControlsPosition,hWin
    105.                         .elseif eax == TB_THUMBTRACK ; Same as SB_THUMBTRACK
    106.                             mov eax,aParam
    107.                             shr eax,16
    108.                             mov NewPosition,eax
    109.                             invoke SetControlsPosition,hWin
    110.                         .elseif eax == SB_LINEUP
    111.                             .if NewPosition != 0
    112.                                 dec NewPosition
    113.                             .endif
    114.                             invoke SetControlsPosition,hWin
    115.                         .elseif eax == SB_LINEDOWN
    116.                             .if NewPosition != 100
    117.                                 inc NewPosition
    118.                             .endif
    119.                             invoke SetControlsPosition,hWin
    120.                         .endif
    121.         .endif
    122.    
    123.         xor eax,eax
    124.         ret
    125.    
    126. ControlsMadness endp
    127.    
    128. ; ###############################################################
    129.    
    130. SetControlsPosition proc hWin:DWORD  
    131.         invoke SendDlgItemMessage,hWin,ID_SCROLLBAR1,SBM_SETPOS,NewPosition,TRUE
    132.         invoke SendDlgItemMessage,hWin,ID_SCROLLBAR2,SBM_SETPOS,NewPosition,TRUE  
    133.         ret
    134. SetControlsPosition endp
    135.    
    136. ; ###############################################################
    137.    
    138. RoundedPath proc hDC:DWORD, pCOORD:DWORD
    139.  
    140.     LOCAL lb:LOGBRUSH
    141.  
    142.         mov lb.lbStyle,BS_SOLID
    143.         mov lb.lbColor,00000FFh
    144.         mov lb.lbHatch,0
    145.         invoke ExtCreatePen,PS_SOLID or PS_GEOMETRIC or PS_ENDCAP_ROUND or PS_JOIN_ROUND,10,ADDR lb,0,0
    146.         mov hPen,eax
    147.         invoke SelectObject,hDC,hPen
    148.         mov oldPen,eax
    149.         ;-------------------
    150.         ; Build the GDI Path
    151.         ;-------------------
    152.         invoke BeginPath,hDC
    153.         invoke MoveToEx,hDC,10,25,0
    154.         invoke LineTo,hDC,20,pCOORD
    155.         invoke LineTo,hDC,pCOORD,25
    156.         invoke EndPath,hDC
    157.         ;----------------------
    158.         ; Render the built Path
    159.         ;----------------------
    160.         invoke StrokePath,hDC
    161.         invoke DeleteObject,hPen
    162.         ;---------------------------------
    163.         ; Draw black lines inside the Path
    164.         ;---------------------------------
    165.         invoke GetStockObject,BLACK_PEN
    166.         invoke SelectObject,hDC,eax
    167.         invoke MoveToEx,hDC,10,25,0
    168.         invoke LineTo,hDC,20,pCOORD
    169.         invoke LineTo,hDC,pCOORD,25
    170.         ;--------------------------
    171.         ; Describe the type of Path
    172.         ;--------------------------
    173.         invoke TextOut,hDC,11,10,ADDR PathRound,12
    174.         invoke SelectObject,hDC,oldPen
    175.         ret
    176.  
    177. RoundedPath endp
    178.  
    179. ; ########################################################################
    180.    
    181. end start
     
  2. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    133
    Адрес:
    Екатеринбург
    Аты чем то проверил что NewPosition всегда равно нулю?
    Я вот на пример не вижу поле установки контрола комманды которая бы вызывала перерисовку окна, с какой стати тебе придет сообщение WM_PAINT?
     
  3. Wereww

    Wereww Дмитрий

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    55
    Не совсем понял, можно кодом ?
     
  4. Wereww

    Wereww Дмитрий

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    55
    Пробовал, не помогло

    Код (Text):
    1.         invoke SendMessage,hWin,WM_PAINT,NewPosition,0
    2.  
    3.         .ELSEIF uMsg == WM_PAINT
    4.         ...
    5.         invoke RoundedPath, hDC, aParam
     
  5. Wereww

    Wereww Дмитрий

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    55
    Кто-нибудь может подсказать в чём проблема ? все перепробовал, не работает (
     
  6. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    133
    Адрес:
    Екатеринбург
    Код (Text):
    1. SetControlsPosition proc hWin:DWORD  
    2.         invoke SendDlgItemMessage,hWin,ID_SCROLLBAR1,SBM_SETPOS,NewPosition,TRUE
    3.         invoke SendDlgItemMessage,hWin,ID_SCROLLBAR2,SBM_SETPOS,NewPosition,TRUE  
    4.         [b]invoke InvalidateRect,0,1[/b]
    5.         ret
    6. SetControlsPosition endp
    Вот так попробуй
     
  7. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    133
    Адрес:
    Екатеринбург
    Блин нет редактирования
    invoke InvalidateRect,hWin,0,1
     
  8. Wereww

    Wereww Дмитрий

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    55
    Спасибо ) что-то я сразу не сообразил ) теперь все работает )