我用VC编了一段代码,主要目的是实现隐藏窗口,并在任务栏显示图标
虽然窗口隐藏了,任务栏图标也生成了。但是鼠标一移动到任务栏该图标
上,这个图标就消失了。请各位高手指点:
void CPrint_serverDlg::OnHide()
{
// HWND ret2;
BOOL res;
HICON hIcon;
NOTIFYICONDATA tnid;
LPSTR lpszTip="提示信息"; hIcon=LoadIcon(NULL,IDI_APPLICATION);
if (hIcon==0)
MessageBox("loading icon wrong!","load icon",MB_ICONQUESTION);
// strcpy(lpszTip,"提示信息");
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd =(HWND) GetForegroundWindow();
// ret2=(HWND)GetForegroundWindow();
tnid.uID = 1000;
tnid.uFlags=NIF_ICON|NIF_TIP|NIF_MESSAGE;
tnid.uCallbackMessage = WM_USER+1;
tnid.hIcon=hIcon;
if (lpszTip)
lstrcpyn(tnid.szTip, lpszTip, sizeof(tnid.szTip));
else
tnid.szTip[0]='\0';
res=Shell_NotifyIcon(NIM_ADD, &tnid);
if (hIcon)
DestroyIcon(hIcon); ShowWindow(SW_HIDE);
}
虽然窗口隐藏了,任务栏图标也生成了。但是鼠标一移动到任务栏该图标
上,这个图标就消失了。请各位高手指点:
void CPrint_serverDlg::OnHide()
{
// HWND ret2;
BOOL res;
HICON hIcon;
NOTIFYICONDATA tnid;
LPSTR lpszTip="提示信息"; hIcon=LoadIcon(NULL,IDI_APPLICATION);
if (hIcon==0)
MessageBox("loading icon wrong!","load icon",MB_ICONQUESTION);
// strcpy(lpszTip,"提示信息");
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd =(HWND) GetForegroundWindow();
// ret2=(HWND)GetForegroundWindow();
tnid.uID = 1000;
tnid.uFlags=NIF_ICON|NIF_TIP|NIF_MESSAGE;
tnid.uCallbackMessage = WM_USER+1;
tnid.hIcon=hIcon;
if (lpszTip)
lstrcpyn(tnid.szTip, lpszTip, sizeof(tnid.szTip));
else
tnid.szTip[0]='\0';
res=Shell_NotifyIcon(NIM_ADD, &tnid);
if (hIcon)
DestroyIcon(hIcon); ShowWindow(SW_HIDE);
}
DestroyIcon(hIcon);是我搞错的,这段代码本来我是用PB里的WATCOM编的,需要有这个东西,呵呵。DeautyFan(悲情浪子) 怎么在自己的资源中获取图标句柄,我用hIcon=LoadIcon(NULL,MAKEINTRESOURCE(IDR_MAINFRAME));似乎不行。
我用hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
得到了自己资源中的图标句柄,但还是会隐藏
请再指点.
NotifyIconObject.CreateNotifyIcon(hWnd,ID_NotifyIcon,
LoadIcon(hInst,MAKEINTRESOURCE(IDI_CAPVIDEO)),
LoadMenu(hInst,MAKEINTRESOURCE(IDR_MainMenu)));BOOL NotifyIcon::CreateNotifyIcon(HWND hwndOwner,UINT uID,HICON hIcon,HMENU hMenuGet)
{
NotifyIconData.hWnd =hwndOwner;
NotifyIconData.uID =uID;
NotifyIconData.hIcon =hIcon;
hMenu=hMenuGet; if(Shell_NotifyIcon(NIM_ADD,&NotifyIconData))
{
bAdded=TRUE;
return TRUE;
} return FALSE;
}