日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】PB实现在通知区域添加图标

發布時間:2023/12/13 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】PB实现在通知区域添加图标 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

“為應用程序在任務欄通知區域加個圖標,按最小化控制菜單后隱藏窗口,單擊通知區域內的圖標恢復并顯示窗口,右擊通知區域內的圖標彈出快捷方式菜單”,已成為時下程序設計上的一個時髦主題,有不少文章介紹了如何實現,但在?PowerBuilder?下由于調用 Win32 API 函數和消息處理不很方便,因而很少有人去涉及。本文將討論如何在?PowerBuilder?下使用任務欄通知區域。

?

?

1.相關的 Win32 API 函數

?

Win32 API 函數 Shell_NotifyIconA 是本文所涉 Win32 API 函數中最為關鍵者,通過它可以添刪通知區域圖標,其 Powersoft 原型為:

?

Function Boolean Shell_NotifyIconA(ULong dwMessage,stc_notifyicondata pnid) Library "Shell32.dll"

?

其中 stc_notifyicondata 是一個結構,其成員有:

?

Ulong cbSize // 結構大小為 88 字節

Ulong hWnd // 接受通知消息的窗口句柄

Ulong uID? // 通知區域圖標的標識號

Ulong uFlags // 指示哪些成員是有效的

Ulong uCallbackMessage // 通知消息的標識號

Ulong hIcon // 圖標的句柄

Char szTip[64] // 圖標提示

Ulong dwState // 圖標狀態 (IE5)

Ulong dwStateMask // 狀態掩碼 (IE5)

Char szInfo[256] // balloon tooltip (IE5)

Ulong uTimeout // balloon tooltip 顯示時間 (IE5)

Char szInfoTitle[64] // balloon tooltip 標題 (IE5)

Ulong dwInfoFlags // balloon tooltip 標志 (IE5)

uFlags 可以是 NIF_MESSAGE(1)、NIF_ICON(2)、NIF_TIP(4)、NIF_STATE(8) 和 NIF_INFO(16) 的組合。如 uFlags = 7 表示結構的 uCallbackMessage、hIcon 和 szTip 是有效的,其他的一些成員的值將被忽略。

?

由于此處涉及回調消息和圖標,所以要用到另三個 Win32 API 函數,他們的 Powersoft 原型為:

?

Function UINT RegisterWindowMessageA(String lpString) Library "User32.dll"?

?

Function ULong LoadIconA(ULong hInstance,ULong lpIconName) Library "User32.dll"

?

Function Boolean DestroyIcon(ULong hIcon) Library "User32.dll"

?

函數 RegisterWindowMessageA 用來定義一個唯一的窗口消息,他的返回值被賦給 uCallbackMessage;函數 LoadIconA 用來加載一個圖標,由于此處要加載 OEM 圖標,所以聲明 lpIconName 的類型為 Ulong 而不是String;函數 DestroyIcon 釋放圖標所占內存。

?

2.添刪通知區域圖標

?

為了便于演示,筆者將在 w_main 的 Open 事件中添加通知區域圖標,在 Close 事件中刪除狀態區圖標,最小化 w_main 時隱藏 w_main,單擊通知區域內的圖標時恢復并顯示 w_main,右擊通知區域內的圖標時顯示快捷方式菜單,即在整個程序運行過程中通知區域的圖標始終存在。

?

筆者先聲明一個實例變量:

?

stc_notifyicondata??? istc_nid

?

添加通知區域圖標

?

定義窗口 w_main 的 Open 事件腳本為:

?

w_main.Event Open( ) returns long

istc_nid.cbSize = 88 // 結構大小

istc_nid.hWnd = Handle(this) // w_main 句柄

istc_nid.uFlags = 7 // uCallbackMessage、hIcon 和 szTip 有效

istc_nid.uID = 0 // 通知區域圖標的標識號

istc_nid.uCallbackMessage = RegisterWindowMessageA("Demo") // 定義消息

istc_nid.hIcon = LoadIconA(0, 32517) // 加載 Windows Logo 圖標

istc_nid.szTip = "Demostration Application" // 提示

Shell_NotifyIconA(0, istc_nid)? // 添加圖標

刪除通知區域圖標

?

定義窗口 w_main 的 Close 事件腳本為:

?

w_main.Event Close( ) returns long

Shell_NotifyIconA(2, istc_nid)? // 刪除通知區域圖標

DestroyIcon(istc_nid.hIcon) // 釋放內存

最小化窗口時隱藏窗口

?

定義窗口 w_main 的 Resize 事件腳本為:

?

w_main.Event Resize( ) returns long

if SizeType = 1 then Hide()

3.處理通知消息

?

當用戶在通知區域內的圖標上移動鼠標、單擊、雙擊或右擊時,Shell 會用 uCallbackMessage 所指示的標識號向 hWnd 指定的窗口發送通知消息。一般來說通知消息的參數 lparam 是個指向結構的指針,不過幸好如果我們象示例一樣只用到較早版本 Shell 的行為的話,lparam 就只是個鼠標事件的標識號而已。處理這樣的消息只要用 w_main 窗口的 Other 事件即可,可定義腳本為:

?

w_main.Event Other(Ulong wParam, Long lParam ) returns long

// 參數 wParam 指示對應的通知區域圖標的標識號;

// 參數 lParam 指示對應的消息類型(消息標識號)。

if Message.Number = istc_nid.uCallbackMessage and wParam = istc_nid.uID then // 判斷消息是否是待處理的消息

??? choose case lParam

??????? case 512? // 鼠標移動

??????? case 513? // 單擊

??????????? Show()

??????????? WindowState=Normal!

??????? case 515? //雙擊

??????? case 516? //右擊

??????????? ShowSCMenu()

??? end choose

end if

?

轉載于:https://www.cnblogs.com/midu/archive/2012/09/04/2670553.html

總結

以上是生活随笔為你收集整理的【转】PB实现在通知区域添加图标的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。