Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294

Обработка зажатой клавиши

18.08.2017, 23:21. Показов 4978. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, в программе необходимо реализовать следующее:
1) При запуске главного окна, появляется кнопка с текстом "КЛАВИШИ ОТЖАТЫ"
2) Как только происходит нажатие клавиши(не отпуская клавишу) сообщение меняется на "КЛАВИШИ ЗАЖАТЫ", отпуская клавишу, сообщение меняется на исходное.
Вопрос. Как обработать "удержание" клавиши? Спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.08.2017, 23:21
Ответы с готовыми решениями:

Макрос для зажатой кнопки мыши
Всем привет. Собственно интересует как сделать чтобы при нажатие(удержании) кнопки обрабатывался макрос. Изучать программирование начал...

Блок зажатия, прервать поток сообщений от зажатой кнопки
#include <windows.h> #include <string> #include <fstream> #include <iostream> using namespace std; int main ( int argc, char...

Хук клавиатуры - как отличать события WM_KEYDOWN и WM_KEYUP при зажатой ALT?
Сделал хук для клавиатуры, столкнулся с проблемой: при зажатой клавише ALT перестают генерироваться события WM_KEYDOWN или по крайней мере...

4
18 / 17 / 16
Регистрация: 04.07.2017
Сообщений: 36
19.08.2017, 14:04
Лучший ответ Сообщение было отмечено Kurtis как решение

Решение

Цитата Сообщение от Kurtis Посмотреть сообщение
Как обработать "удержание" клавиши?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <CommCtrl.h>
#pragma comment(lib, "comctl32")
//..
//...
    HWND hButton = CreateWindow(L"button" // твоя кнопка
    SUBCLASSPROC btn_sub = [](HWND hwnd, UINT msg, WPARAM wParam,
                            LPARAM lParam, UINT_PTR, DWORD_PTR) -> LRESULT
    {
        if(msg == WM_LBUTTONDOWN)
            SetWindowTextA(hwnd, "КНОПКА ЗАЖАТА");
        if(msg == WM_LBUTTONUP)
            SetWindowTextA(hwnd, "КНОПКА ОТЖАТА");
        return DefSubclassProc(hwnd, msg, wParam, lParam);
    };
    SetWindowSubclass(hButton, btn_sub, 0, 0);
Добавлено через 3 минуты
остается только обработать нажатие клавиш, если нужно...
1
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
19.08.2017, 18:53  [ТС]
Quaentor, не реализован процесс зажатия клавиши, как это сделать?
0
18 / 17 / 16
Регистрация: 04.07.2017
Сообщений: 36
19.08.2017, 19:00
Цитата Сообщение от Kurtis Посмотреть сообщение
зажатия клавиши, как это сделать
Насколько мне известно, только от пробела нажимается
C++
1
2
3
4
5
6
7
8
9
    SUBCLASSPROC btn_sub = [](HWND hwnd, UINT msg, WPARAM wParam,
                              LPARAM lParam, UINT_PTR, DWORD_PTR) -> LRESULT
    {
        if(msg == WM_LBUTTONDOWN || (msg==WM_KEYDOWN && wParam==VK_SPACE))
            SetWindowTextA(hwnd, "КНОПКА ЗАЖАТА");
        if(msg == WM_LBUTTONUP || (msg == WM_KEYUP && wParam == VK_SPACE))
            SetWindowTextA(hwnd, "КНОПКА ОТЖАТА");
        return DefSubclassProc(hwnd, msg, wParam, lParam);
    };
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
19.08.2017, 20:55  [ТС]
Quaentor, простите, может я некорректно выразился, вот задача:
8. В окне приложения отобразить кнопку "Клавиши отжаты". При нажатии любой клавиши мыши над рабочей областью окна эта кнопка исчезает и под курсором мыши появляется кнопка "Клавиша нажата". 11ри отжатии клавиши мыши вернуться к исходному состоянию.
Сделано все кроме, отжатия. Т.е. сейчас реализовал по клику, но это неверно...

Добавлено через 1 час 17 минут
Quaentor, попробовал еще так, но не срабатывает, почему?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
case WM_LBUTTONDOWN:
        {
            switch (wParam)
            {
            case VK_LBUTTON:
                DestroyWindow(hButton);
                hButton = CreateWindow("button", "Клавиши НАЖАТЫ", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
                    xPos, yPos, 150, 50, hwnd,
                    (HMENU)NULL, hInst, NULL);
                break;
            }
    case WM_LBUTTONUP:
    {
        switch (wParam)
        {
        case VK_LBUTTON:
            DestroyWindow(hButton);
            hButton = CreateWindow("button", "Клавиши ОТЖАТЫ", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
                10, 10, 150, 50, hwnd,
                (HMENU)NULL, hInst, NULL);
            break;
        }
    }


Добавлено через 30 минут
Ошибку исправил. Тема не актуальна.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.08.2017, 20:55
Помогаю со студенческими работами здесь

Определение зажатой клавиши.
Доброго времени суток. Какой функцией можно определить зажатую клавишу. Или узнать зажата ли определенная клавиша.

Событие зажатой клавиши
Можно ли как-то проверять зажата ли клавиша shift, alt?? событие keypress не обрабатывает эти клавиши. И если зажата, то выполнять какую-то...

Обработка нажатия клавиши
нужно чтоб по нажатию F2 выполнялось определенное действие. данный код - не работает. подскажите, пожалуйста, как правильно procedure...

Обработка клавиши Esc
Не могу найти как обработать клавишу Esc. Цикл повторяется пока не будет нажата эта клавиша, после нажатия выводятся данные о поле...

Обработка нажатия клавиши
Дело вот в чем, существует куча страниц в Silverlight, открываются они все на MainPage через &lt;sdk:Frame/&gt; На двух страницах есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru