Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2022, 12:41   #1
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию Отловить попытку нажатия "button".

Здравствуйте! Вновь возникли трудности следующего характера:
Цитата:
Окно приложения без заголовка с рамкой стиля кнопки сообщает о форматировании гибкого диска и содержит кнопку "Прекратить". При попытке нажать на кнопку изменить текст сообщения и переместить кнопку в другое место.
Я создал окно так:
Код:
hwnd = CreateWindow(szMainClass, szTitle,
		WS_POPUP | WS_BORDER,
		szWindow.left, szWindow.top,
		szWindow.right, szWindow.bottom,
		NULL, 0, hInst, NULL)
Не совсем ясно о каком окне идёт речь, думаю всё же, что о перекрывающем окне, но тогда как его создать без заголовка, но с рамкой, возможно, нужно указать стиль окна, как WS_OVRLAPPED, хотя я не уверен, возможно, кто-то кто по опытней подскажет. Стиль кнопки - это я так понимаю имеется ввиду класс окна?
С интерфейсом разобрались, теперь к главному, я полагал так: в элемент управления "static" вывести сообщение, но, видимо, изменить это сообщение уже нельзя так как этот элемент управления не имеет сообщений и оповещений, я прав?

Ну и условие "При попытке нажать на кнопку", что это значит, как понять, что это попытка нажать на кнопку? Думал так, если отловить сообщение WM_MOUSEMOVE то можно сделать предположение, что пользователь хочет нажать на кнопку, но во-первых отловить сообщение от кнопки с помощью WM_MOUSEMOVE не получается, во-вторых, возможно, он и не собирается нажимать на кнопку, а лишь на мгновение поместил курсор на кнопку. Как-то сложно получается, не могу решить сам, буду рад любому совету.
Думал о захвате кнопки или это тоже не вариант?

Из всего этого я понял только про переместить кнопку, как вывести сообщение(тут есть вариант),а как его изменить, не знаю.)
apofioz вне форума Ответить с цитированием
Старый 25.09.2022, 13:28   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
я прав
Нет


Цитата:
Сообщение от apofioz Посмотреть сообщение
Думал о захвате кнопки или это тоже не вариант?
Зачем? Есть же https://learn.microsoft.com/en-us/wi...-notifications
waleri вне форума Ответить с цитированием
Старый 26.09.2022, 05:12   #3
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Нет
Ёмко однако.


Цитата:
Сообщение от waleri Посмотреть сообщение
Зачем? Есть же
А что конкретно есть-то?
apofioz вне форума Ответить с цитированием
Старый 26.09.2022, 06:26   #4
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Если речь идёт об оповещении BN_CLECKED, то оно получается родительским окном кнопки по факту совершённого действия над кнопкой т.е. тогда когда я на неё нажму. Если бы всё было так просто я бы и спрашивать не стал, но в условии сказано "При попытке нажать на кнопку" я понимаю это как действие над кнопкой, которое ещё не выполнилось, но вот-вот должно выполниться. А если это так, то сообщение WM_COMMAND для кнопки ещё не отправлялось. Может быть я условие не правильно понял, не знаю.
Хотя, если честно не знаю, как можно отследить ПОПЫТКУ НАЖАТИЯ кнопки, просветите, если возможно.
С BN_CLECKED я написал, только объект "static" заменил на "button" со стелем кнопки BS_TEXT, сделал эту кнопку не активной и всё работает. Думаю, можно сделать ещё так: создать кнопку со стелем BS_GROUPBOX она будет содержать сообщение, а внутри создать кнопку "Прекратить", так как в условии требования об использовании каких-либо конкретных объектов не уточнялись.
Хочется понять правильно я мыслю или нет.
apofioz вне форума Ответить с цитированием
Старый 26.09.2022, 06:42   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Смотря что понимать под попыткой нажать кнопку. Возможно достаточно ограничиться получением координат курсора мыши на экране (окне) и отслеживать попадания курсора в область кнопки. Тогда оповещения от кнопки не нужны будут совсем.
macomics вне форума Ответить с цитированием
Старый 26.09.2022, 06:57   #6
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Смотря что понимать под попыткой нажать кнопку.
Вот это я и пытаюсь понять, если так неоднозначно дано условие, то как его можно продолжать решать. Зачем кнопку перемещать, тоже не ясно, как её перемещать случайно выбирать координаты или достаточно по углам её перемешать, левый верхний, правый нижний...
apofioz вне форума Ответить с цитированием
Старый 26.09.2022, 07:29   #7
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Как раз на мой способ и намекает необходимость перемещения. Вы предупреждаете любую попытку нажатия на кнопку анализируя координаты курсора и убираете из под него кнопку.
macomics вне форума Ответить с цитированием
Старый 26.09.2022, 09:04   #8
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Как раз на мой способ и намекает необходимость перемещения. Вы предупреждаете любую попытку нажатия на кнопку анализируя координаты курсора и убираете из под него кнопку.
Сделал так:
Код:
case WM_SETCURSOR:
	{
		if ((HWND)wParam == hStopButton)
			SendMessage(hStopButton, BM_CLICK, 0, 0L);
		break;
	}
осталось только перемещение кнопки оформить качественно.
apofioz вне форума Ответить с цитированием
Старый 26.09.2022, 17:08   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
как можно отследить ПОПЫТКУ НАЖАТИЯ кнопки, просветите, если возможно
Ну прочитайте уже документацию: https://learn.microsoft.com/en-us/wi...-hotitemchange
waleri вне форума Ответить с цитированием
Старый 27.09.2022, 05:21   #10
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Ну прочитайте уже документацию:
Я, вроде бы, уже решил. А от ссылки легче не стало я по буржуйски не понимаю.
apofioz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо написать "таймер", который будет запускаться при нажатии кнопки "Start", приостанавливаться на "Pause", и сбрасываться на "Reset" billiejean78 JavaScript, Ajax 1 03.09.2021 08:58
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" Бахтиёр1916 Windows 1 05.04.2017 12:53
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
System.Windows.Forms.Button" не содержит определение для "Color". Вэйлинк C# (си шарп) 2 04.11.2014 12:15
Как "повесить " передачу данных из формы на событие нажатия кнопки типа "button" ? vedro-compota JavaScript, Ajax 10 14.12.2010 21:05