
Быстрый поиск
Введите фрагмент названия статьи для поиска
Окно с возможностью клика сквозь него
15.11.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter

Окно с возможностью клика сквозь него
Некоторые улучшайзеры интерфейсов типа Actual Window Manager позволяют накладывать на окна так называемый эффект "призрачности". В этом режиме окно продолжает отображаться на экране, но все клики мышкой на области окна проходят сквозь него, как будто окна вовсе нет. Давайте разберем, как это делается. А для большего эффекта "призрачное" окно можно сделать полупрозрачным.
Читать статью целиком »
Просмотров: 1843 | Комментариев: 0
Как программно свернуть все окна
04.09.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
Есть разные способы программно свернуть все открытые окна. Простой и топорный вариант решения - эмуляция нажатия клавиш Win+M, которые и выполняют команду "Свернуть все окна". Делается это через последовательность вызовов keybd_event.Code (Assembler) : Убрать нумерацию
- ; Эмуляция нажатия клавиш Win+M
- invoke keybd_event,VK_LWIN,0,0,NULL
- invoke Sleep,1
- invoke keybd_event,'M',0,0,NULL
- invoke Sleep,1
- invoke keybd_event,VK_LWIN,0,KEYEVENTF_KEYUP,NULL
Code (Assembler) : Убрать нумерацию
- ; Эмуляция нажатия клавиш Win+Shift+M
- invoke keybd_event,VK_LWIN,0,0,NULL
- invoke Sleep,1
- invoke keybd_event,VK_LSHIFT,0,0,NULL
- invoke Sleep,1
- invoke keybd_event,'M',0,0,NULL
- invoke Sleep,1
- invoke keybd_event,VK_LSHIFT,0,KEYEVENTF_KEYUP,NULL
- invoke Sleep,1
- invoke keybd_event,VK_LWIN,0,KEYEVENTF_KEYUP,NULL
Читать статью целиком »
Просмотров: 2222 | Комментариев: 5
Создание выпадающего списка (Combobox) с иконками
20.08.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
Ранее я рассказывал, как сделать простой комбобокс. Сейчас давайте усовершенствуем его, а точнее дополним строки списка иконками. Я уже делал подобное с меню, тут принцип точно такой же. К стилям комбобокса в ресурсах добавляется CBS_OWNERDRAWFIXED, что в дальнейшем позволит нам самостоятельно обрабатывать процесс отрисовки каждой строки выпадающего списка. Теорию и принцип работы вы можете почитать по приведенной ссылке, повторяться я не буду. В обработчик окна, в котором находится комбобокс, добавляется реакция на два события - это WM_MEASUREITEM, которое приходит перед отрисовкой строки, и WM_DRAWITEM, при котором мы будем рисовать эту строку.Code (Assembler) : Убрать нумерацию
- cmp [msg],WM_MEASUREITEM
- je wm_measure
- cmp [msg],WM_DRAWITEM
- je wm_drawitem
Code (Assembler) : Убрать нумерацию
- wm_measure:
- ; Отрисовываем строку комбобокса?
- mov ebx,[lparam]
- cmp [ebx+MEASUREITEMSTRUCT.CtlType],ODT_COMBOBOX
- jne processed
- ; Высота строки комбобокса с учетом размера иконки
- mov [ebx+MEASUREITEMSTRUCT.itemHeight],26
- jmp processed
Читать статью целиком »
Просмотров: 1877 | Комментариев: 2
Ограничение изменения размеров окна
10.06.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
Подавляющее большинство программ под Windows имеют окна, размер которых можно менять. Это хорошо и правильно, это основа концепции системы. Но в некоторых случаях надо сделать так, чтобы окно приложения нельзя было уменьшить дальше определенного размера, например, чтобы всегда была видна строка меню или чтобы гарантированно оставалось место для других элементов интерфейса. Также теоретически могут быть ограничения и на максимальный размер окна, хотя мне на ум не приходят ситуации, когда это нужно.Ограничение изменения размера окна реализуется через обработку сообщения WM_SIZING, которое приходит главному окну при попытке изменить его размер путем перетаскивания границ или нажатия на кнопку разворачивания окна. В lparam сообщения передаются новые координаты окна, которые будут установлены после изменения его размера. Здесь можно проверить, не выходят ли они за допустимые границы и, в случае необходимости, скорректировать их до нужных значений.
Code (Assembler) : Убрать нумерацию
- ; Обработчик сообщений окна
- cmp [msg],WM_SIZING
- je resize_window
- ...
- ...
- ...
- resize_window:
- ; Минимальные и максимальные размеры окна
- MAX_X = 400
- MIN_X = 200
- MAX_Y = 250
- MIN_Y = 80
- ; В регистре EDI указатель на структуру координат окна
- mov edi,[lparam]
- ; Проверить максимальную ширину
- mov edx,[edi+RECT.right]
- sub edx,[edi+RECT.left]
- cmp edx,MAX_X
- jbe @f
- ; Установить максимальную ширину
- mov eax,[edi+RECT.left]
- add eax,MAX_X
- mov [edi+RECT.right],eax
- @@:
- ; Проверить минимальную ширину
- cmp edx,MIN_X
- jae @f
- ; Установить минимальную ширину
- mov eax,[edi+RECT.left]
- add eax,MIN_X
- mov [edi+RECT.right],eax
- @@:
- ; Проверить максимальную высоту
- mov edx,[edi+RECT.bottom]
- sub edx,[edi+RECT.top]
- cmp edx,MAX_Y
- jbe @f
- ; Установить максимальную высоту
- mov eax,[edi+RECT.top]
- add eax,MAX_Y
- mov [edi+RECT.bottom],eax
- @@:
- ; Проверить минимальную высоту
- cmp edx,MIN_Y
- jae @f
- ; Установить минимальную высоту
- mov eax,[edi+RECT.top]
- add eax,MIN_Y
- mov [edi+RECT.bottom],eax
- @@:
- jmp processed
Читать статью целиком »
Просмотров: 2448 | Комментариев: 2
Обработка перетаскивания ссылок в окно приложения
16.04.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter

Обработка перетаскивания ссылок в окно приложения
С перетаскиванием файлов в окно приложения мы уже давно разобрались, это реализуется несложно. Теперь давайте разберем более интересную задачу, а именно перетаскивание в окно приложения ссылок или текста из браузеров, текстовых редакторов и других программ.
Читать статью целиком »
Просмотров: 2089 | Комментариев: 0


