Перенаправление хоткеев в главное окно с активного плейлиста

Автор judelaw, 20 марта 2018, 13:40:19

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

judelaw

дополнение к 3469 (Изменение : Теперь при активном плейлисте "отрабатываются" горячие клавиши основного окна. )
Пока не все отрабатываются. С Alt не отрабатываются и ctrl+enter shft+enter тоже нет

примерный патч (из замеченных проблем - вызов главного меню по Alt)
Index: src/apps/mplayerc/PlayerPlaylistBar.cpp
===================================================================
--- src/apps/mplayerc/PlayerPlaylistBar.cpp    (revision 3479)
+++ src/apps/mplayerc/PlayerPlaylistBar.cpp    (working copy)
@@ -780,6 +780,10 @@
 BOOL CPlayerPlaylistBar::PreTranslateMessage(MSG* pMsg)
 {
     if (IsWindow(pMsg->hwnd) && IsVisible() && pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST) {
+        if (pMsg->message == WM_SYSKEYDOWN || pMsg->message == WM_SYSKEYUP) { // Alt + anykey
+            GetParentFrame()->PreTranslateMessage(pMsg);
+            return TRUE;
+        }
         if (pMsg->message == WM_KEYDOWN) {
             switch (pMsg->wParam) {
             case VK_ESCAPE:
@@ -786,6 +790,10 @@
                 GetParentFrame()->ShowControlBar(this, FALSE, TRUE);
                 return TRUE;
             case VK_RETURN:
+                if (GetKeyState(VK_CONTROL) < 0 || GetKeyState(VK_SHIFT) < 0) { // Ctrl+Enter или Shft+Enter
+                    GetParentFrame()->PreTranslateMessage(pMsg);
+                    return TRUE;
+                }
                 if (m_list.GetSelectedCount() == 1) {
                     const int item = m_list.GetNextItem(-1, LVNI_SELECTED);
 

Aleksoid1978

Да и не надо все. Хватит того что есть. Ну нафига там нажатие Alt ...
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

judelaw

по-умолчанию в плеере назначено около двух десятков хоткеев с Alt

все они не работают с плейлиста

Aleksoid1978

AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

V0lt

Согласен, про то что все не надо. Желательно только актуальные команды, которые не ломают работу плейлиста.

judelaw

при активном плейлисте вообще все команды перехватываются и ненужные для плейлиста должны передаваться на обработку в главное окно. И только нужные для плейлиста не транслироваться в главное.

Принцип тут такой: не моё - передаю дальше.
А сейчас при активном плейлисте куча команд для главного окна по горячим клавишам не работает.
Alt+I, Alt+ENter?, Alt+1/2/3/4 и тп не работают. Нужно сначала фокус на главное окно сменить, только тогда.
[merge_posts_bbcode]Добавлено: 2018-03-21 13:30:47[/merge_posts_bbcode]

так что решаем?
пока не трогаем?

если плейлист активен (фокус на нем), то все что мы нажали идет сюда: CPlayerPlaylistBar::PreTranslateMessage(MSG* pMsg)

тут мы отслеживаем что нажато, и если нажаты:
Esc, Del, Ctrl+A, Ctrl+I - выполняем определенные команды

если нажаты:
VK_UP
VK_DOWN:
VK_HOME:
VK_END:
VK_PRIOR:
VK_NEXT:
VK_DELETE:

передаем классу родителю
return CSizingControlBarG::PreTranslateMessage(pMsg);

ну а все остальные команды я считаю нужно передавать главному окну
m_pMainFrame->PreTranslateMessage(pMsg);

или я чего недопонимаю?

Aleksoid1978

Ну давай уже добавляй. Выстрелит если что(не будет работать что-то в плейлисте) - частично откатим/переделаем.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215