Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Assembler Воспроизвести на системном динамике все ноты первой октавы воспроизвести на системном динамике все ноты первой октавы от ноты ДО к ноте СИ нужно сделать драйвер я вот совсем не врубаюсь... уже мозг кипит, помогите пожалуйста сдавать в пятницу ... https://www.cyberforum.ru/ assembler-windows/ thread217282.html Вывод азбуки Морзе на системный динамик Assembler
.386 .model flat, stdcall option casemap :none ;linclude\masm32\include\w2k\ntstatus.inc ;include\masm32\include\w2k\ntddk.inc ;include\masm32\include\w2k\hal.inc...
Assembler Как на MessageBox вывести атрибуты файла С помощью этой конструкции выводится числовое значение функции А как сделать чтобы выводилось буквенное отображение Например А (файл архивный) .386 .model flat, stdcall option casemap :none ... https://www.cyberforum.ru/ assembler-windows/ thread212868.html Assembler Завершить процесс TerminateProcess(FileName.exe) https://www.cyberforum.ru/ assembler-windows/ thread212245.html
Как завершить процесс в WinXP ? HANDLE hProcess - как это получить?
Посекторное копирование usb flash Assembler
Граждане, я тут первый раз, поэтому не знаю, туда ли вообще пишу. У меня проблема: Необходимо написать утилиту низкоуровневого (посекторного) копирования флешек. Подскажите пожалуйста, что можно...
Assembler Безопасное извлечение USB-устройств https://www.cyberforum.ru/ assembler-windows/ thread207603.html
Ребят, не подскажите в чем ошибка .486 .model flat, stdcall option casemap :none ; case sensitive include base.inc SP_CLASSINSTALL_HEADER struct cbSize dd ?
Assembler Работа с сетью в машинном коде https://www.cyberforum.ru/ assembler-windows/ thread204869.html
Всем доброго времени суток. Ктонибудь знает как работать с сокетами в машинном коде? (установка соединение,приём и отправка данных,и т.д.)
Определение координат мыши Assembler
Задача: на ассемблере под винду в консольном режиме отслеживать изменение положения мыши и вывод координат в определенное место экрана, по нажатию Esc - выход из программы. хелп плз :)
Assembler Воспроизведение звука (любой midi, mp3, wav) https://www.cyberforum.ru/ assembler-windows/ thread198991.html
Нужна самая простейшая программа (без всяких там наворотов и кнопок) которая бы воспроизводила звук (любой midi, mp3, wav) Очень нужно!!!
Assembler Скринсейвер (наподобие Матрицы) Здраствуйте! Пишу программу на Masm'e под windows - скринсейвер на подобие матрицы...получился вот такой код: .386 .model Flat,stdcall include windows.inc include user32.inc include... https://www.cyberforum.ru/ assembler-windows/ thread198742.html
Assembler Вывести серийный номер раздела диска.
Как можно изменить серийный номер раздела диска через win api? Есть примерчик на си, но мне нужен ассемблер. Для простоты можно не писать окно, а просто фиксированный номер установить, например...
Assembler Меняю шрифт в блокноте https://www.cyberforum.ru/ assembler-windows/ thread187619.html
Всем доброго времени суток! Вот написал небольшую программку, которая должна менять шрифт в открытом окне блокнота: format PE GUI 4.0 include 'win32ax.inc' .data notepad db...
2013 / 1285 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
24.12.2010, 16:38 0

Добавить рисование линии мышкой, как в Paint - Assembler - Ответ 1234045

24.12.2010, 16:38. Показов 1673. Ответов 1
Метки (Все метки)

Ответ

Jarviz, я установил флаг operation - он переключает режим по нажатию правой кнопки мыши - некрасиво конечно, сделай менюшку какую нибудь
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
.386               ; директива визначення типу мікропроцесора
.model flat,stdcall                     ; завдання лінійної моделі пам’яті
                                                  ; та угоди ОС Windows
option casemap:none          ; відмінність малих та великих літер
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\masm32.lib
 
.data                           ; директива визначення даних
ClassName db "SimpleWinClass",0
AppName  db "Результат выполнения программы",0
MenuName db "FirstMenu",0
About_string db "Выполнил: ",0
buf db 30 dup(0)
color3      RGBQUAD  <128,255,255>   ; ясно-бірюзовий
hPen1 dd 0
hOldPen dd 0
x1 dd 0
y1 dd 0
x2 dd 0
y2 dd 0
blueBrush dd ? ; комірка для  параметрів кисті
 
operation   db  1
bTracking   db  0
 
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hdc dd  ?
 
.const
IDM_FUNC equ 1
IDM_EXIT equ 2
IDM_ABOUT equ 3
IDI_ICON  equ 22
.code
start:
        invoke GetModuleHandle, NULL ; отримання дескриптора програми
        mov    hInstance,eax         ; збереження дескриптора програми
        invoke GetCommandLine
        mov CommandLine,eax
        invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
        invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
        LOCAL wc:WNDCLASSEX
        LOCAL msg:MSG
        LOCAL hwnd:HWND
        mov   wc.cbSize,SIZEOF WNDCLASSEX               ; кількість байтів структури
        mov   wc.style, CS_HREDRAW or CS_VREDRAW        ; стиль та поведінка вікна
        mov   wc.lpfnWndProc, OFFSET WndProc    ; адреса процедури WndProc
        mov   wc.cbClsExtra,NULL        ; кількість байтів для структури
        mov   wc.cbWndExtra,NULL        ; кількість байтів для структури
        push  hInst             ; збереження в стеці дескриптора програми
        pop   wc.hInstance      ; повернення дескриптора в поле структури
        mov   wc.hbrBackground,COLOR_WINDOW+1   ; колір вікна
        mov   wc.lpszMenuName,OFFSET MenuName   ; ім’я ресурсу меню
        mov   wc.lpszClassName,OFFSET ClassName         ; ім’я класу
        invoke  LoadIcon,hInstance, IDI_ICON    ; ресурс піктограми
        mov   wc.hIcon,eax                      ; дескриптор піктограми
        mov   wc.hIconSm,eax                    ; дескриптор маленького віконця
        invoke LoadCursor,NULL,IDC_ARROW        ; ресурс курсору
        mov   wc.hCursor,eax
        invoke RegisterClassEx, addr wc         ;  регістрація класу вікна
invoke CreateWindowEx, \                 ; функція створення вікна за зразком
 NULL,ADDR ClassName, \                            ; стиль та адреса імені класу
  ADDR AppName,\                                ; адреса імені вікна
  WS_OVERLAPPEDWINDOW, \                                ; базовий стиль
  CW_USEDEFAULT,CW_USEDEFAULT,\; гориз. та верт. координати вікна
    700,500, \            ; ширина та висота вікна
      0,0, hInst,0                 ; дескриптори батьківського вікна, меню, програми
 
        mov   hwnd,eax
        INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
        INVOKE UpdateWindow, hwnd
        .WHILE TRUE
                INVOKE GetMessage, ADDR msg,NULL,0,0
                .BREAK .IF (!eax)
                INVOKE DispatchMessage, ADDR msg
        .ENDW
        mov     eax,msg.wParam
        ret
WinMain endp
 
WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,IParam:LPARAM 
;LOCAL hdc:HDC           ; резервування стеку під хендл вікна
 
.if uMsg==WM_DESTROY
invoke ReleaseDC, hWnd, hdc
invoke PostQuitMessage,NULL
 
.ELSEIF uMsg==WM_CREATE   ; обробка  повідомлення WM_CREATE
invoke  CreatePen,\   ; створення пера
  PS_SOLID,40,\         ; завтовшки  40  пікселов
   dword ptr color3        ; світло-бірюзовий
mov     hPen1,eax       ; збереження отриманого  дескриптора пера
invoke GetDC, hWnd
mov hdc, eax
 
.elseif uMsg==WM_RBUTTONDOWN
    xor operation, 1
 
.elseif uMsg==WM_LBUTTONDOWN
  mov eax, IParam
  and eax,0ffffh 
  mov x1,eax
  mov eax, IParam
  shr eax,16 
  mov y1, eax
  or  bTracking, 1
cmp operation, 0
jnz @op2_down
    invoke MoveToEx, hdc, x1, y1, NULL
@op2_down:
    invoke SetROP2, hdc, R2_NOTXORPEN
    mov eax, x1
    mov x2, eax
    mov eax, y1
    mov y2, eax
 
.elseif uMsg==WM_LBUTTONUP
    and bTracking, 0
    invoke SetROP2, hdc, R2_COPYPEN
 
.elseif uMsg==WM_MOUSEMOVE
    cmp bTracking, 1
    jnz @end_move
cmp operation, 0
jnz @op2_move
    mov eax, IParam
    and eax,0ffffh 
    mov x2,eax
    mov eax, IParam
    shr eax,16 
    mov y2, eax
    invoke LineTo, hdc, x2, y2
@op2_move:
cmp operation, 1
jnz @end_move
    cmp bTracking, 1
    jnz @end_move
    invoke Ellipse, hdc, x1, y1, x2, y2
    mov eax, IParam
    and eax,0ffffh 
    mov x2,eax
    mov eax, IParam
    shr eax,16 
    mov y2, eax
    invoke Ellipse, hdc, x1, y1, x2, y2
@end_move:
 
.elseif uMsg==WM_COMMAND
mov eax,wParam 
 
.if ax==IDM_FUNC
;invoke GetDC, hWnd ; отримати дескриптор контексту пристрою для функції GDI
;mov hdc, eax   ; збереження
;invoke SelectObject,\ ;  Виберемо  в  контекст
;   hdc,hPen1                    ; нове  перо
;invoke CreateHatchBrush, \        ; створення кісті для замалювання фігури
;   HS_DIAGCROSS,\       ; стиль – штриховка під 450 зліва та справа
;      dword ptr color3                  ; значення кольору
;mov blueBrush,eax               ; збереження параметрів кісті 
;invoke SelectObject,\  ; вибір об’єкта з параметрами
;  hdc,\                         ; контекст пристрою
;    blueBrush           ; параметри кісті
;invoke Ellipse, \               ; функція малювання еліпсу
; hdc, \                         ; дескриптор контексту пристрою
;  40, \                          ; х-координата верхнього лівого куту прямокутника
;   220,\                 ; y-координата верхнього лівого куту прямокутника
;    250,\                ; х-координата нижнього правого куту прямокутника
;     95                          ;  y-координата нижнього правого куту прямокутника 
;invoke ReleaseDC, hWnd, hdc 
.elseif ax==IDM_ABOUT
invoke MessageBox,NULL,ADDR About_string,OFFSET AppName,MB_OK 
.else
invoke DestroyWindow,hWnd 
.endif 
.else
invoke DefWindowProc,hWnd,uMsg,wParam,IParam 
Ret 
.endif
xor eax,eax 
Ret 
WndProc endp 
end start
Добавлено через 5 часов 47 минут
щас попробовал запустить - че то не то, надо добавить переход
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...
.elseif uMsg==WM_LBUTTONDOWN
  mov eax, IParam
  and eax,0ffffh 
  mov x1,eax
  mov eax, IParam
  shr eax,16 
  mov y1, eax
  or  bTracking, 1
cmp operation, 0
jnz @op2_down
    invoke MoveToEx, hdc, x1, y1, NULL
    jmp @xx
@op2_down:
    invoke SetROP2, hdc, R2_NOTXORPEN
@xx:    
    mov eax, x1
    mov x2, eax
    mov eax, y1
    mov y2, eax
 
.elseif uMsg==WM_LBUTTONUP
...
иначе линия рисуемая поверх, стирает предыдущую

Вернуться к обсуждению:
Добавить рисование линии мышкой, как в Paint Assembler
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2010, 16:38
Готовые ответы и решения:

Рисование прямой линии
Сразу, прошу, на алгоритмы типа &quot;Брейзенхема&quot; не посылать. С помощью рекурсии, пытаюсь то что...

Рисование линии в видеорежиме
Написать программу, которая в видережиме 13h выводит на экран лини. произвольной длины и единичной...

Рисование по алгоритму DDA-линии
пытаюсь написать программу, которая выводит прямую у=кх+b по алгоритму DDA-линии(вроде так...

Рисование линии по двут точкам (ЦВЕТ!!!)
Люди подскажите как в этой программе поменять цвет линий. Программа работает по алгоритму...

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2010, 16:38

Рисование прямой линии, как в Paint
Доброго всем времени суток. Нужно в PictureBox нарисовать прямую линию. Рисовать надо как в...

Рисование линии как в Paint (фиксация с одного конца и следование за курсором - с другого)
private void tmImgRysownica_MouseDown(object sender, MouseEventArgs e) { if...

Рисование линии мышкой
Я делаю графический редактор и возник вопрос: как нарисовать линию? Линия должна рисоваться с...

Рисование линии мышкой на PictureBox
Всем привет. Решил побаловаться, попробовать реализовать некое подобие Paint на C#. Начал с...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru