Как подавить уход окна с переднего плана?
От: RealPalmman Россия http://elagin.da.ru
Дата: 02.05.07 12:09
Оценка:
Аппликуха работает на полном экране.
SetForegroundWindow( m_hWnd );
const BOOL res = ::SHFullScreen( m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON );
CRect windowRect = CRect
(
CPoint( 0, 0 ),
CPoint( GetSystemMetrics( SM_CXSCREEN ), GetSystemMetrics( SM_CYSCREEN ) )
);
MoveWindow( windowRect, TRUE );
При срабатывании напр. напоминания из календаря, выскакивает окно с текстом напоминания и кнопками "закрыть","отложить". Как можно это подавить, что бы они оставались под моей аппликухой?
Re: Как подавить уход окна с переднего плана?
От: uOlegator  
Дата: 14.05.07 15:48
Оценка:
См. функцию SetWindowPos. Ее можно использовать, например, так

SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
Re[2]: Как подавить уход окна с переднего плана?
От: mihasic Украина  
Дата: 16.05.07 13:44
Оценка:
Здравствуйте, uOlegator, Вы писали:

O>См. функцию SetWindowPos. Ее можно использовать, например, так


O>SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);


Еще может понадобится обрабатывать WM_ACTIVATE и при деактивации окна — сохранять фокус и запускать таймер, по которому восстанавливать окно (Activate) и ставить фокус. (таймер желателен, проверено на практике, иначе не работают некоторые функции ОС... правда проверялось в .NET приложении, но это суть не меняет)
Re[3]: Как подавить уход окна с переднего плана?
От: RealPalmman Россия http://elagin.da.ru
Дата: 16.05.07 14:32
Оценка:
Здравствуйте, mihasic, Вы писали:

O>>См. функцию SetWindowPos. Ее можно использовать, например, так

O>>SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
M>Еще может понадобится обрабатывать WM_ACTIVATE и при деактивации окна — сохранять фокус и запускать таймер, по которому восстанавливать окно (Activate) и ставить фокус. (таймер желателен, проверено на практике, иначе не работают некоторые функции ОС... правда проверялось в .NET приложении, но это суть не меняет)

Смысл в том, что из главного окна открывается еще одно, на полный экран и по нажатию кнопки, окно сворачивается:
Пока я сделал так:
LRESULT CMainFrame::OnCommand( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/ )
{
    if( _btnCheck2.GetCheck() == BST_CHECKED )
    {
        _realyHide = true; // Необходимо свернуть окно
        ShowWindow( SW_HIDE );
    }
}

LRESULT CMainFrame::OnActivate( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/ )
{
    if( LOWORD(wParam) == WA_ACTIVE )
    {
        _realyHide = false;
        SHFullScreen( m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON );

        const CRect windowRect = CRect
                    (
                        CPoint( 0 , 0 ),
                        CPoint( GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN) )
                    );
        MoveWindow( windowRect );
    }
    if( LOWORD(wParam) == WA_INACTIVE )
    {
        //        Подавление выскакивания напоминалки
        if( !_realyHide )
        {
            SetWindowPos( HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE );
            SetFocus();
        }
        else
        {
            SHFullScreen( m_hWnd, SHFS_SHOWTASKBAR | SHFS_SHOWSTARTICON | SHFS_SHOWSIPBUTTON );
        }

        BOOL res = FALSE;
    }
    return 0;
}

Но сейчас работает таким образом: после срабатывания напомниналки, получаю WA_INACTIVE, при выполнении SetWindowPos или SetFocus(), получаю сразу WA_ACTIVE
И окно оказывается сверху. При надатии на окно пером получаю почему-то WA_INACTIVE и все начинается сначала, окно выскакивает наверх.
Получается, что при нажатии на экран, несмотря на то, что я делал SetFocus, в фокусе все равно остается окно с напоминалкой?
Пожалуйста, объясните для чего нужно таймер, какие функции не работают?
Re[4]: Как подавить уход окна с переднего плана?
От: Аноним  
Дата: 17.05.07 09:11
Оценка:
mihasic использовал таймер потому что ему так подсказали
(В том решении таймер был нужен из-за того, что активация происходила в .NETовском обработчике OnGotFocus; поскольку это теме не относится, объянять почему было так сделано тут не буду)

ПС Сорри за некоторый ОФФ
Re: Как подавить уход окна с переднего плана?
От: Кодт Россия  
Дата: 17.05.07 14:22
Оценка: 1 (1)
Здравствуйте, RealPalmman, Вы писали:

RP>При срабатывании напр. напоминания из календаря, выскакивает окно с текстом напоминания и кнопками "закрыть","отложить". Как можно это подавить, что бы они оставались под моей аппликухой?


А лепо ли подавлять? А если это не календарь, а входящий звонок или сигнал о полной разрядке батареи?
Или ты умеешь делать это избирательно?
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[2]: Как подавить уход окна с переднего плана?
От: RealPalmman Россия http://elagin.da.ru
Дата: 17.05.07 14:36
Оценка:
Здравствуйте, Кодт, Вы писали:
RP>>При срабатывании напр. напоминания из календаря, выскакивает окно с текстом напоминания и кнопками "закрыть","отложить". Как можно это подавить, что бы они оставались под моей аппликухой?
К>А лепо ли подавлять? А если это не календарь, а входящий звонок или сигнал о полной разрядке батареи?
К>Или ты умеешь делать это избирательно?
Софтина нужна для того, что бы исключить случайные нажатия на кнопки и экран, когда КПК лежит в кармане. Подавление можно положить под чекбокс в настройках.
Контроль за разрядом аккума можно оверрайдить. А звонки, думаю, что тоже можно оверрайдить, Тут надо MSDN читать
Re[3]: Как подавить уход окна с переднего плана?
От: Кодт Россия  
Дата: 18.05.07 10:21
Оценка:
Здравствуйте, RealPalmman, Вы писали:

RP>Софтина нужна для того, что бы исключить случайные нажатия на кнопки и экран, когда КПК лежит в кармане. Подавление можно положить под чекбокс в настройках.

RP>Контроль за разрядом аккума можно оверрайдить. А звонки, думаю, что тоже можно оверрайдить, Тут надо MSDN читать

А, дело полезное. Хотя на многих девайсах для этого есть просто кнопка выключения (на mitac mio a700/701 — нет)
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.