|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 28, 2003 21:30:29 Проблема эта, как мне кажется, немного нестандартна! А нестандартна потому, что я сверяюсь уже по второй книге и рабочей проге - все равно ничего не работает!!! Собственно в чем дело: Решил воспользоваться акселераторами, а не получается ! просто не работают они! Я сейчас буду объяснять, как я делаю, а вы(пожалуйста) поправте где я не прав! Вобщем создаю я файл ресурсов с меню(как полагается)(в файле не только меню, неподумайте, там и диалоговое окно и .... ну все как полагается):) ... #define VK_F12 0x7B ... MENU1 MENU { POPUP "Help" { MENUITEM "About/t", 105 } } ... ACCEL1 ACCELERATORS { VK_F12, 105, VIRTKEY, NOINVERT } ... Далее в самой программе в разделе DATA указываю ... TABACC DD ? NAMACC DB "ACCEL1",0 HINST DD ? ACC DD ? ... В разделе кода пишу: ... START: PUSH 0 CALL GetModuleHandleA@4 MOV [HINST],EAX PUSH OFFSET NAMACC PUSH [HINST] CALL LoadAcceleratorsA@8 MOV [ACC],EAX ... Затем делаю такой обработчик событий(диалоговое окно у меня немадальное): ... MSG_LOOP: PUSH 0 PUSH 0 PUSH 0 PUSH OFFSET MSG CALL GetMessageA@16 CMP EAX,0 JE END_LOOP PUSH OFFSET MSG PUSH [ACC] PUSH [NEWHWND] - получил при создании диалогового окна (CreatoDialogParam) CALL TranslateAcceleratorA@12 CMP EAX,0 JNE MSG_LOOP PUSH OFFSET MSG CALL TranslateMessage@4 PUSH OFFSET MSG CALL DispatchMessageA@4 JMP MSG_LOOP END_LOOP: PUSH 0 CALL ExitProcess@4 ... В процедуре окна, сообщение при клике на меню Help->About появляется обычное MessageBox сообщение! Но при нажатии на кнопку F12 НИЧЕГО не происходит! я уже как только не пробовал! в двух(повторюсь) книгах сверял... ничего! помогите! |
|
|
Дата: Авг 29, 2003 20:55:06 Что ниужели никто не сталкивался с подобной проблемой?? Ну хоть скажите правильно я все сделал??? |
|
|
Дата: Авг 29, 2003 21:02:49 Sergey Зайди на сайт www.dmkpress.ru и скачай файлы для книги Зубкова "Асма для ..." вроде была реализация... |
|
|
Дата: Авг 29, 2003 21:24:52 · Поправил: AsmGuru62 Все ли функции возвращают правильные значения? Может быть LoadAcceleratorA() не может загрузить таблицу? --- Кроме того, не модальный диалог связан с вызовом IsDialogMessage()... --- И ещё: как выглядит сам обработчик. DLGPROC и WNDPROC - это разные обработчики. DLGPROC возвращает BOOL, а WNDPROC - LRESULT. |
|
|
Дата: Авг 29, 2003 21:31:07 KiNDeR у меня, кстати, ихняя книга какраз таки и лежит под носом! я с ней уже сверялся не один раз просматривал!! AsmGuru62 да нет вроде таблица грузится я ставил проверку на ноль(типа если ноль то выход!) все нормально работало! ???? |
|
|
Дата: Авг 29, 2003 21:32:41 AsmGuru62 IsDialogMessage()... У мне до этого был пример из книги я там обработка сообщенийй была как я написал и все работало!! поэтому-то я и застрял!........ |
|
|
Дата: Авг 29, 2003 21:34:17 |
|
|
Дата: Авг 29, 2003 21:35:11 т.е. разные обработчики! не хочешь же ты сказать, что все зависит от названия??? :)) У меня просто стандартная процедура! которая обрабатывает сообщения от окна! |
|
|
Дата: Авг 29, 2003 21:41:57 KiNDeR Лови! и как раз у меня к тебе будет еще пару вопросов по этой проге! Она у меня, так сказать, первая после теории и ... поэтому может немного смешная и не доделанная! ну да ладно!! Подскажешь как сделать чтобы в строке эдит (маленькой серой, где ридонли, не ставился курсор) |
|
|
Дата: Авг 29, 2003 22:12:03 · Поправил: KiNDeR Подскажешь как сделать чтобы в строке эдит (маленькой серой, где ридонли, не ставился курсор) Sergey Сделай ее не активной то есть "дизабле" И это так, на вскидку... Функция TranslateAcceleratorA выпониться только тогда когда, диалог закроешь, перенеси ее обработку в процедуру диалога. Я еще подумаю и скажу... |
|
|
Дата: Авг 29, 2003 22:20:16 · Поправил: KiNDeR Sergey Для функции DialogBoxParam, функцию ShowWindow вызывать не нужно... |
|
|
Дата: Авг 30, 2003 19:55:11 KiNDeR Насчет последнего, цитата: 3. Для того чтобы немодальный диалог появился на экране, нужно либо указать у него свойство WS_VISIBLE, либо после создания диалога выполнить команду ShowWindow. Я бы не указывал эту функцию если бы не прочитал это! ?? И кстати у этого же авнора функция TranslateAcceleratorA тоже используется как у меня в примере..... я же как раз и говорю, что что-то здесь не то! либо авторы ошибаются(причем оба?), либо я косячу... У меня есть еще прога в которой тоже с акселераторами(пример, как раз, из главы с диалоговыми окнами) --- так она работает??!! Нипайму я ничего..... |
|
|
Дата: Авг 30, 2003 23:10:01 Sergey KiNDeR совершенно прав. DialogBoxParam покажет диалог вскоре после WM_INITDIALOG даже без WS_VISIBLE в шаблоне, т.е. ShowWindow лишний раз вызывать не обязательно. Почитайте описание DialogBox и DialogBoxParam. |
|
|
Дата: Авг 31, 2003 12:29:01 Sergey Ты прогони свою прогу под отладчиком. И посмотри как она себя ведет. Или поставь бряк на TranslateAcceleratorA и посмотри где прервется, а прервется где угодно только не в твоей программе. Хотя прервется и в тоей, когда диалог закроешь. Лучше юзай RegisterHotKey вместо акселераторов. RSDN.RU выдает кучу ссылок на запрос "Акселераторы в диалоге", но там описание только под си. Если интересно, то можешь покопать... |
|
|
Дата: Авг 31, 2003 17:38:22 Ok!! Спасибо . будем пробовать! Ну а хоть узнать в чем то причина была можно? другая то прога работает?? только в ней нет ничего кроме кнопки.. может быть это из-за того, что я ставлю СетФокус на строку редактирования?? Не сочтите это за назойливость, просто я хочу разобраться во всем этом! Чтобы в будущем небыло проблем :)) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.068 |