Значи, за да направиш иконка в System Tray използваш функцията:
вадя ти от MSDN
dwMessage е командата, която ще се изпълни, възможни са три стойности:
NIM_ADD: добавя иконка в System Tray
NIM_DELETE: изтрива иконка в System Tray
NIM_MODIFY: променя иконка в System Tray
Втория параметър ти е указател към NOTIFYICONDATA структура, в която стои самата иконка както и няколко параметъра за извежданата иконка.
За изчертаването на иконката са необходими следните параметри (само на тези ще се спра щото става дълга и широка):
cbSize: Размера на структурата
hWnd: Handle на прозореца, който ще приема съобщенията
uId: Това е ID номер на иконката в статуса
uFlags: Значи, тук просто задаваш комбинация от следните стойности в зависимост от това какво точно ще правиш с иконката:
NIF_ICON: Passing this flag indicates that the value for the
hIcon will be the icon that appears in the taskbar status area.
NIF_MESSAGE: Passing this flag indicates that the uCallBackMessage
value will be used as the callback message.
NIF_TIP: Passing this flag indicates that the value of szTip will
be used as the ToolTip for the icon in the taskbar status area.
uCallBackMessage: Identifier of the notification message sent to the
window that is used to receive the messages.
hIcon: Handle на иконката (самата картинка) която ще се изчертае в tray-a
szTip: Стринг който ще се използва за "Tooltip" на иконката
Накратко (то стана дълго и подробно де

) правиш обект тип NOTIFYICONDATA, при създаване на главната форма на проекта ти викаш функцията Shell_NotifyIcon(NIM_ADD, *MyNotifyIconData). При унищожаване на формата викаш същата функция само, че с параметър NIM_DELETE.
Прост пример:
От теб остава да си дефинираш съобщение което ще се се подава към програмата ти при поява на движение върху иконката и там да хващаш командите пратени от иконката (WM_LBUTTONDOWN, WM_MOUSEMOVE и пр.). Извинявай ако в кода откриеш грешки, ползвам Delphi по принцип и някой път меша синтаксиса му с този на студиото, все пак принципа е абсолютно същия.