
Быстрый поиск
Введите фрагмент названия статьи для поиска
Графический курсор (каретка) в поле EDIT
09.08.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодня отдохнем от системы и немного поработаем с графикой, будем делать собственный графический курсор в поле EDIT. Какого-то необычайно полезного практического применения этому нет, просто симпатичное дополнение к интерфейсу, например, к окнам нестандартной формы. Ну а что, раз уж наворотили чудо-окна, почему бы не наворотить и чудо-курсор.Начнем с теории. В отличие от "мышиного" курсора, который может легко принимать любой вид, управлять кареткой, то есть курсором в текстовом поле, не так просто. Функция CreateCaret позволяет только описывать форму для каретки, но не меняет ее изображение. Достаточно один раз попробовать, чтобы убедиться в ее бесполезности. Придется самостоятельно рисовать графическую каретку на холсте поля ввода.
Code (Assembler) : Убрать нумерацию
- ; Загрузить из ресурсов картинку
- invoke GetModuleHandle,0
- invoke LoadBitmap,eax,1
- mov [hСaret],eax
- ; Выбрать картинку для холста поля ввода
- invoke GetDlgItem,[hwnddlg],ID_EDIT
- invoke GetDC,eax
- mov [hDC],eax
- invoke CreateCompatibleDC,[hDC]
- mov [hСaretDC],eax
- invoke SelectObject,[hСaretDC],[hСaret]
- ; Получить цвет угловой точки картинки
- invoke GetPixel,[hСaretDC],0,0
- mov [bColor],eax
- ; Создать кисть с этим цветом
- invoke CreateSolidBrush,[bColor]
- mov [hBrush],eax
- ; Прибраться за собой
- invoke DeleteObject,[hСaret]
Читать статью целиком »
Просмотров: 2164 | Комментариев: 7
Работа с кнопкой Help в заголовке окна
28.07.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
В самом начале развития Windows во многих приложениях очень часто встречалась кнопка "Help" в заголовке окна. Кликнув на нее и переместив курсор на нужный элемент, пользователь мог получить подсказку, например, какие данные надо вводить в конкретное текстовое поле или что получится, если нажать какую-нибудь кнопку. Сейчас UIX-дизайнеры прокачали свои навыки, кнопка справки стала уже не так популярна, по крайней мере я не встречал ее ни в одном современном приложении. Но может быть кому-нибудь будет интересно, как ей пользоваться и как правильно обрабатывать ее сообщения. Начнем с интерфейса. Чтобы в заголовке окна появилась кнопка справки, оно должно быть изначально создано с расширенным стилем WS_EX_CONTEXTHELP. Для динамического управления кнопкой справки можно воспользоваться способом, описанным в этой статье.Из программной части нам понадобится одна структура, которую почему-то не знает коробочный FASM. Хотя, блин, чему я удивляюсь...
Code (Assembler) : Убрать нумерацию
- struct HELPINFO
- cbSize dd ?
- iContextType dd ?
- iCtrlId dd ?
- hItemHandle dd ?
- dwContextId dd ?
- MousePos POINT
- ends
Code (Assembler) : Убрать нумерацию
- .wminitdialog:
- ; Назначить контекстный идентификатор справки элементу окна
- invoke GetDlgItem,[hwnddlg],ID_BUTTON_1
- invoke SetWindowContextHelpId,eax,777
Читать статью целиком »
Просмотров: 1388 | Комментариев: 4
Системные генераторы случайных чисел
13.07.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter

Системные генераторы случайных чисел
На сайте уже выложено несколько различных алгоритмов генераторов псевдослучайных чисел. Какие-то генераторы лучше, какие-то похуже. Но когда надо сгенерировать всего пару-тройку чисел или результаты генерации не используются в критических участках кода, можно воспользоваться системными источниками псевдослучайных чисел.
Читать статью целиком »
Просмотров: 2858 | Комментариев: 26
Генератор xoshiro128 на Ассемблере
05.07.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter

Генератор xoshiro128 на Ассемблере
Семейство xoshiro (xoroshiro) - это высокоскоростные и очень эффективные алгоритмы генерации псевдослучайных чисел общего назначения с хорошим распределением. Свое название генераторы получили от используемых в них операций XOR/Shift/Rotate. Разные варианты генераторов используют для рабочего буфера разные объемы памяти, а также реализованы как в 64-битной, так и в 32-битной версии. У меня тут будет 32-битный вариант xoshiro128 с периодом 2128.
Читать статью целиком »
Просмотров: 1402 | Комментариев: 3
Обработка изменения иконок в системном трее
19.06.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
С обновлением иконок в системном трее разобрались, теперь давайте разберем, как можно отслеживать изменения в трее. Причем изменения касаются не только добавления-удаления иконок, но также изменения всплывающих подсказок и изменения иконки с сохранением ее индекса.Code (Assembler) : Убрать нумерацию
- CLSCTX_LOCAL_SERVER = 0x04
- S_OK = 0
- struct NOTIFYITEM
- pszExeName dd ?
- pszTip dd ?
- hIcon dd ?
- hWnd dd ?
- dwPreference dd ?
- uID dd ?
- guidItem rd 4
- ends
- ; GUID {D782CCBA-AFB0-43F1-94DB-FDA3779EACCB}
- IID_INotificationCB dd 0D782CCBAh
- dw 0AFB0h
- dw 043F1h
- db 094h, 0DBh, 0FDh, 0A3h, 077h, 09Eh, 0ACh, 0CBh
- ; INotificationCB interface
- struct INotificationCB
- QueryInterface dd ?
- AddRef dd ?
- Release dd ?
- ; INotificationCB
- Notify dd ?
- ends
- ; GUID {FB852B2C-6BAD-4605-9551-F15F87830935}
- IID_ITrayNotify dd 0FB852B2Ch
- dw 06BADh
- dw 04605h
- db 095h, 051h, 0F1h, 05Fh, 087h, 083h, 009h, 035h
- ; ITrayNotify interface
- struct ITrayNotify
- QueryInterface dd ?
- AddRef dd ?
- Release dd ?
- ; ITrayNotify
- RegisterCallback dd ?
- SetPreference dd ?
- EnableAutoTray dd ?
- ends
- ; GUID {25DEAD04-1EAC-4911-9E3A-AD0A4AB560FD}
- CLSID_TrayNotify dd 025DEAD04h
- dw 01EACh
- dw 04911h
- db 09Eh, 03Ah, 0ADh, 00Ah, 04Ah, 0B5h, 060h, 0FDh
- ; GUID {00000000-0000-0000-C000-000000000046}
- IID_IUnknown dd 000000000h
- dw 00000h
- dw 00000h
- db 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h
Читать статью целиком »
Просмотров: 1121 | Комментариев: 1


