Jeg har lavet en class der hedder CTrayIcon.
I den er der så en create funktion der ser således ud:
BOOL CTrayIcon::Create(CWnd*pParent, UINT uCallBackMessage, LPCSTR szToolTip)//, HICON icon, UINT uID)
{
m_trayIcon.cbSize = sizeof(NOTIFYICONDATA);
m_trayIcon.hWnd = pParent->GetSafeHwnd()? pParent->GetSafeHwnd() : m_hWnd;
m_trayIcon.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//icon;
_tcscpy(m_trayIcon.szTip, _T("Dit program"));
m_trayIcon.uCallbackMessage = uCallBackMessage;
m_trayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
m_trayIcon.uID = IDR_MAINFRAME;
return Shell_NotifyIcon(NIM_ADD, &m_trayIcon);
}
For så at vise ikonet, sletter du al koden som i forvejen står i InitInstance. Herefter ændrer du return værdien til TRUE så programmet ikke bare lukker. Inde i InitInstance skriver du så:
CString ClassName = AfxRegisterWndClass(0);
// Laver et usynligt vindue
m_Invisible.CreateEx(WS_EX_TOPMOST, ClassName, _T(""), WS_POPUP, 0, 0, 100, 25, NULL, NULL);
m_pMainWnd = &m_Invisible;
Icon.Create(m_pMainWnd,WM_ICON_NOTIFY,"Dit program");
Og Icon skal selvfølgelig være af typen CTrayIcon. WM_ICON_NOTIFY er en message du selv definerer som f.eks. WM_USER + 10. (spørg mig ikke hvorfor det virker... koden er inspireret af eksembler fra
www.codeguru.com)
Det skulle gerne vise ikonet.
Så kommer det næste problem som jeg ikke helt har fået løst endnu. Man skal jo gerne kunne åbne en PopUp menu når man højreklikker på ikonet, og hvis man dobbeltklikker skulle dialogen gerne vises. Det gøres med en OnNotifyIcon funktion, men jeg har ikke helt fået den til at virke :-(.
Håber det var godt nok, ellers så sig lige til!
Christian