我想让一个程序在后台运行,并在任务栏的通知区域显示一个图标。我正在使用win32。我应该用什么api?你知道任何好的教程吗?
答案 0 :(得分:2)
要使程序在后台运行,您可以将其添加为服务或使其“不可用”以关闭(例如,隐藏程序的窗口)。要在工具栏中添加图标,请使用winapi。致电Shell_NotifyIcon并传入NOTIFYICONDATA结构
这应该在某处定义
enum TrayIcon {
ID = 13, CALLBACKID = WM_APP+1
};
此外,在下面的代码中,hWnd
是HWND
,这是您要与通知图标关联的窗口。此HWND's
wndProc
会收到图标的消息。
NIF_ICON
标记使hIcon
在NOTIFICATIONICONDATA
结构中有效。因此,如果您不想拥有图标,请不要指定它。NIF_MESSAGE
标志使uCallbackMessage
有效。如果您不想处理任何消息,请不要指定此标志。有了这个说法,这就是你添加,删除和处理托盘图标
的消息的方法// 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;
// ...
}
}
答案 1 :(得分:1)
http://www.winprog.org/tutorial/有助于学习winapi以及Windows应用程序的工作方式。对于托盘图标,请使用Shell_NotifyIcon
。你需要一个窗口和一个消息循环。
答案 2 :(得分:0)