Title: Кое-что, что возможно вы ещё не знали о трее.
Author: Zarembo Maxim
Environment: VC++ 6.0, MFC, NT 4.0, Win9x, Win2k, winxp
Мы не будем в данной статье или в данной рекомендации подробно затрагивать правила работы c треем. Это и так хорошо рассмотрено в большом количестве посвящённых этому статей. Мы остановимся на маленькой возможности при работе с треем выгружать GUI интерфейс приложения, чем экономим ресурсы компьютера.
Приведём ниже известную всем структуру из АПИ с элементами MFC, которую потом будем использовать для создания иконки в трее:
HINSTANCE hInst;
#define MYWM_NOTIFYICON (WM_APP+101)
HICON hFrame32;
NOTIFYICONDATA tnd;
CString sTemp;
hInst=AfxGetInstanceHandle();
hFrame32 = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON, 16, 16, 0);
tnd.cbSize = sizeof(NOTIFYICONDATA);
tnd.hWnd = m_hWnd;
tnd.uID = 10;
tnd.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
tnd.uCallbackMessage = MYWM_NOTIFYICON;
tnd.hIcon = hFrame32;
sTemp.LoadString(IDS_TITLE);
wcscpy(tnd.szTip, sTemp);
Данный набор ф-ий используем для вызова приложения из трея:
Shell_NotifyIcon(NIM_DELETE, &tnd);
DestroyIcon(hFrame32);
ShowWindow(SW_SHOW);
ShowWindow(SW_RESTORE);
Данный набор ф-ий используем для минимизации приложения в трей:
pWnd->ShowWindow(SW_MINIMIZE);
Shell_NotifyIcon(NIM_ADD, &tnd);
pWnd->ShowWindow(SW_HIDE);
Вот эти две функции освобождают выделенную память для графического отображения окошка вашего приложения:
pWnd->ShowWindow(SW_MINIMIZE); //минимизируем окно
pWnd->ShowWindow(SW_HIDE); //скрываем окно
Если использовать скрытие окна без минимизации, выделенная память под графику контролов и других объектов будет не освобождена и отъедать кусок у общей памяти.
Вернуться к содержанию...
|