0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 40
|
||||||
1 | ||||||
Обработка нажатия кнопки win3226.06.2013, 03:43. Показов 27044. Ответов 17
Метки нет Все метки)
(
вообщем есть задан радиус шариков
Int h = 4; R[i]=h; как именно нужно описать нажатие кнопки, чтоб при нажатии радиус увеличивался, ну хотя бы в два раза. хотел сначала увеличить на рандомное число до максимального,который бы сам устанавливал. НО random подключить не могу, вот подключенные библиотеки: #include "stdafx.h" #include "winwin.h" #include <stdlib.h> #include <stdio.h> #include <windows.h> #include<time.h> #include <math.h>
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
26.06.2013, 03:43 | |
Ответы с готовыми решениями:
17
Обработка нажатия на Button и программное нажатие правой кнопки мыши Обработка сообщений в win32 api Обработка изображения в Win32 c++ наложение фильтров Счётчик нажатия кнопки |
Модератор
![]() 12639 / 10133 / 6102
Регистрация: 18.12.2011
Сообщений: 27,169
|
||||||
26.06.2013, 08:06 | 2 | |||||
Кнопка будет посылать сообщение WM_COMMAND со значением
WPARAM равным 10000:
1
|
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
|
|
26.06.2013, 09:20 | 3 |
Не по теме...
Давно интересует просто... А почему только младшее слово обрабатывается??? На сколько мне известно из msdn, то там сказано следующие: - "В младшем слове хранится идентификатор управления, в старшем слове код уведомления" Почему уведомление не обрабатывают??? Я не знаю вот почему, но обрабатываю уведомления после идентификатора, хотя везде где встречал никто не обрабатывает.
0
|
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 40
|
|
26.06.2013, 11:28 [ТС] | 4 |
что-то не реагирует кнопка при нажатии,куда именно обработку нужно писать? сразу после объявления кнопки?
0
|
Супер-модератор
![]() ![]() |
|||||||||||||||||
26.06.2013, 15:09 | 6 | ||||||||||||||||
В функцию окна, куда ж еще... Там, где у тебя уже есть switch (message), и перечислены остальные обрабатываемые сообщения.
Нет в MSDN ничего подобного.
1
|
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 40
|
|
26.06.2013, 16:02 [ТС] | 7 |
разобрался,спасибо
ошибок не выдает, но радиус не увеличивается... Добавлено через 3 минуты мне в место стат переменной r указать свою h? или использовать r? Но где ее определить?
0
|
Модератор
![]() 12639 / 10133 / 6102
Регистрация: 18.12.2011
Сообщений: 27,169
|
||||||
26.06.2013, 16:55 | 8 | |||||
сделайте ее глобальной:
0
|
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 40
|
||||||
26.06.2013, 18:19 [ТС] | 9 | |||||
так она и так у меня глобальная
но после клика кнопка никак не реагирует
0
|
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
|
|
26.06.2013, 18:58 | 10 |
А это не то же самое, что написал и я???
Только Вы таблицей, а я словами. Разница на мой взгляд есть... Например кнопка может посылать не только нажатия в WM_COMMAND. http://msdn.microsoft.com/en-u... 85%29.aspx И тогда если обрабатывается только идентификатор будет срабатывать код написанный под ним... Добавлено через 2 минуты Вот пример выше диманстрирует описанную ошибку... case WM_COMMAND: if (LOWORD(wparam)==10000) { * * r*=2; // увеличиваем радиус вдвое, r- статическая переменная * * InvalidateRect(hwnd,NULL,true); // перерисовываем окно * * return 0; } __________________
0
|
Модератор
![]() 12639 / 10133 / 6102
Регистрация: 18.12.2011
Сообщений: 27,169
|
||||||
26.06.2013, 18:59 | 11 | |||||
0
|
Супер-модератор
![]() ![]() |
|
26.06.2013, 19:26 | 12 |
Это более понятно. Нет коверканья смысла... "В младшем слове хранится идентификатор управления, в старшем слове код уведомления" Кто переводит это всё? "идентификатор управления"...
![]() И какая мне разница, что может посылать кнопка, если тут-то разговор идет только об обработчике WM_COMMAND? Вот когда мне понадобится обработать WM_NOTIFY, с уведомлением от кнопки - там я буду смотреть, что содержится в параметрах этого сообщения. А то, что программист не завершает ветку case break-ом - это сугубо его проблема (ну, или проблема дизайна языка. Да, мне кажется - что недостатков у этой "фичи" гораздо больше, чем преимуществ), так можно долго-долго пытаться понять, что за дела происходят, если "забыть" break, скажем, перед обработкой WM_CLOSE. Вроде всё нормально, а тут
1
|
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
|
|
26.06.2013, 19:49 | 13 |
Ну насколько мне известно...
Control - это управления. Если дословно переводить... Если же по смыслу... Имеется в виду - "элемент управления". Ну как то так... ![]() Ну немного не так... ![]() Я имел в виду что в WM_COMMAND могут прийти и другие уведомления... Например получения фокуса, потеря фокуса и т.д. Конечно если установлен стиль BS_NOTIFY. И тогда всякий раз будет срабатывать код для кнопки если не обрабатывать код уведомления... Ну собсно это я так... Интересно просто было почему во всех примерах где встречал этого не делают... ![]() Только в заумных книжках в которых расбераются далеко не такие тривиальные задачи ...
0
|
46 / 43 / 5
Регистрация: 10.01.2017
Сообщений: 1,522
|
|
05.10.2020, 17:59 | 14 |
Подскажите, а в оконную процедуру случаем ни как не приходит сам HWND созданной кнопки ? Это, чтобы от HMENU кнопки/кнопок не зависить. А сравнивать именно HWND, а не LOWORD(wparam).
0
|
6574 / 4559 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
05.10.2020, 18:55 | 15 |
lParam для контролов это Handle to the control window
https://docs.microsoft.com/en-... wm-command
1
|
Модератор
![]() ![]() 5107 / 4538 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
|
|
05.10.2020, 19:10 | 16 |
Optimus11, только сравнивать
ID кнопки удобнее, чем handle . Из-за того, что ID всегда одно и то же, а handle меняется от запуска к запуску.Добавлено через 4 минуты Вам мало чисел для нумерации контролов? Кроме того, имея ID контролов, можно в ресурсах хранить строки-подсказки с номером контролов, которые будут показываться при наведении на соответствующие контролы.
1
|
46 / 43 / 5
Регистрация: 10.01.2017
Сообщений: 1,522
|
|
05.10.2020, 19:50 | 17 |
Спасибо!
Добавлено через 2 минуты Нет, не мало конечно, я просто подумал, что так будет проще: мне просто нужно условно - по щелчку мышки добавлять каждый раз кнопку - тут понятно, что HMENU просто можно каждый раз +1 прибавлять с созданием новой кнопки, а что, если мне нужно будет по щелчку удалить какую то произвольную кнопку, HMENU тогда всех последующих кнопок по хорошему нужно пересчитывать, а что то не очень хочется.
0
|
Модератор
![]() ![]() 5107 / 4538 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
|
|
05.10.2020, 20:02 | 18 |
Optimus11, зачем пересчитывать? Есть функция для этого
![]()
1
|
05.10.2020, 20:02 | |
Помогаю со студенческими работами здесь
18
Обработка нажатия мышки и клавиатуры Удаление кнопки после ее нажатия Отсутствие отображения нажатия на кнопки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |