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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2018, 15:48   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию не работает кнопка

Здравствуйте.
Пишу код в блокноте, компилирую в GCC.
Код:
    case WM_CREATE:{
        btnTest = CreateWindowEx(WS_EX_CLIENTEDGE, "Button", "Add", WS_CHILD | WS_VISIBLE , 170,0,60,28,
                        wnd, (HMENU)IDBTNTEST, MyInstance, NULL);
        return 0;
    }
	
    case WM_COMMAND:
        switch(LOWORD(wParam)){

			case IDBTNTEST:{
						MessageBox(wnd, "hello, button", NULL, MB_OK);
			}
        }
        return 0;
Если обьявить константу IDBTNTEST так:
Код:
#define IDBTNTEST 1025
//или так:
const int IDBTNTEST WM_USER+1;
то кнопка работает.
А если так:
Код:
#define IDBTNTEST WM_USER+1
то сообщение WM_COMMAND приходит, но кнопка не работает. case IDBTNTEST не выполняется.
Почему?
BLACK_RAIN вне форума Ответить с цитированием
Старый 08.12.2018, 16:10   #2
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

во! А со скобками работает:
Код:
#define IDBTNTEST (WM_USER+1)
Почему без скобок не работает?
BLACK_RAIN вне форума Ответить с цитированием
Старый 08.12.2018, 16:51   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

(HMENU)WM_USER + 1
Теперь понятно почему не работает?
waleri вне форума Ответить с цитированием
Старый 08.12.2018, 17:17   #4
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
(HMENU)WM_USER + 1
Теперь понятно почему не работает?
нет
BLACK_RAIN вне форума Ответить с цитированием
Старый 08.12.2018, 18:39   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

10 дом и 1я квартира в 9м доме это одно и тоже?
p51x вне форума Ответить с цитированием
Старый 08.12.2018, 19:47   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
нет
Понимаете разницу межу
(HMENU) (WM_USER + 1)
и
((HMENU)WM_USER) + 1
waleri вне форума Ответить с цитированием
Старый 09.12.2018, 09:29   #7
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Понимаете разницу между
(HMENU) (WM_USER + 1)
и
((HMENU)WM_USER) + 1
Думал, что понимаю, но выходит что не понимаю.
Код:
(HMENU)WM_USER+1 = 1028
(HMENU)WM_USER+2 = 1032
(HMENU)WM_USER+3 = 1036
(HMENU)WM_USER+4 = 1040
(HMENU)(WM_USER+1) = 1025
(HMENU)(WM_USER+2) = 1026
(HMENU)(WM_USER+3) = 1027
(HMENU)(WM_USER+4) = 1028
Странно как-то. А почему так?
Предполагаю, что это как-то связано с тем, что размер указателя на HMENU равен 4 байтам?
BLACK_RAIN вне форума Ответить с цитированием
Старый 09.12.2018, 10:22   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
А почему так?
Цитата:
Сообщение от p51x Посмотреть сообщение
10 дом и 1я квартира в 9м доме это одно и тоже?
Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
Предполагаю, что это как-то связано с тем, что размер указателя на HMENU равен 4 байтам?
Да хоть 8 байт.
Пусть указатель содержит 1024. Тогда (HMENU)(WM_USER+1) это WM_USER+1, а (HMENU)WM_USER+1, а это 1024 + sizeof(HMENU)
p51x вне форума Ответить с цитированием
Старый 09.12.2018, 10:57   #9
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Да хоть 8 байт.
Пусть указатель содержит 1024. Тогда (HMENU)(WM_USER+1) это WM_USER+1, а (HMENU)WM_USER+1, а это 1024 + sizeof(HMENU)
Это не ответ на вопрос "почему?"
BLACK_RAIN вне форума Ответить с цитированием
Старый 09.12.2018, 11:03   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Потому что
(HMENU)(WM_USER+1) = (HMENU)(1024 + 1) = (HMENU)1025
(HMENU)WM_USER+1 = (HMENU)1024 + 1 = (HMENU)(1024 + sizeof(HMENU)) = (HMENU)1028
p51x вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
тестовая программа не работает кнопка подсчитать Людмила_И JavaScript, Ajax 7 29.05.2013 10:55
Не работает кнопка tab для переключения Edit'ов Alanel' Помощь студентам 18 19.05.2013 19:26
Не правильно работает кнопка... FleXik Общие вопросы Delphi 5 13.02.2013 03:24
C#... У меня на компе работает, на других одна кнопка нет... Trane9991 Помощь студентам 1 25.03.2012 01:57
Одна кнопка работает, другая нет (добавление записей в БД из среды Delphi) ulala Помощь студентам 2 25.09.2010 19:08