pb 程序托盘化(taskbar status area)

一、涉及的API

//托盘程序需要的API

1、shell_notifyicon(long dwmessage,ref nstr_notifyicondata lpdata)

     功能:创建、修改、删除托盘图标

     参数:dwmessage  0:创建托盘图标;1:修改托盘图标;2:删除图标

              lpdata           结构体

     结构体定义:             

             long  cbsize                     结构体长度,固定为88;

             long  hwnd                      图标消息接收窗口;

             long  uid                          任务栏图标对应的应用程序定义的标识符;

             long  uflags                      结构体成员有效标志,1:hicon有效,2:ucallbackmessage有效,4:sztip有效,可以组合

             long  ucallbackmessage   返回给窗口hwnd的消息

             long  hicon                       图标

             character  sztip[64]         鼠标移动到图标时显示的文字

     pb声明:

            function integer shell_notifyicon (long dwmessage,ref nstr_notifyicondata lpdata)  library "shell32" alias for "Shell_NotifyIconA"

 

2、loadimage(long hinst,string lpszName,long uType ,long cxDesired ,long cyDesired ,long fuLoad )

     功能:装载图片

     参数:hinst             包含要装载图片的模块实例的句柄,如果是OEM图片,则此参数为0

              lpszName     图片文件名(带路径)

              uType           装载图片的类型,0:bitmap,2:cursor,1:icon

              cxDesired     utype为1,2时表示图像的宽度(象素),如果utype为0则必须设为0

              cyDesired     utype为1,2时表示图像的高度(象素),如果utype为0则必须设为0

              fuLoad         设为0

     pb声明:
              function long loadimage (long hinst,string lpsz,long un1,long n1,long n2,long un2)  library "user32" alias for "LoadImageA"

 

3、destroyicon(long hicon)

     功能:销毁图片

     参数:hicon   图片句柄

     pb声明:
             function long destroyicon (long hicon)  library "user32" alias for "DestroyIcon"

 

4、CreatePopupMenu()

     功能:创建一个弹出菜单

     pb声明:

             Function long CreatePopupMenu() Library "user32"

 

5、AppendMenu (long hMenu, long wFlags,long wIDNewItem,string lpNewItem)

     功能:增加一个菜单项

     参数:hMenu             弹出菜单句柄

              wFlags            控制菜单项的各种参数(可组合,详细标识请参考MSDN)

              wIDNewItem  菜单项ID,通过此ID来确定选择的菜单

              lpNewItem      菜单显示文字

     pb声明:

              Function long AppendMenu (long hMenu, long wFlags,long wIDNewItem,string lpNewItem) Library "user32" Alias for "AppendMenuA"

 

6、TrackPopupMenu (long hMenu,long wFlags,long xx,long yy,long nReserved,long hwnd,long lprc)

     功能:弹出菜单

     参数:hmenu           菜单句柄

              wflags           弹出菜单显示选项(详细选项请参考MSDN)

              xx                  弹出菜单的X坐标

              yy                  弹出菜单的Y坐标

              nReserved     设为0

              hwnd             弹出菜单对应的窗口

              lprc                无效参数(设为0)

     pb声明:
              Function long TrackPopupMenu (long hMenu,long wFlags,long xx,long yy,long nReserved,long hwnd,long lprc) Library "user32"

7、GetCursorPos (POINT lpPoint)

     功能:获取鼠标所在的屏幕位置

     参数:lppoint          结构体

     结构体定义:

             long x            x坐标

             long y            y坐标

     pb声明:
             Function long GetCursorPos (ref POINT lpPoint) Library "user32"

 

8、DestroyMenu (long hMenu)

     功能:销毁菜单

     参数:hMenu           菜单句柄

     pb声明:
             Function long DestroyMenu (long hMenu) Library "user32" Alias for "DestroyMenu"

 

9、SetForegroundWindow(ulong hwnd)

    功能:将窗口设置在前

    参数:hwnd             窗口句柄

    pb声明:
            Function ulong SetForegroundWindow(ulong hwnd) LIBRARY "user32.dll"

 

二、PB实例(实例变量nstr_notifyicondata istr_notifyicon)

1、创建图盘图标(窗口OPEN时):

long   ll_hnd

string ls_iconname

 

//图标文件

ls_iconname = 'comm.ico'

ll_hnd = loadimage(0,ls_iconname,1,0,0,16) 

 

if ll_hnd = 0 then
   messagebox("错误","装载位图文件失败,程序无法启动!",stopsign!)
   return false
else

   istr_notifyicon.cbsize = 88
   istr_notifyicon.hwnd = handle(this)

   istr_notifyicon.uid = 0
   istr_notifyicon.hicon = ll_hnd

   istr_notifyicon.uflags = 7
   istr_notifyicon.ucallbackmessage = 1025 //pb自定义消息pbm_custom02

   istr_notifyicon.sztip = '托盘程序'
   shell_notifyicon(0,istr_notifyicon)
   return true
end if

 

2、接收消息(自定义pbm_custom02事件)

int      li_select
point  lp_position
long   ll_hmenu

choose case lparam
   case 516 //鼠标右键单击按下
        ll_hMenu = CreatePopupMenu()
        AppendMenu(ll_hMenu,0,1,"菜单A")
        AppendMenu(ll_hMenu,2048,5,"")//菜单分隔横线
        AppendMenu(ll_hMenu,0,2,"关闭")
  
       GetCursorPos(lp_position)
       SetForegroundWindow(handle(this)) //将窗口前置,防止点击右键后必须选择菜单项才能关闭菜单
       li_select = TrackPopupMenu(ll_hMenu,2 + 256 + 128,lp_position.x,lp_position.y,0,handle(this),0)
       choose case li_select
           case 1

               //菜单A相关操作
           case 2
               post close(this)
       end choose
       DestroyMenu(ll_hmenu)

end choose

 

3、窗口关闭(CLOSE事件)

istr_notifyicon.ucallbackmessage = 0
shell_notifyicon(2,istr_notifyicon)

if istr_notifyicon.hicon <> 0 then
   destroyicon(istr_notifyicon.hicon)
end if

istr_notifyicon.hicon = 0

你可能感兴趣的:(pb 程序托盘化(taskbar status area))