Чтобы программа работала в фоновом режиме, вы либо добавляете ее в качестве службы, либо делаете ее «недоступной» для выключения (например, скрываете окно для программы).Чтобы добавить значок на панели инструментов, вы используете winapi.Вызовите Shell_NotifyIcon и передайте NOTIFYICONDATA структуру
Это должно быть определено где-то
enum TrayIcon {
ID = 13, CALLBACKID = WM_APP+1
};
Кроме того, в приведенном ниже коде hWnd
HWND
, это окно, которое вы хотите связать со значком уведомления.Этот HWND's
wndProc
будет получать сообщения для значка.
Примечания:
- флаг
NIF_ICON
делает hIcon
действительным в структуре NOTIFICATIONICONDATA
.Поэтому, если вы не хотите иметь значок, не указывайте его. - флаг
NIF_MESSAGE
делает uCallbackMessage
действительным.Если вы не хотите обрабатывать какие-либо сообщения, не указывайте этот флаг. - Вы должны удалить значок, прежде чем закрыть свою программу, иначе он застрянет там, пока вы не наведете курсор на нее
- При запуске вашего компьютера у Shell_NotifyIcon могут возникнуть некоторые трудности для достижения успеха.Я не могу найти ссылку на него, но я знаю, что где-то читал .. Поэтому, если это не удастся, не думайте, что это не будет работать вообще - просто попробуйте еще раз.
При этом сказано, как вы добавляете, удаляете и обрабатываете сообщения для иконки в трее
Чтобы добавить значок
// in HICON hIcon: this is the icon you want as the image in the tray
NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = hWnd;
nid.uID = ID;
nid.uFlags = NIF_ICON | NIF_MESSAGE;
nid.hIcon = hIcon;
nid.uCallbackMessage = /*TrayIcon::*/CALLBACKID;
Shell_NotifyIcon(NIM_ADD, &nid);
Чтобы удалить значок
NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = hWnd;
nid.uID = /*TrayIcon::*/ID;
Shell_NotifyIcon(NIM_DELETE, &nid);
Обработка сообщений для иконки
LRESULT wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch (msg){
// ...
case /*TrayIcon::*/CALLBACKID:
{
// here, you handle the messages for your tray icon
}
break;
// ...
}
}