Горячие клавиши

Тема в разделе "WASM.WIN32", создана пользователем EvilsInterrupt, 11 апр 2005.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Здрасьте.



    Глянул я на исхдники на сайти, и в Platform SDK глянул по описании RegisterHotKey и сообщений WM_SETHOTKEY.., поиск по форуму выдал темы которые тоже не дали мне понимания, как же все таки работать с горячими клавишами?



    А нужно мне вот что:

    У меня есть основное диалоговое окно, надо по нажатию "Ctrl+E" вызвать дочернее диалоговое окно, в котором эта комбинация уже бы не работала. При этом, хотелось бы чтобы горячая клавиша была бы доступно только когда запущено мое приложение.



    Может ктото опишет, каковы должны быть мои действия?
     
  2. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    напрмер в файле *.rc
    Код (Text):
    1.  
    2. ...
    3. MENUACC ACCELERATORS
    4. BEGIN
    5.   27,IDM_EXIT,VIRTKEY,NOINVERT
    6.   79,IDM_OPEN,VIRTKEY,NOINVERT
    7.   "^A",IDM_PROG
    8. END
    9. ...
    10.  


    в код будут приходить соотв. IDM

    Только диалоговое окно должно быть совмещено с обычным окном и иметь петлю выборки сообщений, чтоб клавиши работали.



    А можно через WM_KEYDOWN прикрутить самому.
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    >WM_KEYDOWN

    Пробывал у меня глупо получилось. Точнее вообще не попадает в код где обработка этого сообщения.



    Если сделать RegisterHotKey, то по аварийному завершению проги, я думаю регистрация в системе клавиши останется
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Сделал так:



    В обработке wm_initdialog оконной процы основного окна, регистрирую нужные мне горячие клавиши. Далее в WM_HOTKEY по идешкам их отлавливаю и обрабатываю так:

    1. ctrl+d - MessageBox с about

    2. ctrl+e - настройки параметра 1

    3. ctrl+k - настройки параметра 2



    в wm_close я убиваю их регистрацию



    Что не нравится:

    нажму ctrl+d появляется about, верно! но если в этот момент нажать на ctrl+e то поверх about появляется окно с настройками параметра 1, жму далее ctrl+k появляется еще окно с настройками параметра 2.



    Что я бы хотел:

    чтобы понажатию очередной горячей клавиши ноевозможно было ее обработать, пока работает другая



    Как это можно решить?
     
  5. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    заведи флажок "нажата горячая клавиша".

    Как нажмешь, если нет флажка-> в проц.->ставишь его.

    Как выйдешь снимаешь флаг.
     
  6. vinnie_pooh

    vinnie_pooh New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    98
    Мне вот еще кажется, что поскольку горячие клавиши общесистемные, то диалоги будут вызываться, даже если твое приложение неактивно. К тому же твой MessageBox не будет работать, если запущен SoftICE :)

    А чем акселераторы не подходят?
     
  7. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    yureckor

    спасибо, но до этого как обновить эту страничку и увидеть твой совет. Я уже сделал этот самый флажок.



    vinnie_pooh

    Я это кой как понял, вчера весь день сдк читал, а ты мне такую сложность предлагаешь! :)))



    спасибо, решил вроде все что мне надо
     
  8. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    2 EvilsInterrupt



    Нет.
     
  9. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    спасибо, я перепутал с sethotkey`ем