首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

最小化图标消失,该如何处理

2013-01-06 
最小化图标消失我用pb做了一个能最小化到托盘的程序,但是当鼠标移动到图标上时,图标就消失,为什么呢?附程

最小化图标消失
我用pb做了一个能最小化到托盘的程序,但是当鼠标移动到图标上时,图标就消失,为什么呢?
附程序:(也是在csdn上淘的)
新建一个窗口w_main   
    
  首先定义Global   External   Functions   
  Public   Function   Integer   Shell_NotifyIcon   (Long   dwMessage,   Any   lpData)   Library   "shell32"   Alias   For   "Shell_NotifyIconA"   
  Public   Function   Long   LoadImage   (Long   hInst,   String   lpsz,   Long   un1,   Long   n1,   Long   n2,   Long   un2)   Library   "user32"   Alias     For   "LoadImageA"     
  Public   Function   Long   DestroyIcon   (Long   hIcon)   Library   "user32"   Alias   For   "DestroyIcon"   
  Public   Function   Long   SetForegroundWindow     (Long   hwnd)   Library   "user32"   Alias   For   "SetForegroundWindow"   
  Public   Function   Long   OpenIcon     (Long   hwnd)   Library   "user32"   Alias   For   "OpenIcon"   
  Public   Function   Long   ShowWindow   (Long   hWnd,   Long   nCmdShow   )   Library   "user32"   Alias   For   "ShowWindow"   
    
  然后定义Instance   Variables   
  Constant   Long   NIM_ADD   =   0   
  Constant   Long   NIM_MODIFY   =   1   
  Constant   Long   NIM_DELETE   =   2   
  Constant   Long   NIF_MESSAGEorNIF_ICONorNIF_TIP   =   7   
  Constant   Long   WM_MOUSEMOVE   =   512   
  Constant   Long   IMAGE_ICON   =   1   
  Constant   Long   LR_LOADFROMFILE   =   16   
  Long   hIcon   
  Boolean   CanClose   
    
  然后定义1个window   structure   
  名称:notifyicondata   
  内容:   
  long cbsize   
  long hwnd   
  long uid   
  long uflags   
  long ucallbackmessage   
  long hicon   


  Any szTip   
    
  然后定义3个window   function   
  1、函数名:setnotifyicondata     
  返回值:notifyicondata   
  参数为   
  integer   hwnd     
  integer   id     
  long   flags     
  long   callbackmessage     
  long   icon     
  string   tip   
  函数体:   
  //   NotifyIconData   SetNotifyIconData   (Long   hWnd,   Long   ID,   Long   Flags,   Long   CallbackMessage,   Long   Icon,   String   Tip)   
    
  Char   MyTip   [64]   
    
  NotifyIconData   NidTemp   
      
  NidTemp.cbSize   =   88   //   Len   (NidTemp)   
  NidTemp.hWnd   =   hWnd   
  NidTemp.uID   =   ID   
  NidTemp.uFlags   =   Flags   
  NidTemp.uCallbackMessage   =   CallbackMessage   
  NidTemp.hIcon   =   Icon   
  MyTip   =   Tip   +   Char   (0)   
  NidTemp.szTip   =   MyTip   
      
  return   NidTemp   
  2、函数名:addtotray   
  返回值:boolean   
  无参数   
  函数体:   
  //   Boolean   AddToTray   ()   
    
  Any   nid   
    
  if   hIcon   =   0   then   
  //   the   icon   has   not   been   loaded   yet   
  hIcon   =   LoadImage(0,   "SysTray.ico",   IMAGE_ICON,   0,   0,   LR_LOADFROMFILE)   
  end   if   
    
  if   hIcon   =   0   then   
  MessageBox   ("Error",   "Can't   load   icon!")   
    
  Return   False   
  else   
  nid   =   SetNotifyIconData   (Handle   (This),   0,   NIF_MESSAGEorNIF_ICONorNIF_TIP,   WM_MOUSEMOVE,   hIcon,   "TestTip")   


  Shell_NotifyIcon   (NIM_ADD,   nid)   
    
  Return   True   
  end   if   
  3、函数名:removefromtray     
  无返回值   
  无参数   
  函数体:   
  //   RemoveFromTray   ()   
    
  Any   nid   
    
  nid   =   SetNotifyIconData   (Handle   (This),   0,   NIF_MESSAGEorNIF_ICONorNIF_TIP,   0,   hIcon,   "")   
  Shell_NotifyIcon   (NIM_DELETE,   nid)   
    
  if   hIcon   <>   0   then   DestroyIcon   (hIcon)   
  hIcon   =   0   
    
  然后在窗体的event中增加以下的处理   
  在窗体的open事件里   
  //   Long   Open   ()   
  if   AddToTray   ()   then     
        Visible   =   False   
  end   if   
  在窗体的close事件里   
  //   Long   Close   ()   
    
  RemoveFromTray   ()   
  在窗体的closequery事件里   
  //   Long   CloseQuery   ()   
    
  if   CanClose   then   
  Return   0   
  else   
  Visible   =   False   
  Return   0   
  end   if   

[解决办法]
有邮箱吗?我发个托盘程序给你

热点排行