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

Discussion in 'WASM.WIN32' started by EvilsInterrupt, Apr 11, 2005.

  1. EvilsInterrupt

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

    Blog Posts:
    0
    Joined:
    Oct 28, 2003
    Messages:
    2,428
    Location:
    Russia
    Здрасьте.



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



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

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



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

    yureckor New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2004
    Messages:
    494
    Location:
    Russia
    напрмер в файле *.rc
    Code (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 Постигающий азы дзена

    Blog Posts:
    0
    Joined:
    Oct 28, 2003
    Messages:
    2,428
    Location:
    Russia
    >WM_KEYDOWN

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



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

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

    Blog Posts:
    0
    Joined:
    Oct 28, 2003
    Messages:
    2,428
    Location:
    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

    Blog Posts:
    0
    Joined:
    Feb 25, 2004
    Messages:
    494
    Location:
    Russia
    заведи флажок "нажата горячая клавиша".

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

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

    vinnie_pooh New Member

    Blog Posts:
    0
    Joined:
    Jun 30, 2004
    Messages:
    98
    Мне вот еще кажется, что поскольку горячие клавиши общесистемные, то диалоги будут вызываться, даже если твое приложение неактивно. К тому же твой MessageBox не будет работать, если запущен SoftICE :)

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

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

    Blog Posts:
    0
    Joined:
    Oct 28, 2003
    Messages:
    2,428
    Location:
    Russia
    yureckor

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



    vinnie_pooh

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



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

    NoName New Member

    Blog Posts:
    0
    Joined:
    Aug 1, 2004
    Messages:
    1,229
    2 EvilsInterrupt



    Нет.
     
  9. EvilsInterrupt

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

    Blog Posts:
    0
    Joined:
    Oct 28, 2003
    Messages:
    2,428
    Location:
    Russia
    спасибо, я перепутал с sethotkey`ем