我用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);
}

解决方案 »

  1.   

    从自己的资源中获取图标句柄,还有你 DestroyIcon(hIcon);干什么哦
      

  2.   

    其他的代码就是WIZARD出来的。
    DestroyIcon(hIcon);是我搞错的,这段代码本来我是用PB里的WATCOM编的,需要有这个东西,呵呵。DeautyFan(悲情浪子) 怎么在自己的资源中获取图标句柄,我用hIcon=LoadIcon(NULL,MAKEINTRESOURCE(IDR_MAINFRAME));似乎不行。
      

  3.   

    对不起上面搞错了
    我用hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
    得到了自己资源中的图标句柄,但还是会隐藏
    请再指点.
      

  4.   

    //create the notify icon object
    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;
    }