|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
||||||
Обработка нажатий клавиш, как в модальном диалоговом окне16.06.2023, 09:03. Показов 5331. Ответов 26
Метки нет (Все метки)
Здравствуйте! Подскажите, пожалуйста, если нужно создать временное(POPUP) окно и в нём создать элементы управления windows(например, listbox-ы), и сделать так чтобы оно, это окно, обрабатывало сообщения так же, как это делают модальные диалоговые окна, то как это делать?
Если я правильно понял, то нужно в процедуре этого окна отлавливать сообщения WM_KEYDOWN, НАПРИМЕР ТАК: думал, создать массив дескрипторов элементов управления, которые расположены в данном окне, и, если я нажимаю на клавишу TAB, то должен перемещаться фокус с объекта на объект, но это не работает, видимо, я что-то делаю не так. Я правильно мыслю или вообще не в том направлении? Кликните здесь для просмотра всего текста
0
|
||||||
| 16.06.2023, 09:03 | |
|
Ответы с готовыми решениями:
26
Полосы прокрутки в модальном диалоговом окне Обработка формы в модальном окне
|
|
COM‐пропагандист
|
|
| 25.06.2023, 09:17 | |
|
Ничего не понял.
Функция IsDialogMessage делает то что нужно: передаёт фокус по TAB и стрелочкам. Это именно то, что нужно.
0
|
|
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|||||||||||
| 26.06.2023, 06:02 [ТС] | |||||||||||
|
Я что-то никак не дождусь ответа, как организовать прокрутку окна, но не просто окна, а окна в котором расположены стандартные элементы управления windows, в данном случае listbox-ы, я так понимаю эта тема никому не интересна...
Я хз что должна прокручивать функция ScrollWindowEx(), но у меня она ничего не прокручивает. Читал про двойную буферизацию, но, видимо, это не мой случай, не могу понять, как организовать эту работу, что я имею ввиду под работой, нужно при прокрутке окна часть объектов скрыть, часть показать. Объекты содержат информацию, хотя может быть не все объекты используются на данный момент, всё что я понял, это то что нужно действовать как-то так. Кликните здесь для просмотра всего текста
Но тогда, как организовать создание новых listbox-ов, если я прокручиваю вниз на одну строку-listbox, допустим на один listbox, один объект должен уйти за верхнюю границу окна, а снизу должен появиться новый элемент, ну или со значением, если до этого он использовался. Сделать копию окна в памяти и что дальше... при скроллинге, нужно обновить окно InvalidateRect, в сообщении WM_PAINT нужно вывести то, что сохранено в памяти в контекст устройства, но всё это очень очень туманно, не могу понять, как это сделать.... Как рисовать в совместимом контексте я понял, не ясно, как делать то, что мне нужно, то что описал выше. Ещё, как вариант, можно имитировать прокрутку так, копированием информации, если она присутствует в listbox-ах в буфер , и в случае скроллинга вверх-вниз что-то достаём из стека, что-то сохраняем в стек. Для примера прокрутка вниз, если в массиве элементов(HWND listbox) в первых позициях есть информация, то скопировать её в буфер, на её место перезаписать информацию их следующего элемента и так в цикле до последнего объекта, который находится на странице. В конце самая последняя строка должна оказаться пустой, если до этого в буфер была сохранена информация, то с вершины стека она копируется в этот объект. но это будет очень медленно, так сказать за неимением лучшего..... Кликните здесь для просмотра всего текста
0
|
|||||||||||
|
COM‐пропагандист
|
|
| 26.06.2023, 08:12 | |
|
0
|
|
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|
| 26.06.2023, 08:39 [ТС] | |
|
0
|
|
|
2737 / 892 / 331
Регистрация: 10.02.2018
Сообщений: 2,133
|
||||||
| 26.06.2023, 09:39 | ||||||
|
Liss29, если у вас один элемент уходит, а другой приходит, то можно не делать миллион контролов под все элементы. Можно сделать контролы только под видимые элементы и менять в них информацию при смене области видимости.
Я делал у себя скролинг встраиваемых диалоговых окон. Диалоги большие, а захотелось умещать их в ограниченном пространстве. На родительском диалоге создавал окно со скролами и в это окно назначал встраиваемый диалог. В окне со скролами следил за изменением его размеров, положений его скролов и вызывал для него ScrollWindow всей клиентской области. Проект использовал MFC, но оно по синтаксису очень близко к WinAPI, при желании можно разобраться. Ниже простенький класс со скролами, в который встраивались диалоги:
0
|
||||||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|||
| 27.06.2023, 04:05 [ТС] | |||
|
0
|
|||
|
11 / 11 / 11
Регистрация: 28.12.2015
Сообщений: 164
|
||||||||||||
| 09.05.2026, 18:54 | ||||||||||||
поэтому нету возможности передать hwnd окна в функцию IsDialogMessage(). Решение: В главном цикле есть переменная MSG msg. msg.hwnd - любое окно для которого пришло сообщение, в том числе и дочерние окна. Вызываем IsDialogMessage() для любого не дочернего окна:
Для этого я создаю нужное окно с флагом WS_EX_CONTROLPARENT, а в главном цикле проверяю этот флаг.
0
|
||||||||||||
| 09.05.2026, 18:54 | |
|
Отлавливание нажатий клавиш при неактивном(или свернутом) окне
Обработка нажатий клавиш Обработка нажатий клавиш Обработка нажатий клавиш Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|