恐らく想像以上にめんどくさいです。
user32.dll
・CreatePopupMenu ;メニュー作成
・InsertMenuItemA ;メニュー項目作成
・TrackPopupMenu ;メニューをポップアップ表示
・DestroyMenu ;メニュー破棄
・CreateIconIndirect ;画像からhIcon作成
・DestroyIcon ;hIcon破棄
・SetForegroundWindow
gdi32.dll ;画像からhIcon生成の為のアレコレ
・BitBlt
・CreateBitmap
・CreateCompatibleBitmap
・CreateCompatibleDC
・DeleteDC
・DeleteObject
・SetBkColor
shell32.dll
・ShellNotifyIconExA ;タスクトレイのアイコン操作
・ExtractIconExA ;実行ファイルからhIcon抽出
kernel32.dll
・GetModuleFileNameA ;自身の実行ファイル名取得
以下、大雑把な処理の流れです。
1.CreatePopupMenu・InsertMenuItemA 等でメニューを用意します。
2.タスクトレイ用のアイコン(hIcon)を用意します。
gdi32系のAPIで画像から生成、実行ファイルから抽出、
イメージリストを使用する方法などがあります。
3.ShellNotifyIconExA でタスクトレイにアイコンを登録します。
この時の登録ウィンドウに登録したIDのメッセージが送信されます。
4.タスクトレイアイコンが操作されると登録IDのメッセージが送信されます。
この時 lparam に操作内容メッセージが格納されるので、それで操作内容を判断します。
右クリックでメニュー表示ならこんな感じです。
oncmd gosub *tt_Access,$ABCD ;ShellNotifyIconExAでの登録メッセージID
;〜〜〜〜〜〜〜〜
*tt_Access
if(lparam==$205){ ;WM_RButtonUp
SetForegroundWindow hwnd ;タスクトレイでメニュー表示の際のお呪い
TrackPopupMenu hMenu, $180, ginfo.0, ginfo.1, 0, hwnd, 0
cmd = stat ;選択メニュー項目のID取得
;〜各メニュー項目処理へ〜
}
return
5.終了時の後片付け、ShellNotifyIconExA でタスクトレイアイコン撤去
DestroyIcon でアイコン破棄、DestroyMenu でメニューを破棄します。
再利用も考えてモジュール化してしまった方が良いかも知れません。