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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
任务栏分组工具是一种可以将任务栏上的应用程序按照不同组别进行分类和管理的工具。通过使用任务栏分组工具,我们可以更加有效地组织和访问我们的应用程序。 首先,任务栏分组工具可以帮助我们根据应用程序的功能或类型进行分类。我们可以将常用的办公软件放在一组,将娱乐相关的应用程序放在另一组,以此类推。这样一来,当我们需要访问某种类型的应用程序时,我们可以直接点击相应的分组,而不需要在一大堆应用程序中进行寻找,节省了我们的时间和精力。 其次,任务栏分组工具还可以帮助我们整理不同工作场景下的应用程序。例如,在工作时,我们可能需要同时打开多个与工作相关的应用程序,如Word、Excel和邮件客户端。通过使用任务栏分组工具,我们可以将这些应用程序放在一个分组中,方便我们在工作时快速切换和管理这些应用程序。 另外,任务栏分组工具还可以提高我们的工作效率。当我们在任务栏上打开了过多的应用程序时,任务栏上的图标会变得拥挤,我们可能会因此而错过一些重要的通知或信息。而通过使用任务栏分组工具,我们可以将任务栏上的图标分组显示,减少拥挤感,提高我们对任务栏的整体管理和使用效率。 总之,任务栏分组工具是一种方便实用的工具,可以帮助我们更好地组织和管理任务栏上的应用程序,节省时间和精力,并提高我们的工作效率。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值