在PowerBuilder中創建圖標欄應用

在PowerBuilder中創建圖標欄應用

(加入日期:2001-4-25)

保存文章至硬盤】【打印文章】【字體:

分享到: 0
國防科技大學理學院 陳玉教
郵編: 410073

---- 在一些應用埸合,常需要在Windows 9.X或Winnt中的圖標欄中顯示出公司/應用程序的圖標,在單擊圖標時彈出相應的窗口,就象金山詞霸一樣。下面介紹採用PowerBuilder中在Windows 9.x和Windows NT下顯示圖標欄圖標的方法。

一、 建立一個應用程序
---- 在創建程序前,先準備一個用於在圖標欄中顯示的圖標文件(.ICO),並準備一個用於彈出窗口顯示的圖片(BMP 256色)。啓動PowerBuilder,創建一個應用(Application),取應用名Starsoft(任意),注意採用模板生成卻缺省窗口。
二、 創建要顯示的圖標窗口
---- 創建一個用於顯示成圖標的窗口,取名爲W_systray,再在上面放置一張BMP圖片,式樣如下圖所示(略)
---- 設置其它窗口的有關信息,如窗口名等。

三、 編程
---- 1、定義全局外部函數
---- PowerBuilder本身並不提供用於在圖標欄中把窗口顯示成圖標的函數,但可以通過Windows API調用來實現,有關在PowerBuilder調用相應的API函數如下(定義在全局外部函數中):

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"

---- 2、應用入口
---- 在Application的Open Scripts中,輸入下列函數:

---- Open (win_systray)

---- 3、窗口函數和Scripts

---- 在W_systray窗口中,創建一個名稱爲notifyicondata的結構,定義如下:項目 數據類型

Cbsize Long
Hwnd Long
Uid Long
Uflags Long
Ucallbackmessage Long
Hicon Long
Sztip any

---- 再定義三個函數:
---- 1、AddToTray(),參數:無;返回值:布爾值(True/False)

// 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 ("錯誤", "不能加載圖標!")
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

---- 2、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

---- 3、SetNotifyIconData (Long hWnd, Long ID, Long Flags,
Long CallbackMessage, Long Icon, String Tip);
返回值:notifyicondata
// 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
最後,在窗口的有關事件中輸入函數:
Open 事件
if AddToTray () then Visible = False
Close 事件
RemoveFromTray ()
CloseQuery 事件
if CanClose then
Return 0
else
Visible = False
Return 0
End if
Resize事件
if sizetype = 1 then Visible = False

四、 測試
---- 完成上述工作後,就可以運行並加以測試了。進入運行,在圖標欄中就註冊了一個圖標,單擊就彈出窗口,窗口示例如下圖所示(略):
---- 這時,最小化該窗口,不會在Windows 9.x或Windows NT的任務欄中顯示,而是縮小成一個在圖標欄中的圖標。

---- 上述示例在Windows 9.8、Windows NT V4.0和PowerBuilder 6.5下測試通過。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章