Разные программы на GDI+

Тема в разделе "WASM.GDI+", создана пользователем Mikl___, 7 янв 2025.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.837

    Рисуем линии

    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. ColorsGreen     equ 0FF00FF00h;прозрачный - красный - зеленый - синий
    4. ColorsBlack     equ 0FF000000h
    5. ColorsYellow    equ 0FFFFFF00h
    6. ColorsRed equ 0FFFF0000h
    7. UnitWorld equ 0
    8. PenAlignmentCenter equ 0
    9. PenAlignmentInset equ 1
    10. LineCapRoundAnchor equ 12h
    11. LineCapArrowAnchor equ 14h
    12. LineJoinBevel equ 1
    13. .code
    14. WinMain proc
    15. local msg:MSG
    16. ;инициализация библиотеки GDIPLUS
    17. invoke GdiplusStartup,&gdiplusToken,&gsi,0
    18. xor ebx,ebx
    19. mov esi,IMAGE_BASE
    20. invoke LoadCursorFromFileA,&FileName
    21. mov edi,offset ClassName
    22. push rax    ;hIconSm
    23. push rdi    ;lpszClassName
    24. push rbx    ;lpszMenuName
    25. push COLOR_WINDOW  ;hbrBackground
    26. push rax    ;hCursor
    27. push rax       ;hIcon
    28. push rsi    ;hInstance
    29. push rbx       ;cbClsExtra & cbWndExtra
    30. pushaddr WndProc     ;lpfnWndProc
    31.       push sizeof WNDCLASSEX;cbSize & style
    32. invoke RegisterClassExA,esp ;addr WNDCLASSEX
    33. push rbx
    34. push rsi ;rsi=400000h
    35. shl esi,9 ;rsi=CW_USEDEFAULT
    36. push rbx
    37. push rbx
    38. push 400
    39. push 400
    40. push rsi
    41. push rsi
    42. sub esp,20h
    43.     invoke CreateWindowExA,WS_EX_TOOLWINDOW,edi,edi,WS_OVERLAPPEDWINDOW or WS_VISIBLE
    44.     lea edi,msg
    45. @@:    invoke GetMessageA,edi,NULL,0,0
    46. invoke DispatchMessageA,edi
    47.         jmp @b
    48. WinMain endp
    49. WndProc proc hWnd:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD
    50. local ps:PAINTSTRUCT
    51.       mov hWnd,rcx
    52.       cmp edx,WM_DESTROY
    53.       je wmDESTROY
    54.       cmp edx,WM_CREATE
    55.       je wmCREATE
    56. cmp edx,WM_PAINT
    57. je wmPAINT
    58.         leave
    59.         jmp NtdllDefWindowProc_
    60. wmDESTROY:;уничтожить перья
    61. invoke GdipDeletePen,nativePen
    62. invoke GdipDeletePen,blackPen
    63. invoke GdipDeletePen,greenPen
    64.         invoke GdipDeletePath,path
    65. ;уничтожить объект GDI+
    66. invoke GdipDeleteGraphics,graphics
    67. mov ecx,gdiplusToken
    68. invoke GdiplusShutdown
    69. invoke RtlExitUserProcess,NULL
    70. wmPAINT:invoke BeginPaint,hWnd,&ps
    71. ;зеленая линия
    72. invoke GdipDrawLineI,graphics,nativePen,40,40, 200, 100 ;x1,y1,x2,y2
    73. ;"Странная" линия
    74. invoke GdipDrawLineI,graphics,greenPen,230,200,300,150
    75. invoke GdipDrawLineI,graphics,blackPen,230,200,300,150
    76. ;Прямоугольник с выравниванием линии по центру
    77. invoke GdipDrawRectangleI,graphics,greenPen,210,220,100,100
    78. invoke GdipDrawRectangleI,graphics,blackPen,210,220,100,100
    79. ;Прямоугольник с выравниванием линии по краю
    80. invoke GdipSetPenMode,greenPen,PenAlignmentInset
    81. invoke GdipDrawRectangleI,graphics,greenPen,250,250,100,100
    82. invoke GdipDrawRectangleI,graphics,blackPen,250,250,100,100
    83. ;Стрелка
    84. invoke GdipDrawLineI,graphics,hPen,12,92,60,80
    85. ;Соединение линий
    86.         invoke GdipAddPathLineI,path,10,200,100,200
    87. invoke GdipAddPathLineI,path,100,200,100,300
    88. invoke GdipAddPathLineI,path,100,300,150,300
    89. invoke GdipSetPenLineJoin,hPen,LineJoinBevel
    90. invoke GdipDrawPath,graphics,hPen,path
    91. ;Прерывистая линия
    92.         invoke GdipDrawLineI,graphics,hPen0,100,50,200,50
    93. invoke GdipDrawLineI,graphics,hPen0,100,70,300,70
    94. ;------------------------------------------------------------
    95. invoke EndPaint,hWnd,&ps
    96. jmp wmBYE
    97. wmCREATE:invoke GdipCreateFromHWND,hWnd,&graphics
    98. ;------------------------------------------------------------
    99.         movd xmm1,EpaisseurStylo
    100. invoke GdipCreatePen1,0FF00FF00h,,0,&nativePen
    101. movd xmm1,wi1
    102. invoke GdipCreatePen1,ColorsBlack,,UnitWorld,&blackPen
    103. movd xmm1,wi2
    104. invoke GdipCreatePen1,ColorsGreen,,UnitWorld,&greenPen
    105. invoke GdipSetPenMode,greenPen,PenAlignmentCenter
    106.         movd xmm1,wi3
    107. invoke GdipCreatePen1,ColorsYellow,,UnitWorld,&hPen
    108. invoke GdipSetPenStartCap,hPen,LineCapRoundAnchor
    109. invoke GdipSetPenEndCap,hPen,LineCapArrowAnchor
    110. invoke GdipCreatePath,0,&path
    111. invoke GdipStartPathFigure,path
    112.         movd xmm1,wi3
    113. invoke GdipCreatePen1,ColorsRed,,UnitWorld,&hPen0
    114. invoke GdipSetPenStartCap,hPen0,LineCapRoundAnchor
    115. invoke GdipSetPenEndCap,hPen0,LineCapArrowAnchor
    116. invoke GdipSetPenDashArray,hPen0,&dash,2
    117. wmBYE:  leave
    118.         ret
    119. WndProc endp
    120. ;---------------------------------------
    121. .data
    122. ClassName db 'GDI+ рисование линий',0
    123. FileName db "br_Rabbit3.cur",0
    124. gdiplusToken dd ?
    125. gsi GdiplusStartupInput <1,0,0,0,0>
    126. graphics dq ?
    127. nativePen dq ?
    128. blackPen dq ?
    129. greenPen dq ?
    130. hPen dq ?
    131. hPen0 dq ?
    132. path dq ?
    133. EpaisseurStylo REAL4 3.0;толщина пера в формате float
    134. wi1 real4 1.0
    135. wi2 real4 10.0
    136. wi3             real4 8.0
    137. dash REAL4 1.0,0.5
    138. end
    Во вложении asm/exe/cur-файлы
     

    Вложения:

    • 00.png
      00.png
      Размер файла:
      6,7 КБ
      Просмотров:
      136
    • tut_01a.zip
      Размер файла:
      4,8 КБ
      Просмотров:
      54
    Последнее редактирование: 7 янв 2025
    MaKsIm нравится это.
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.837

    Рисуем круги, окружности и эллипсы

    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. ColorsGreen     equ 0FF00FF00h
    4. .code
    5. WinMain proc
    6. local msg:MSG
    7. ;инициализация библиотеки GDIPLUS
    8. invoke GdiplusStartup,&gdiplusToken,&gsi,0
    9. xor ebx,ebx
    10. mov esi,IMAGE_BASE
    11. invoke LoadCursorFromFileA,&FileName
    12. mov edi,offset ClassName
    13. push rax    ;hIconSm
    14. push rdi    ;lpszClassName
    15. push rbx    ;lpszMenuName
    16. push COLOR_WINDOW;hbrBackground
    17. push rax    ;hCursor
    18. push rax       ;hIcon
    19. push rsi    ;hInstance
    20. push rbx       ;cbClsExtra & cbWndExtra
    21. pushaddr WndProc     ;lpfnWndProc
    22.       push sizeof WNDCLASSEX;cbSize & style
    23. invoke RegisterClassExA,esp ;addr WNDCLASSEX
    24. push rbx
    25. push rsi ;rsi=400000h
    26. shl esi,9 ;rsi=CW_USEDEFAULT
    27. push rbx
    28. push rbx
    29. push 500
    30. push 500
    31. push rsi
    32. push rsi
    33. sub esp,20h
    34.     invoke CreateWindowExA,WS_EX_TOOLWINDOW,edi,edi,WS_OVERLAPPEDWINDOW or WS_VISIBLE
    35.     lea edi,msg
    36. @@:    invoke GetMessageA,edi,NULL,0,0
    37. invoke DispatchMessageA,edi
    38.         jmp @b
    39. WinMain endp
    40. WndProc proc hWnd:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD
    41. local ps:PAINTSTRUCT
    42.       mov hWnd,rcx
    43.       cmp edx,WM_DESTROY
    44.       je wmDESTROY
    45.       cmp edx,WM_CREATE
    46.       je wmCREATE
    47. cmp edx,WM_PAINT
    48. je wmPAINT
    49.         leave
    50.         jmp NtdllDefWindowProc_
    51. wmDESTROY:;уничтожить путь
    52. invoke GdipDeletePath,path
    53. invoke GdipDeleteBrush,hBrush
    54.         invoke GdipDeleteBrush,hBrush0
    55.         invoke GdipDeleteBrush,hBrush1
    56.         invoke GdipDeleteBrush,hBrush2
    57. invoke GdipDeletePen,hPen
    58. ;уничтожить объект GDI+
    59. invoke GdipDeleteGraphics,graphics
    60. mov ecx,gdiplusToken
    61. invoke GdiplusShutdown
    62. invoke RtlExitUserProcess,NULL
    63. wmPAINT:invoke BeginPaint,hWnd,&ps
    64. ;Нелинейный градиент - эллипс
    65. invoke GdipAddPathEllipseI,path,-150,-150,600,600
    66. invoke GdipCreatePathGradientFromPath,path,&hBrush
    67. invoke GdipSetPathGradientCenterColor,hBrush,900000FFh
    68. invoke GdipFillRectangleI,graphics,hBrush,0,0,700,700
    69. ;нарисовать закрашенную окружность
    70. invoke GdipFillEllipseI,graphics,hBrush0,50,138,200,200
    71. invoke GdipFillEllipseI,graphics,hBrush1,173,138,200,200
    72. invoke GdipFillEllipseI,graphics,hBrush2,108,59,200,200
    73. ;нарисовать незакрашенную окружность
    74. invoke GdipDrawEllipseI,graphics,hPen,250,100,200,200
    75. ;------------------------------------------------------------
    76. invoke EndPaint,hWnd,&ps
    77. jmp wmBYE
    78. wmCREATE:invoke GdipCreateFromHWND,hWnd,&graphics
    79. ;------------------------------------------------------------
    80. ;создать кисть
    81. invoke GdipCreateSolidFill,09000FFFFh,&hBrush0;голубой
    82. invoke GdipCreateSolidFill,090FFFF00h,&hBrush1;желтый
    83. invoke GdipCreateSolidFill,090FF00FFh,&hBrush2;малиновый
    84. ;создать перо
    85. movd xmm1,EpaisseurStylo;толщина пера в формате float
    86. invoke GdipCreatePen1,ColorsGreen,,0,&hPen; цвет пера
    87. invoke GdipCreatePath,0,&path
    88. wmBYE:  leave
    89.         ret
    90. WndProc endp
    91. ;---------------------------------------
    92. .data
    93. ClassName db 'GDI+ рисование эллипсов',0
    94. FileName db "br_Rabbit3.cur",0
    95. gdiplusToken dd ?
    96. gsi GdiplusStartupInput <1,0,0,0,0>
    97. graphics dq ?
    98. EpaisseurStylo REAL4 6.0
    99. path dq ?
    100. hPen dq ?
    101. hBrush dq ?
    102. hBrush0 dq ?
    103. hBrush1 dq ?
    104. hBrush2 dq ?
    105. end
    Во вложении asm/exe/cur-файлы
     

    Вложения:

    • 00.png
      00.png
      Размер файла:
      64,5 КБ
      Просмотров:
      130
    • tut_01b.zip
      Размер файла:
      4,3 КБ
      Просмотров:
      52
    Последнее редактирование: 7 янв 2025
    MaKsIm нравится это.
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.837

    Полупрозрачное окно круглой формы

    Окно перемещается по рабочему столу, если нажать на него левой клавишей мыши. Правый клик внутрь окна -- это окно закроет.
    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. PixelFormat32bppPARGB           = 0E200Bh
    4. AC_SRC_OVER                     = 0
    5. AC_SRC_ALPHA                    = 1
    6. .code
    7. WinMain proc
    8. local msg:MSG
    9. ;инициализация библиотеки GDIPLUS
    10. invoke GdiplusStartup,&gdiplusToken,&gsi,0
    11. xor ebx,ebx
    12. mov esi,IMAGE_BASE
    13. invoke LoadCursorFromFileA,&FileName
    14. mov edi,offset ClassName
    15. push rax    ;hIconSm
    16. push rdi    ;lpszClassName
    17. push rbx    ;lpszMenuName
    18. push COLOR_WINDOW  ;hbrBackground
    19. push rax    ;hCursor
    20. push rax       ;hIcon
    21. push rsi    ;hInstance
    22. push rbx       ;cbClsExtra & cbWndExtra
    23. pushaddr WndProc     ;lpfnWndProc
    24.       push sizeof WNDCLASSEX;cbSize & style
    25. invoke RegisterClassExA,esp ;addr WNDCLASSEX
    26. push rbx
    27. push rsi ;rsi=400000h
    28. push rbx
    29. push rbx
    30. push 600
    31. push 600
    32. push rbx
    33. push rbx
    34. sub esp,20h
    35.     invoke CreateWindowExA,WS_EX_LAYERED,edi,edi,WS_POPUP or WS_VISIBLE ;WS_EX_LAYERED=80000h
    36.     lea edi,msg
    37. @@:    invoke GetMessageA,edi,NULL,0,0
    38. invoke DispatchMessageA,edi
    39.         jmp @b
    40. WinMain endp
    41. WndProc proc <12> hWnd:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD
    42. local hDC:HDC
    43. local memDC:HDC
    44. LOCAL hBmp:HBITMAP
    45. LOCAL OldBmp:HBITMAP
    46. LOCAL blend:BLENDFUNCTION
    47. LOCAL rect:RECT
    48.       mov hWnd,rcx
    49. mov wParam,r8
    50. mov lParam,r9
    51.       cmp edx,WM_DESTROY
    52.       je wmDESTROY
    53.       cmp edx,WM_CREATE
    54.       je wmCREATE
    55. cmp edx,WM_RBUTTONDOWN
    56. je wmRBUTTONDOWN
    57. cmp edx,WM_LBUTTONDOWN
    58. je wmLBUTTONDOWN
    59.         leave
    60. jmp NtdllDefWindowProc_
    61. wmDESTROY:invoke ReleaseDC,hDC
    62. invoke GdipDisposeImage,bitmap0
    63. ;уничтожить объект GDI+
    64. mov ecx,gdiplusToken
    65. invoke GdiplusShutdown
    66. invoke RtlExitUserProcess,NULL
    67. wmLBUTTONDOWN:invoke SendMessageA,hWnd,WM_NCLBUTTONDOWN,HTCAPTION,lParam
    68. jmp wmLBUTTONUP
    69. wmRBUTTONDOWN:;invoke  GetWindowLongPtrA,hWnd,GWL_EXSTYLE
    70. ;        sub     rax,WS_EX_LAYERED
    71.         invoke  SetWindowLongPtrA,hWnd,GWL_EXSTYLE,0
    72.         invoke  SetLayeredWindowAttributes,hWnd,0,255,LWA_ALPHA
    73. invoke PostMessageA,hWnd,WM_CLOSE,0,0
    74. jmp wmBYE
    75. wmCREATE:invoke GdipCreateBitmapFromFile,&pngfile,&bitmap0
    76. invoke GetWindowRect,hWnd,&rect
    77. mov blend.BlendOp,AC_SRC_OVER
    78. mov blend.BlendFlags,0
    79. mov blend.AlphaFormat,AC_SRC_ALPHA
    80. mov blend.SourceConstantAlpha, 255
    81. invoke GetDC,0
    82.         mov hDC,rax
    83. wmLBUTTONUP:
    84. mov ecx,rect.right
    85. sub ecx,rect.left
    86. mov rect.right,ecx
    87. mov edx,rect.bottom
    88.         sub edx,rect.top
    89. mov rect.bottom,edx
    90. lea eax,bitmap
    91. mov [rsp+28h],rax
    92.     and qword ptr[rsp+20h],0
    93. invoke GdipCreateBitmapFromScan0,,,0,PixelFormat32bppPARGB
    94. invoke GdipGetImageGraphicsContext,bitmap,&graphics
    95.         invoke GdipDrawImage,graphics,bitmap0,0,0
    96. mov ecx,rect.right
    97. mov edx,rect.bottom
    98. invoke GdipCreateBitmapFromGraphics,,,graphics,&bitmap10
    99. invoke GdipCreateHBITMAPFromBitmap,bitmap,&hBmp,0
    100. invoke CreateCompatibleDC,hDC
    101. mov memDC,rax
    102. invoke SelectObject,eax,hBmp
    103. mov OldBmp,rax
    104. mov qword ptr[rsp+40h],ULW_ALPHA
    105. lea eax,blend
    106. mov [rsp+38h],rax
    107. and qword ptr[rsp+30h],0
    108. lea eax,ptZero
    109. mov [rsp+28h],rax
    110. mov rax,memDC
    111. mov [rsp+20h],rax
    112. invoke UpdateLayeredWindow,hWnd,0,&rect,&rect.right
    113. invoke DeleteObject,OldBmp
    114. invoke DeleteDC,memDC
    115. wmBYE:  leave
    116.         ret
    117. WndProc endp
    118. ;---------------------------------------
    119. .data
    120. bitmap dq ?
    121. bitmap0 dq ?
    122. bitmap10 dq ?
    123. Hbitmap HBITMAP ?
    124. graphics dq ?
    125. ClassName db 'GDI+ полупрозрачный шар',0
    126. FileName db "br_Rabbit3.cur",0
    127. gdiplusToken dd ?
    128. gsi GdiplusStartupInput <1,0,0,0,0>
    129. pngfile: du <crystal-ball.png>
    130. ptZero POINT <>
    131. end
    Во вложении asm/exe/png/cur-файлы
     

    Вложения:

    • 00.png
      00.png
      Размер файла:
      231 КБ
      Просмотров:
      134
    • tut_01k.zip
      Размер файла:
      270,1 КБ
      Просмотров:
      51
    Последнее редактирование: 7 янв 2025
    malex и MaKsIm нравится это.
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.837

    GIF-анимация

    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. PropertyTagFrameDelay  equ 5100h
    4. cdIdTimer       equ 1
    5. .code
    6. WinMain proc
    7. local msg:MSG
    8. ;инициализация библиотеки GDIPLUS
    9.        invoke GdiplusStartup,&gdiplusToken,&gsi,0
    10.        xor ebx,ebx
    11.        mov edi,offset ClassName
    12.        invoke LoadCursorFromFileA,&FileName
    13.        push rax ;hIconSm
    14.        push rdi ;lpszClassName
    15.        push rbx ;lpszMenuName
    16.        push COLOR_WINDOWTEXT ;hbrBackground
    17.        push rax ;hCursor
    18.        push rax ;hIcon
    19.        push IMAGE_BASE ;hInstance
    20.        push rbx ;cbClsExtra & cbWndExtra
    21.        pushaddr WndProc  ;lpfnWndProc
    22.        push sizeof WNDCLASSEX;cbSize & style
    23.        invoke RegisterClassExA,esp ;addr WNDCLASSEX
    24.        push rbx
    25.        push IMAGE_BASE
    26.        push rbx
    27.        push rbx
    28.        push rbx ; nHeight
    29.        push rbx ; nWidth
    30.        push 127; Y
    31.        push 127; X
    32.        sub esp,20h
    33.        invoke CreateWindowExA,0,edi,edi,WS_OVERLAPPEDWINDOW or WS_VISIBLE
    34.        lea edi,msg
    35. @@: invoke GetMessageA,edi,NULL,0,0
    36.        cmp msg.wParam,VK_ESCAPE;user press 'Esc'?
    37.        je wmDESTROY
    38.        invoke DispatchMessageA,edi
    39.        jmp @b
    40. WinMain endp
    41. WndProc proc hWnd:qword,umsg:qword,wParam:qword,lParam:qword
    42. local graphics:qword
    43. local ptDiff:POINT
    44. local rctWnd:RECT
    45. local rctClient:RECT
    46. local tmp:qword
    47. local pDimensionIDs:qword
    48. local count:qword
    49. local ps:PAINTSTRUCT
    50.        mov hWnd,rcx
    51.        cmp edx,WM_DESTROY
    52.        je wmDESTROY
    53.        cmp edx,WM_CREATE
    54.        je wmCREATE
    55.        cmp edx,WM_SIZE
    56.        je wmSIZE
    57.        cmp edx,WM_PAINT
    58.        je wmPAINT
    59.        cmp edx,WM_TIMER
    60.        je wmTIMER
    61.        leave
    62.         jmp NtdllDefWindowProc_
    63. wmDESTROY::invoke KillTimer,hWnd,cdIdTimer
    64.        invoke GdipDisposeImage,hImage
    65.        invoke GdipFree,pPropertyItem
    66.        invoke GdiplusShutdown,gdiplusToken
    67.        invoke RtlExitUserProcess,NULL
    68. ;DrawFrameGIF---------------------
    69. wmPAINT:invoke BeginPaint,hWnd,&ps
    70.        invoke GdipCreateFromHDC,eax,&graphics
    71.        mov eax,dword ptr vdyClient
    72.        mov [rsp+28h],rax
    73.        mov eax,dword ptr vdxClient
    74.        mov [rsp+20h],rax
    75.        invoke GdipDrawImageRectI,graphics,hImage,0,0
    76.        invoke GdipImageSelectActiveFrame,hImage,&pageGuid,nFramePosition
    77.        inc nFramePosition
    78.        mov eax,nFrameCount
    79.        sub rax,nFramePosition
    80.        jnz @f
    81.        mov nFramePosition,rax
    82. ;-------------------------------
    83. @@: invoke GdipDeleteGraphics,graphics
    84.        invoke EndPaint,hWnd,&ps
    85.        jmp wmBYE
    86. wmTIMER:invoke InvalidateRect,hWnd,0,0
    87. jmp wmBYE
    88. wmCREATE:; Загрузить картинку из файла
    89.        invoke GdipLoadImageFromFile,&szfilename,&hImage
    90. ; Проверить количество пространств
    91.        invoke GdipImageGetFrameDimensionsCount,hImage,&count
    92.        mov rcx,count
    93.        test ecx,ecx
    94.        jz @f
    95.        shl ecx,4
    96.        invoke GdipAlloc
    97.        mov pDimensionIDs,rax
    98. ; Получить идентификатор первого пространства
    99.        invoke GdipImageGetFrameDimensionsList,hImage,eax,count
    100. ; Получить количество кадров в первом пространстве
    101.        invoke GdipImageGetFrameCount,hImage,pDimensionIDs,&nFrameCount
    102. ; Получить значение задержек между кадрами
    103.        invoke GdipGetPropertyItemSize,hImage,PropertyTagFrameDelay,&tmp
    104.        mov rcx,tmp
    105.        shl ecx,2
    106.        invoke GdipAlloc
    107.        mov pPropertyItem,rax
    108.        invoke GdipGetPropertyItem,hImage,PropertyTagFrameDelay,tmp,eax
    109.         invoke GdipFree,pDimensionIDs
    110. @@:;------------------------------------
    111.        invoke GdipGetImageWidth,hImage,&nWidth
    112.        invoke GdipGetImageHeight,hImage,&nHeight
    113.        invoke GetClientRect,hWnd,&rctClient
    114.        invoke GetWindowRect,hWnd,&rctWnd
    115.        mov eax,rctWnd.right
    116.        sub eax,rctWnd.left
    117.        sub eax,rctClient.right
    118.        mov ptDiff.x,eax
    119.        mov eax,rctWnd.bottom
    120.        sub eax,rctWnd.top
    121.        sub eax,rctClient.bottom
    122.        mov ptDiff.y,eax
    123.        mov qword ptr [rsp+28h],TRUE ; bRepaint
    124.         mov ecx,nHeight
    125.        add ecx,ptDiff.y
    126.        mov [rsp+20h],rcx ;nHeight
    127.        mov r9d,nWidth
    128.        add r9d,ptDiff.x
    129.        invoke MoveWindow,hWnd,127,127
    130.        invoke SetTimer,hWnd,cdIdTimer,tmp,0
    131.        jmp wmBYE
    132. wmSIZE: mov rax,r9;lParam
    133.        mov vdxClient,ax
    134.        shr eax,10h
    135.        mov vdyClient,ax
    136. wmBYE: leave
    137.        retn
    138. WndProc endp
    139. ;-----------------------------------
    140. .data
    141. ClassName db "GDI+ gif animation",0
    142. FileName db "br_Rabbit3.cur",0
    143. gsi GdiplusStartupInput <1,0,0,0,0>
    144. pageGuid GUID <6AEDBD6Dh,3FB5h,418Ah,<83h,0A6h,7Fh,45h,22h,9Dh,0C8h,72h>>
    145. szfilename: du <movie.gif>
    146. vdxClient dw 0,0
    147. vdyClient dw 0,0
    148. nFramePosition dq 0
    149. .data?
    150. gdiplusToken dq ?
    151. nWidth dd ?
    152. nHeight dd ?
    153. nFrameCount dd ?
    154. pPropertyItem dq ?
    155. hImage dq ?
    156. end
    Во вложении asm/exe/gif/cur-файлы
     

    Вложения:

    • tut_01i.zip
      Размер файла:
      1,7 МБ
      Просмотров:
      56
    • 00.png
      00.png
      Размер файла:
      68 КБ
      Просмотров:
      133
    MaKsIm нравится это.
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.837
    Если интересно, то могу продолжить :scratch_one-s_head:
     
    mantissa, E.D., MaKsIm и 2 другим нравится это.
  6. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    183
    Интересная на мой взгляд идея: нарисовать график функций для данных
    --- Сообщение объединено, 7 янв 2025 ---
    Для красоты весь график можно разделить на прямоугольники сплошными прерывистыми линиями
    --- Сообщение объединено, 7 янв 2025 ---
    Для каждого числа делается линия как на сортировках, длина линии = значение, потом линии стираются последние точки соединяются.
     
  7. MaKsIm

    MaKsIm Active Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    117
    Вот вариант на fasm 1.73.32 первого туториала
    Код (ASM):
    1.  
    2. format PE64 GUI 6.0
    3. include "WIN64W.INC"
    4. ; include "EXTIMPORT.INC"
    5. ; -----------------------------------------------------------------
    6. irpv library, v { purge v }
    7. irpv import, v { purge v }
    8. macro .import { purge .import
    9.   macro .import \{\}
    10.   section '.idata' import data readable writeable
    11.   define __SECTION import
    12. }
    13. macro library [name] { common .import
    14.   label import_data
    15.   forward label name#.ref
    16.     if defined name#.use
    17.       dd RVA name#.adr, 0, 0, RVA name#.txt, RVA name#.aim
    18.     end if
    19.   common if $ > import_data
    20.       dd 0, 0, 0, 0, 0
    21.     end if
    22. }
    23. macro import name, [deff] { common match lbl==txt, name \{
    24.     if definite lbl\#.ref
    25.       label lbl\#.aim
    26.   \}
    27.   forward match lbl==txt, name \{ match aim==val, deff \\{
    28.     macro lbl\\#.\\#aim arg& \\\{ invoke lbl\\\#.\\\#aim\\\#.point, arg\\\}
    29.     macro aim arg& \\\{ lbl\\\#.\\\#aim arg \\\}
    30.     if used __imp__\\#aim
    31.       label __imp__\\#aim qword at lbl\\\#.\\\#aim\\\#.point
    32.     end if
    33.     if used lbl\\#.\\#aim\\#.point
    34.       label lbl\\#.\\#aim\\#.point qword
    35.       if val eqtype ''
    36. dq RVA lbl\\#.\\#aim\\#.text
    37.       else
    38. dq 0x8000000000000000 + val
    39.       end if
    40.     end if
    41.   \\} \}
    42.   common match lbl==txt, name \{ if $ > lbl\#.aim
    43.       lbl\#.use dq 0
    44.     end if
    45.     label lbl\#.adr
    46.   \}
    47.   forward match lbl==txt, name \{ match aim==val, deff \\{
    48.     if used lbl\\#.\\#aim\\#.point
    49.       if val eqtype ''
    50. dq RVA lbl\\#.\\#aim\\#.text
    51.       else
    52. dq 0x8000000000000000 + val
    53.       end if
    54.     end if
    55.   \\} \}
    56.   common match lbl==txt, name \{ if $ > lbl\#.adr
    57.       dq 0
    58.     end if
    59.     lbl\#.txt db txt, 0
    60.   \}
    61.   forward match lbl==txt, name \{ match aim==val, deff \\{
    62.     if used lbl\\#.\\#aim\\#.point & val eqtype ''
    63.       rb RVA $ and 1
    64.       lbl\\#.\\#aim\\#.text db 0, 0, val, 0
    65.     end if
    66.   \\} \}
    67.   common end if
    68. }
    69. ; -----------------------------------------------------------------
    70. ; include "GDIPLUS.INC"
    71. ; -----------------------------------------------------------------
    72. UnitWorld    equ 0
    73. PenAlignmentCenter equ 0
    74. PenAlignmentInset  equ 1
    75. LineCapRoundAnchor equ 12h
    76. LineCapArrowAnchor equ 14h
    77. LineJoinBevel    equ 1
    78. struc GdiplusStartupInput ver=1,cbk=0,bkg=?,ext=?,inp=? { label .
    79.   .GdiplusVersion dd ver,0
    80.   .DebugEventCallback dq cbk
    81.   .SuppressBackgroundThread dd bkg
    82.   .SuppressExternalCodecs dd ext
    83.   .GdiplusStartupInput dq inp
    84.   label .Length at $ - .
    85. }
    86. ; -----------------------------------------------------------------
    87. library KERNEL32.DLL,USER32.DLL,GDIPLUS.DLL
    88. import KERNEL32.DLL     = "KERNEL32.DLL",\
    89. ExitProcess     = "ExitProcess",\
    90. GetLastError     = "GetLastError",\
    91. SetLastError     = "SetLastError"
    92. import USER32.DLL     = "USER32.DLL",\
    93. BeginPaint     = "BeginPaint",\
    94. CreateWindowExW     = "CreateWindowExW",\
    95. DefWindowProcW     = "DefWindowProcW",\
    96. DispatchMessageW    = "DispatchMessageW",\
    97. EndPaint     = "EndPaint",\
    98. GetMessageW     = "GetMessageW",\
    99. LoadImage     = "LoadImageW",\
    100. PostQuitMessage     = "PostQuitMessage",\
    101. RegisterClassExW    = "RegisterClassExW",\
    102. TranslateMessage    = "TranslateMessage"
    103. import GDIPLUS.DLL     = "GDIPLUS.DLL",\
    104. GdipAddPathLineI    = "GdipAddPathLineI",\
    105. GdipCreateFromHWND  = "GdipCreateFromHWND",\
    106. GdipCreatePath     = "GdipCreatePath",\
    107. GdipDeleteGraphics  = "GdipDeleteGraphics",\
    108. GdipCreatePen1     = "GdipCreatePen1",\
    109. GdipDeletePath     = "GdipDeletePath",\
    110. GdipDeletePen     = "GdipDeletePen",\
    111. GdipDrawLineI     = "GdipDrawLineI",\
    112. GdipDrawPath     = "GdipDrawPath",\
    113. GdipDrawRectangleI  = "GdipDrawRectangleI",\
    114. GdipSetPenDashArray = "GdipSetPenDashArray",\
    115. GdipSetPenLineJoin  = "GdipSetPenLineJoin",\
    116. GdipSetPenMode     = "GdipSetPenMode",\
    117. GdipSetPenEndCap    = "GdipSetPenEndCap",\
    118. GdipSetPenStartCap  = "GdipSetPenStartCap",\
    119. GdipStartPathFigure = "GdipStartPathFigure",\
    120. GdiplusShutdown     = "GdiplusShutdown",\
    121. GdiplusStartup     = "GdiplusStartup"
    122. section '.data' data readable writeable
    123. gsi        GdiplusStartupInput 1,0,0,0,0
    124. gdipDash       dd  1.0,\
    125.    0.5
    126. nativePenWidth dd  3.0
    127. blackPenWidth  dd  1.0
    128. greenPenWidth  dd 10.0
    129. hPenWidth      dd  8.0
    130. hPen0Width     dd 10.0
    131. szClassName    du "GDI+ рисование линий",0
    132. szFileName     du "br_Rabbit3.cur",0
    133. align 8
    134. gdipGraphics   rq 1
    135. gdipPath       rq 1
    136. hPen0        rq 1
    137. hPen        rq 1
    138. nativePen      rq 1
    139. blackPen       rq 1
    140. greenPen       rq 1
    141. gdiplusToken   rd 1
    142. virtual        at 0
    143.   wce        WNDCLASSEX
    144.   label WNDCLASSEXW.Length
    145. end virtual
    146. section '.text' code readable executable
    147. label ImageBase at $ - $$
    148. entry WinMain
    149. proc WinMain
    150.   RegisterClassExW_SizeAndStyle = WNDCLASSEXW.Length or ((CS_HREDRAW or CS_VREDRAW or CS_GLOBALCLASS or CS_DBLCLKS) shl 32)
    151.   local msg:MSG
    152. frame
    153. GdiplusStartup gdiplusToken, gsi, 0
    154. LoadImage NULL, addr szFileName, IMAGE_CURSOR, LR_DEFAULTSIZE, LR_DEFAULTSIZE, LR_LOADFROMFILE or LR_SHARED
    155. RegisterClassExW addr rsp + 32, rdx, r8, r9, RegisterClassExW_SizeAndStyle,\
    156. addr WndProc, NULL, addr ImageBase, rax, rax, COLOR_WINDOWFRAME+1,\
    157. NULL, addr szClassName, rax
    158. CreateWindowExW  WS_EX_TOOLWINDOW, addr szClassName, addr szClassName,\
    159. WS_OVERLAPPEDWINDOW or WS_VISIBLE, 100, 100, 400, 400,\
    160. NULL, NULL, addr ImageBase, NULL
    161. SetLastError NULL
    162. jmp .start
    163.   @@:
    164. TranslateMessage addr msg
    165. DispatchMessageW addr msg
    166.   .start:
    167. GetMessageW addr msg, NULL, NULL, NULL
    168. inc eax
    169. jz @f
    170. dec eax
    171. jnz @b
    172. mov eax, dword [msg.wParam]
    173. jmp .exit
    174.   @@:
    175. GetLastError
    176.   .exit:
    177. GdiplusShutdown [gdiplusToken]
    178. ExitProcess eax
    179. endf
    180. endp
    181. proc WndProc, hWnd:QWORD,uMsg:DWORD,wPar:QWORD,lPar:QWORD
    182. frame
    183.   local ps:PAINTSTRUCT
    184. cmp edx, WM_PAINT
    185. jz .wm_paint
    186. cmp edx, WM_DESTROY
    187. jz .wm_destroy
    188. cmp edx, WM_CREATE
    189. jz .wm_create
    190. DefWindowProcW rcx, edx, r8, r9
    191. jmp .quit
    192.   .wm_create:
    193. GdipCreateFromHWND rcx, gdipGraphics
    194. GdipCreatePen1 0FF00FF00h, float [nativePenWidth], UnitWorld, addr nativePen
    195. GdipCreatePen1 0FF000000h, float [blackPenWidth], UnitWorld, addr blackPen
    196. GdipCreatePen1 0FF00FF00h, float [greenPenWidth], UnitWorld, addr greenPen
    197. GdipSetPenMode [greenPen], PenAlignmentCenter
    198. GdipCreatePen1 0FFFFFF00h, float [hPenWidth], UnitWorld, addr hPen
    199. GdipSetPenStartCap  [hPen], LineCapRoundAnchor
    200. GdipSetPenEndCap    [hPen], LineCapArrowAnchor
    201. GdipCreatePath   0, addr gdipPath
    202. GdipStartPathFigure [gdipPath]
    203. GdipCreatePen1 0FFFF0000h, float [hPen0Width], UnitWorld, addr hPen0
    204. GdipSetPenStartCap  [hPen0], LineCapRoundAnchor
    205. GdipSetPenEndCap    [hPen0], LineCapArrowAnchor
    206. GdipSetPenDashArray [hPen0], addr gdipDash, 2
    207. xor eax, eax
    208. jmp .quit
    209.   .wm_destroy:
    210. GdipDeletePen    [hPen0]
    211. GdipDeletePen    [hPen]
    212. GdipDeletePen    [greenPen]
    213. GdipDeletePen    [blackPen]
    214. GdipDeletePen    [nativePen]
    215. GdipDeletePath    [gdipPath]
    216. GdipDeleteGraphics [gdipGraphics]
    217. PostQuitMessage NULL
    218. jmp .quit
    219.   .wm_paint:
    220.         mov     [hWnd], rcx
    221. BeginPaint, [hWnd], addr ps
    222. ;зеленая линия
    223. GdipDrawLineI  [gdipGraphics], [nativePen], 40, 40, 200, 100 ;x1,y1,x2,y2
    224. ;"Странная" линия
    225. GdipDrawLineI [gdipGraphics], [greenPen], 230, 200, 300, 150
    226. GdipDrawLineI [gdipGraphics], [blackPen], 230, 200, 300, 150
    227. ;Прямоугольник с выравниванием линии по центру
    228. GdipDrawRectangleI [gdipGraphics], [greenPen], 210, 220, 100, 100
    229. GdipDrawRectangleI [gdipGraphics], [blackPen], 210, 220, 100, 100
    230. ;Прямоугольник с выравниванием линии по краю
    231. GdipSetPenMode [greenPen], PenAlignmentInset
    232. GdipDrawRectangleI [gdipGraphics], [greenPen], 250, 250, 100, 100
    233. GdipDrawRectangleI [gdipGraphics], [blackPen], 250, 250, 100, 100
    234. ;Стрелка
    235. GdipDrawLineI [gdipGraphics], [hPen], 12, 92, 60, 80
    236. ;Соединение линий
    237. GdipAddPathLineI [gdipPath],  10, 200, 100, 200
    238. GdipAddPathLineI [gdipPath], 100, 200, 100, 300
    239. GdipAddPathLineI [gdipPath], 100, 300, 150, 300
    240. GdipSetPenLineJoin [hPen], LineJoinBevel
    241. GdipDrawPath [gdipGraphics], [hPen], [gdipPath]
    242. ;Прерывистая линия
    243. GdipDrawLineI [gdipGraphics], [hPen0], 100, 50, 200, 50
    244. GdipDrawLineI [gdipGraphics], [hPen0], 100, 70, 300, 70
    245. ;------------------------------------------------------------
    246. EndPaint, [hWnd], addr ps
    247. jmp .quit
    248.   .quit:
    249. endf
    250. ret
    251. endp
    252.  
     

    Вложения:

    Последнее редактирование: 8 янв 2025
    mantissa нравится это.
  8. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.837

    Градиент

    Код (C):
    1. ; GUI #
    2. include win64a.inc
    3. WINDOWWIDTH   equ 640
    4. WINDOWHEIGHT  equ 480
    5. WINDOWWIDTHF  equ 640.0
    6. WINDOWHEIGHTF equ 480.0
    7. RectF STRUCT
    8. Left REAL4 ?
    9. Top REAL4 ?
    10. Right REAL4 ?
    11. Bottom REAL4 ?
    12. RectF ENDS
    13. ;Various wrap modes for brushes
    14. WrapModeTile equ 0
    15. WrapModeTileFlipX equ 1
    16. WrapModeTileFlipY equ 2
    17. WrapModeTileFlipXY equ 3
    18. WrapModeClamp equ 4
    19. ; LinearGradient Modes
    20. LinearGradientModeHorizontal equ 0
    21. LinearGradientModeVertical equ 1
    22. LinearGradientModeForwardDiagonal equ 2
    23. LinearGradientModeBackwardDiagonal equ 3
    24. equRed equ 0FFFF0000h
    25. equBlue equ 0FF0080FFh
    26. .code
    27. WinMain proc
    28. local msg:MSG
    29. ;инициализация библиотеки GDIPLUS
    30. invoke GdiplusStartup,&gdiplusToken,&gsi,0
    31. xor ebx,ebx
    32. mov esi,IMAGE_BASE
    33. invoke LoadCursorFromFileA,&FileName
    34. mov edi,offset ClassName
    35. push rax    ;hIconSm
    36. push rdi    ;lpszClassName
    37. push rbx    ;lpszMenuName
    38. push COLOR_WINDOW;hbrBackground
    39. push rax    ;hCursor
    40. push rax       ;hIcon
    41. push rsi    ;hInstance
    42. push rbx       ;cbClsExtra & cbWndExtra
    43. pushaddr WndProc     ;lpfnWndProc
    44.       push sizeof WNDCLASSEX;cbSize & style
    45. invoke RegisterClassExA,esp ;addr WNDCLASSEX
    46. push rbx
    47. push rsi ;rsi=400000h
    48. shl esi,9 ;rsi=CW_USEDEFAULT
    49. push rbx
    50. push rbx
    51. push WINDOWHEIGHT
    52. push WINDOWWIDTH
    53. push rsi
    54. push rsi
    55. sub esp,20h
    56.     invoke CreateWindowExA,WS_EX_TOOLWINDOW,edi,edi,WS_OVERLAPPEDWINDOW or WS_VISIBLE
    57.     lea edi,msg
    58. @@:    invoke GetMessageA,edi,NULL,0,0
    59. invoke DispatchMessageA,edi
    60.         jmp @b
    61. WinMain endp
    62. WndProc proc hWnd:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD
    63. local ps:PAINTSTRUCT
    64.       mov hWnd,rcx
    65.       cmp edx,WM_DESTROY
    66.       je wmDESTROY
    67.       cmp edx,WM_CREATE
    68.       je wmCREATE
    69. cmp edx,WM_PAINT
    70. je wmPAINT
    71. cmp edx,WM_SIZE
    72. je wmSIZE
    73. cmp edx,WM_MOUSEWHEEL
    74. je wmMOUSEWHEEL
    75. cmp edx,WM_LBUTTONDOWN
    76. je wmLBUTTONDOWN
    77.         leave
    78.         jmp NtdllDefWindowProc_
    79. wmDESTROY:
    80. ;уничтожить объект GDI+
    81. invoke GdipDeleteGraphics,graphics
    82. mov ecx,gdiplusToken
    83. invoke GdiplusShutdown
    84. invoke RtlExitUserProcess,NULL
    85. wmSIZE: invoke  GetClientRect,hWnd,&rect
    86. cvtsi2ss xmm0,rect.Left
    87. movd rect.Left,xmm0
    88. cvtsi2ss xmm0,rect.Top
    89. movd rect.Top,xmm0
    90. cvtsi2ss xmm0,rect.Right
    91. movd rect.Right,xmm0
    92. cvtsi2ss xmm0,rect.Bottom
    93. movd    rect.Bottom,xmm0
    94. invoke InvalidateRgn,hWnd,NULL,FALSE
    95. jmp wmBYE
    96. wmMOUSEWHEEL:mov eax,r8d
    97. shr eax,16
    98. cmp ax,1000h;.if     signed r8d > 0
    99. jle @f
    100. add     ChangeColor,0A050Fh
    101. or      ChangeColor,0FF000000h
    102. jmp @1
    103. @@:     sub     ChangeColor, 90305h
    104. or      ChangeColor, 0FF000000h
    105. @1: invoke  InvalidateRgn, rcx, NULL, FALSE
    106. jmp wmBYE
    107. wmLBUTTONDOWN:inc GradientMode
    108. and GradientMode,11y
    109. wmPAINT:invoke DrawGradient
    110. jmp wmBYE
    111. wmCREATE:invoke GdipCreateFromHWND,hWnd,&graphics      
    112. ;------------------------------------------------------------
    113. wmBYE:  leave
    114.         ret
    115. WndProc endp
    116. DrawGradient  proc
    117. LOCAL hBrush:QWORD
    118. lea eax,hBrush
    119. mov [rsp+28h],rax
    120. mov qword ptr[rsp+20h],WrapModeTile
    121. invoke GdipCreateLineBrushFromRect,&rect,equRed,ChangeColor,GradientMode
    122. mov eax,rect.Bottom
    123. mov [rsp+28h],rax
    124. mov eax,rect.Right
    125. mov [rsp+20h],rax
    126.         movd xmm3,rect.Top
    127.         movd xmm2,rect.Left
    128. invoke GdipFillRectangle,graphics,hBrush
    129. invoke GdipDeleteBrush, hBrush
    130. leave
    131. ret
    132. DrawGradient endp
    133. ;---------------------------------------
    134. .data
    135. ClassName db 'GDI+ градиент: [щелкаем левой кавишей мыши и вращаем колесико]',0
    136. FileName db "br_Rabbit3.cur",0
    137. gdiplusToken dd ?
    138. gsi GdiplusStartupInput <1,0,0,0,0>
    139. graphics dq ?
    140. GradientMode dq 0 ;how the gradient will look in the window
    141. ChangeColor dq equBlue
    142. rect RectF <0.0, 0.0, WINDOWWIDTHF, WINDOWHEIGHTF>
    143. ;icex INITCOMMONCONTROLSEX <sizeof INITCOMMONCONTROLSEX, ICC_ALL_CLASSES>
    144. hDC dq ?
    145. end
    Во вложении asm/exe/cur-файлы
     

    Вложения:

    • 111.png
      111.png
      Размер файла:
      7,6 КБ
      Просмотров:
      108
    • tut_01c.zip
      Размер файла:
      4,5 КБ
      Просмотров:
      47
    E.D. нравится это.
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.837

    Вывод на экран JPEG

    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. .code
    4. WinMain proc
    5. local msg:MSG
    6. ;инициализация библиотеки GDIPLUS
    7.        invoke GdiplusStartup,&gdiplusToken,&gsi,0
    8.        xor ebx,ebx
    9.        mov esi,IMAGE_BASE
    10.        invoke LoadCursorFromFileA,&FileName
    11.        mov edi,offset ClassName
    12.        push rax    ;hIconSm
    13.        push rdi    ;lpszClassName
    14.        push rbx    ;lpszMenuName
    15.        push COLOR_WINDOW;hbrBackground
    16.        push rax    ;hCursor
    17.        push rax       ;hIcon
    18.        push rsi    ;hInstance
    19.        push rbx       ;cbClsExtra & cbWndExtra
    20.        pushaddr WndProc     ;lpfnWndProc
    21.        push sizeof WNDCLASSEX;cbSize & style
    22.        invoke RegisterClassExA,esp ;addr WNDCLASSEX
    23.        push rbx
    24.        push rsi ;rsi=400000h
    25.        shl esi,9 ;rsi=CW_USEDEFAULT
    26.        push rbx
    27.        push rbx
    28.        push 600
    29.        push 800
    30.        push rsi
    31.        push rsi
    32.        sub esp,20h
    33.        invoke CreateWindowExA,WS_EX_TOOLWINDOW,edi,edi,WS_OVERLAPPEDWINDOW or WS_VISIBLE
    34.        lea edi,msg
    35. @@:    invoke GetMessageA,edi,NULL,0,0
    36.        invoke DispatchMessageA,edi
    37.        jmp @b
    38. WinMain endp
    39. WndProc proc hWnd:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD
    40. local ps:PAINTSTRUCT
    41. local hDC:HDC
    42.       mov hWnd,rcx
    43.       cmp edx,WM_DESTROY
    44.        je wmDESTROY
    45.       cmp edx,WM_CREATE
    46.        je wmCREATE
    47.        cmp edx,WM_PAINT
    48.        je wmPAINT
    49.        leave
    50.        jmp NtdllDefWindowProc_
    51. wmDESTROY:invoke GdipDisposeImage,hJPG
    52. ;уничтожить объект GDI+
    53.        invoke GdipDeleteGraphics,graphics
    54.        mov ecx,gdiplusToken
    55.        invoke GdiplusShutdown
    56.        invoke RtlExitUserProcess,NULL
    57. wmPAINT:invoke BeginPaint,hWnd,&ps
    58. ;------------------------------------------------------------
    59.        invoke GdipDrawImageI,graphics,hJPG,0,0
    60.        invoke EndPaint,hWnd,&ps
    61.        jmp wmBYE
    62. wmCREATE:invoke GdipCreateFromHWND,hWnd,&graphics
    63. ;------------------------------------------------------------
    64. ;загрузить изображение из файла
    65.        invoke GdipLoadImageFromFile,&jpegfile,&hJPG
    66.        invoke GdipDrawImageI,graphics,hJPG,0,0
    67. wmBYE:  leave
    68.        ret
    69. WndProc endp
    70. ;---------------------------------------
    71. .data
    72. ClassName db 'GDI+  Image Resize',0
    73. FileName db "br_Rabbit3.cur",0
    74. gsi GdiplusStartupInput <1,0,0,0,0>
    75. jpegfile: du <Arenalv0.jpg>
    76. .data?
    77. gdiplusToken dd ?
    78. hJPG dq ?
    79. graphics dq ?
    80. end
    Во вложении asm/exe/jpg/cur-файлы
     

    Вложения:

    • 111.png
      111.png
      Размер файла:
      399,8 КБ
      Просмотров:
      105
    • tut_01f.zip
      Размер файла:
      137,9 КБ
      Просмотров:
      49
    mantissa, Research и E.D. нравится это.
  10. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.837

    Рисуем мышью

    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. .code
    4. WinMain proc
    5. local msg:MSG
    6. ;инициализация библиотеки GDIPLUS
    7.        invoke GdiplusStartup,&gdiplusToken,&gsi,0
    8.        xor ebx,ebx
    9.        mov esi,IMAGE_BASE
    10.        invoke LoadCursorFromFileA,&FileName
    11.        mov edi,offset ClassName
    12.        mov hCursor1,rax
    13.        push rax ;hIconSm
    14.        push rdi ;lpszClassName
    15.        push rbx ;lpszMenuName
    16.        push COLOR_WINDOW+1;hbrBackground
    17.        push rax ;hCursor
    18.        push rax ;hIcon
    19.        push rsi ;hInstance
    20.        push rbx ;cbClsExtra & cbWndExtra
    21.        pushaddr WndProc   ;lpfnWndProc
    22.        push sizeof WNDCLASSEX;cbSize & style
    23.        invoke RegisterClassExA,esp ;addr WNDCLASSEX
    24.        push rbx
    25.        push rsi ;rsi=400000h
    26.        shl esi,9    ;rsi=CW_USEDEFAULT
    27.        push rbx
    28.        push rbx
    29.        push rsi
    30.        push rsi
    31.        push rsi
    32.        push rsi
    33.        sub esp,20h
    34.        invoke CreateWindowExA,0,edi,edi,WS_OVERLAPPEDWINDOW or WS_VISIBLE
    35.        lea edi,msg
    36. @@:    invoke GetMessageA,edi,0,0,0
    37.        invoke DispatchMessageA,edi
    38.        jmp @b
    39. WinMain endp
    40. WndProc proc hWnd:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD
    41. local ps:PAINTSTRUCT
    42. local   hdc:HDC
    43. local X:dword
    44. local Y:dword
    45.        mov hWnd,rcx
    46.        cmp edx,WM_DESTROY
    47.        je wmDESTROY
    48.        cmp edx,WM_CREATE
    49.        je wmCREATE
    50.        cmp dx,WM_LBUTTONDOWN
    51.        je wmLBUTTONDOWN
    52.        cmp dx,WM_LBUTTONUP
    53.        je wmLBUTTONUP
    54.        cmp dx,WM_MOUSEMOVE
    55.        je wmMOUSEMOVE
    56.        leave
    57.        jmp NtdllDefWindowProc_
    58. wmDESTROY:;уничтожить объект GDI+
    59.        invoke GdipDeleteGraphics,graphics
    60.        mov ecx,gdiplusToken
    61.        invoke GdiplusShutdown
    62.        invoke RtlExitUserProcess,NULL
    63. wmLBUTTONDOWN:;младшая часть lParam  = x  старшая часть lParam = y
    64.        or doDraw,TRUE
    65.        jmp wmBYE
    66. wmLBUTTONUP:and doDraw,FALSE
    67.        invoke SetCursor,hCursor1
    68.        jmp wmBYE
    69. wmMOUSEMOVE:cmp doDraw,FALSE
    70.        je wmBYE
    71.        mov X,r9d
    72.        and X,0FFFFh
    73.        shr r9,16
    74.        mov Y,r9d
    75.        invoke SetCursor,hCursor2
    76.        mov qword ptr[rsp+28h],10
    77.        mov qword ptr[rsp+20h],10
    78.        mov r9d,Y
    79.        mov r8d,X
    80.        invoke GdipFillEllipseI,graphics,hBrush
    81.        jmp wmBYE
    82. wmCREATE:invoke GdipCreateFromHWND,hWnd,&graphics
    83.        invoke GdipCreateSolidFill,0FFFF0000h,&hBrush;красный
    84.        invoke LoadCursorA,0,32631;IDC_HAND
    85.        mov hCursor2,rax
    86. wmBYE: leave
    87.        retn
    88. WndProc endp
    89. ;---------------------------------------
    90. .data
    91. ClassName db 'GDI+: Рисуем мышью',0
    92. FileName db "br_Rabbit3.cur",0
    93. gsi GdiplusStartupInput <1,0,0,0,0>
    94. doDraw db FALSE
    95. .data?
    96. gdiplusToken dd ?
    97. graphics dq ?
    98. hBrush dq ?
    99. hCursor1 dq ?
    100. hCursor2 dq ?
    101. end
    Во вложении asm/exe/cur-файлы
     

    Вложения:

    • 111.png
      111.png
      Размер файла:
      4,7 КБ
      Просмотров:
      72
    • tut_01q.zip
      Размер файла:
      3,8 КБ
      Просмотров:
      39
    mantissa, E.D. и Research нравится это.
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.837

    Надписи, прямоугольники, эллипсы, линии'

    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. RectF STRUCT
    4. Left REAL4 ?
    5. Top REAL4 ?
    6. Right REAL4 ?
    7. Bottom REAL4 ?
    8. RectF ENDS
    9. .code
    10. WinMain proc
    11. local msg:MSG
    12. ;инициализация библиотеки GDIPLUS
    13.    invoke GdiplusStartup,&gdiplusToken,&gsi,0
    14.    xor ebx,ebx
    15.    mov esi,IMAGE_BASE
    16.    invoke LoadCursorFromFileA,&FileName
    17.    mov edi,offset ClassName
    18.    push rax ;hIconSm
    19.    push rdi ;lpszClassName
    20.    push rbx ;lpszMenuName
    21.    push COLOR_WINDOW+1;hbrBackground
    22.    push rax ;hCursor
    23.    push rax ;hIcon
    24.    push rsi ;hInstance
    25.    push rbx ;cbClsExtra & cbWndExtra
    26.    pushaddr WndProc   ;lpfnWndProc
    27.    push sizeof WNDCLASSEX;cbSize & style
    28.    invoke RegisterClassExA,esp ;addr WNDCLASSEX
    29.    push rbx
    30.    push rsi ;rsi=400000h
    31.    shl esi,9    ;rsi=CW_USEDEFAULT
    32.    push rbx
    33.    push rbx
    34.    push 400;rsi
    35.    push 560;rsi
    36.    push rsi
    37.    push rsi
    38.    sub esp,20h
    39.    invoke CreateWindowExA,0,edi,edi,WS_OVERLAPPEDWINDOW or WS_VISIBLE
    40.    lea edi,msg
    41. @@:invoke GetMessageA,edi,0,0,0
    42.    invoke DispatchMessageA,edi
    43.    jmp @b
    44. WinMain endp
    45. WndProc proc hWnd:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD
    46. local ps:PAINTSTRUCT
    47. local   hDC:HDC
    48.    mov hWnd,rcx
    49.    cmp edx,WM_DESTROY
    50.    je wmDESTROY
    51.    cmp edx,WM_CREATE
    52.    je wmCREATE
    53.    cmp edx,WM_PAINT
    54.    je wmPAINT
    55.    leave
    56.    jmp NtdllDefWindowProc_
    57. wmDESTROY:;уничтожить перо
    58.    invoke GdipDeletePen,hPen
    59. ;уничтожить перо
    60.    invoke GdipDeleteBrush,hBrush
    61. ;уничтожить шрифт
    62.    invoke GdipDeleteFont,gpfont
    63. ;уничтожить объект GDI+
    64.    invoke GdipDeleteGraphics,graphics
    65.    mov ecx,gdiplusToken
    66.    invoke GdiplusShutdown
    67.    invoke RtlExitUserProcess,NULL
    68. wmPAINT:invoke BeginPaint,hWnd,&ps
    69.    mov hDC,rax
    70.    invoke GdipCreateFontFromLogfont,eax,&logfont,&gpfont
    71.    invoke GdipDrawString,graphics,&wphrase,-1,gpfont,&RectText,nativeFormat,hBrush
    72.    invoke GdipDrawRectangleI,graphics,hPen, 10, 40, 200, 100
    73.    invoke GdipDrawEllipseI,graphics,hPen, 150, 120, 100, 130
    74.    xor edi,edi
    75. @@:mov r9d,edi
    76.    add r9d,10
    77.    mov qword ptr [rsp+28h],r9
    78.    mov qword ptr [rsp+20h],500
    79.    invoke GdipDrawLineI,graphics,hPen,300
    80.    add edi,6
    81.    cmp edi,50*6
    82.    jb @b
    83. ;------------------------------------------------------------
    84.    invoke EndPaint,hWnd,&ps
    85.    jmp wmBYE
    86. wmCREATE:invoke GdipCreateFromHWND,hWnd,&graphics
    87.    movd xmm1,const3_0
    88.    invoke GdipCreatePen1,0FF00FF00h,,0,&hPen
    89.    invoke GdipCreateSolidFill,0FF00C832h,&hBrush
    90.    invoke CreateFontIndirect,&logfont
    91.    mov hFont,rax
    92.    invoke SendMessageA,hWnd,WM_SETFONT,rax,0
    93. ;---------- prepare all can be possible for drawing here (WM_PAINT is faster as this)
    94.    invoke GdipCreateStringFormat,0,LANG_NEUTRAL,&nativeFormat
    95. wmBYE: leave
    96.    retn
    97. WndProc endp
    98. ;---------------------------------------
    99. .data
    100. ClassName db 'GDI+: Надписи, прямоугольники, эллипсы, линии',0
    101. FileName db "br_Rabbit3.cur",0
    102. gsi GdiplusStartupInput <1,0,0,0,0>
    103. const3_0 REAL4 3.0;толщина пера в формате float
    104. logfont LOGFONT <36,12,0,0,400,0,0,0,0,0,0,0,DEFAULT_PITCH or FF_SCRIPT,"Helvetica">
    105. RectText RectF <0.0,0.0,270.0,90.0>
    106. wphrase: du <hello, World>
    107. .data?
    108. gdiplusToken dd ?
    109. graphics dq ?
    110. gpfont dq ?
    111. hBrush dq ?
    112. hPen dq ?
    113. hFont dq ?
    114. nativeFormat dq ?
    115. end
    Во вложении asm/exe/cur-файлы
     

    Вложения:

    • 111.png
      111.png
      Размер файла:
      7,8 КБ
      Просмотров:
      73
    • tut_01r.zip
      Размер файла:
      4,5 КБ
      Просмотров:
      38
    mantissa и E.D. нравится это.