|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Processing Appbar Notification Messages
An appbar receives a notification message when the state of the task bar changes, when a full screen application starts (or the last one closes), or when an event occurs that can affect the appbar's size and position. The following example shows how to process the various notification messages.
// AppBarCallback - processes notification messages sent by the system. // hwndAccessBar - handle of the appbar // uNotifyMsg - identifier of the notification message // lParam - message parameter void AppBarCallback(HWND hwndAccessBar, UINT uNotifyMsg, LPARAM lParam) { APPBARDATA abd; UINT uState; abd.cbSize = sizeof(abd); abd.hWnd = hwndAccessBar; switch (uNotifyMsg) { case ABN_STATECHANGE: // Check to see if the taskbar's always-on-top state has
// changed and, if it has, change the appbar's state // accordingly. uState = SHAppBarMessage(ABM_GETSTATE, &abd); SetWindowPos(hwndAccessBar, (ABS_ALWAYSONTOP & uState) ? HWND_TOPMOST : HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); break; case ABN_FULLSCREENAPP: // A full screen application has started, or the last full
// screen application has closed. Set the appbar's // Z order appropriately. if (lParam) { SetWindowPos(hwndAccessBar, (ABS_ALWAYSONTOP & uState) ? HWND_TOPMOST : HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); } else { uState = SHAppBarMessage(ABM_GETSTATE, &abd);
if (uState & ABS_ALWAYSONTOP) SetWindowPos(hwndAccessBar, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); } case ABN_POSCHANGED: // The taskbar or another appbar has changed its // size or position. AppBarPosChanged(&abd); break; } }
The following function adjusts an appbar's bounding rectangle and then calls the application-defined AppBarQuerySetPos function (included in the previous section) to set the bar's size and position accordingly.
// AppBarPosChanged - adjusts the appbar's size and position. // pabd - address of an APPBARDATA structure that contains information // used to adjust the size and position void PASCAL AppBarPosChanged(PAPPBARDATA pabd) { RECT rc; RECT rcWindow; int iHeight; int iWidth; rc.top = 0; rc.left = 0; rc.right = GetSystemMetrics(SM_CXSCREEN); rc.bottom = GetSystemMetrics(SM_CYSCREEN); GetWindowRect(pabd->hWnd, &rcWindow);
iHeight = rcWindow.bottom - rcWindow.top; iWidth = rcWindow.right - rcWindow.left; switch (g_uSide) { case ABE_TOP: rc.bottom = rc.top + iHeight; break; case ABE_BOTTOM: rc.top = rc.bottom - iHeight; break; case ABE_LEFT: rc.right = rc.left + iWidth; break; case ABE_RIGHT: rc.left = rc.right - iWidth; break;
} AppBarQuerySetPos(g_uSide, &rc, pabd); }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Сообщения Уведомления Обработки Appbar
appbar Получает сообщение уведомления когда состояние об изменениях бара задачи, когда полное экранное приложение начинает (или последние закрытия), или когда случай происходит, что может повлиять на размер appbar's и позиции. Следующий пример показывает как, чтобы обрабатывать различные сообщения уведомления.
// AppBarCallback - СООБЩЕНИЯ уведомления процессов посылались системой. // hwndAccessBar - РУЧКА appbar // uNotifyMsg - идентификатор сообщения / уведомления/ lParam - пустота параметра сообщения AppBarCallback(HWND hwndAccessBar, UINT uNotifyMsg, LPARAM lParam) { abd APPBARDATA; UINT uState; abd.cbSize = sizeof(abd); abd.hWnd = hwndAccessBar; ключ (uNotifyMsg) { случай ABN_STATECHANGE: // Проверьте если taskbar's всегда-в-верхнем состоянии имеет
// измененный и, если это имеет, изменяет состояние / appbar's/ соответственно. uState = SHAppBarMessage(ABM_GETSTATE, &abd); SetWindowPos(hwndAccessBar, (ABS_ALWAYSONTOP & uState)? HWND_TOPMOST : HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); прерывание; случай ABN_FULLSCREENAPP: // A Полное экранное приложение начало, или последний полный
// экранное приложение закрылось. Установите appbar's // порядок Z соответственно. если (lParam) { SetWindowPos(hwndAccessBar, (ABS_ALWAYSONTOP & uState)? HWND_TOPMOST : HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); } еще { uState = SHAppBarMessage(ABM_GETSTATE, &abd);
если (uState & ABS_ALWAYSONTOP) SetWindowPos(hwndAccessBar, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); } случай ABN_POSCHANGED: // taskbar Или другое appbar изменил свой // размер или позицию. AppBarPosChanged(&abd); прерывание; } }
Следующее функции регулирует appbar's bounding прямоугольник затем вызывает определенную прикладную функцию AppBarQuerySetPos (включенное в предшествующую секцию), чтобы устанавливать размер бара и позиционировать соответственно.
// AppBarPosChanged - РЕГУЛИРУЕТ размер appbar's и позиции. // pabd - адрес структуры APPBARDATA, которая содержит информацию // использованное, чтобы регулировать размер и позиционировать пустоту PASCAL AppBarPosChanged(PAPPBARDATA pabd) { rc RECT; RECT rcWindow; int iHeight; int iWidth; rc.top = 0; rc.left = 0; rc.right = GetSystemMetrics(SM_CXSCREEN); rc.bottom = GetSystemMetrics(SM_CYSCREEN); GetWindowRect(pabd->hWnd, &rcWindow);
iHeight = rcWindow.bottom - rcWindow.top; iWidth = rcWindow.right - rcWindow.left; ключ (g_uSide) { случай ABE_TOP: rc.bottom = rc.top + iHeight; прерывание; случай ABE_BOTTOM: rc.top = rc.bottom - iHeight; прерывание; случай ABE_LEFT: rc.right = rc.left + iWidth; прерывание; случай ABE_RIGHT: rc.left = rc.right - iWidth; прерывание;
} AppBarQuerySetPos(g_uSide, &rc, pabd); }
|
|
|
|
| |