Ассемблер для Windows



         

В Как сделать так чтобы при минимизации окна значок его помещался бы на системную панель?



В. Как сделать так, чтобы при минимизации окна значок его помещался бы на системную панель?

Эта проблема решается с использованием системной функции Shell_NotifyIcon. Причем решение это столь просто и прозрачно, что приходится удивляться тому, что большинство для этих целей привлекают какие-то библиотеки. Вот параметры этой функции:

  • 1-й параметр. Действие, которое необходимо произвести:
    • NIM_ADD equ 0h ; добавить иконку на системную панель
    •    NIM_MODIFY equ 1h ; удалить иконку
    •    NIM_DELETE equ 2h ; модифицировать иконку
    • 2-й параметр. Указатель на структуру, где содержится информация, необходимая для реализации указанного действия.
    • NOTI_ICON STRUC cbSize DWORD ? hWnd DWORD ? uID DWORD ? uFlags DWORD ? uCallbackMessage DWORD ? hIcon DWORD ? szTip DB 64 DUP (?) NOTI_ICON ENDS

      • cbSize - размер структуры.
      • hWnd — дескриптор окна, куда будет посылаться сообщение (см. ниже)
      • uID - идентификатор иконки
      • uFlags - комбинация следующих флагов
      •    NIF_MESSAGE equ 1h; использовать поле hIcon

           NIF_ICON equ 2h; использовать поле uCallbackMessage

           NIF_TIP equ 4h; использовать поле szTip

      • uCallbackMessage - сообщение, которое приходит на окно, определяемое дескриптором
      • hWnd, в случае возникновения некого события вблизи иконки на системной панели. Значение сообщения должно быть больше, чем 1024. При приходе этого сообщения WPARAM содержит идентификатор иконки, a LPARAM - событие, т.е. то, что произошло с иконкой.
      • hIcon - дескриптор иконки.
      • szTip - текст всплывающей подсказки.
      • Давайте рассмотрим, как работает весь механизм. В случае минимизации окна на функцию окна приходит сообщение WM_SIZE. Причем wParam должен содержать значение SIZE_MINIMIZED. Вот тогда то и следует воспользоваться функцией Shell_NotifyIcon, которая поместит иконку на системную панель. Любые же события с мышью, когда ее курсор находится на иконке, вызовут приход на функцию окна сообщения uCallbackMessage, которое, естественно, мы сами и определи. При этом младшее слово wParam будет содержать идентификатор иконки, а по младшему слову lParam можно определить, что же приключилось (см. ниже). Ниже (Рисунок 3.5.1) Вы увидите, как все это работает.




        Содержание  Назад  Вперед