PB中用Windows API製作位元影像菜單

來源:互聯網
上載者:User

許多優秀的軟體在視窗菜單的左邊顯示一個小圖片,例如Word,這種菜單圖文並茂,使操作者感到非常直觀。而對於PowerBuilder來說,它為應用開發了幾百個簡單實用地函數,對於一般的開發應用已經足夠,並不需要擴充函數。然而,我們經常希望為終端使用者提供一些PowerBuilder並不能提供的功能,例如這種位元影像菜單,這時我們就需要外部函數。

外部函數是用其他語言編寫的並且儲存在動態連結程式庫(DLL)中的函數。一個DLL就是一個包含可以執行的Windows代碼的檔案。DLL在運行時被動態地裝入和連結,並且可被多個應用程式共用。DLL在記憶體中可以被移動或者固定,可預裝入或者命令裝入,也可以刪除或者永久裝入。開發人員在使用外部函數之前,必須先對其進行定義,外部函數根據範圍的不同而分為兩種類型:全域外部函數與局部外部函數。在PowerBuilder中定義外部函數的文法相當簡單,定義函數時根據有無傳回值分別使用兩種關鍵字:FUNCTION(函數)和SUBROUTINE(子程式)。

在PowerBuilder中,我們也可以通過Windows API函數來實現此項功能,利用Windows API函數能夠實現許多PowerBuilder不能實現的功能。

下面通過一個執行個體來敘述如何通過Windows API函數實現位元影像菜單。在本執行個體中,假設在建立一個應用對象Application之後,再分別建立一個菜單對象m_main和視窗對象w_main。在菜單對象m_main中有如下功能表項目:File/New、File/Open、File/Save、File/Exit、Edit/Copy、Edit/Cut、Edit/Paste和Edit/Delete。在視窗對象w_main中,將其"Title"屬性設定為"位元影像菜單",並且將菜單"w_main"關連到視窗"w_main"上。

1)首先為視窗w_main聲明局部外部函數

FUNCTION ulong LoadImageA(ulong hintance, string filename,uint utype, int x,int y,uint fload) & LIBRARY "USER32.DLL"

//該函數實現裝入圖象資料的功能

FUNCTION boolean SetMenuItemBitmaps(ulong hmenu,uint upos,uint flags,&

ulong handle_bm1,ulong handle_bm2) LIBRARY "USER32.DLL"

//該函數設定菜單位元影像

FUNCTION int GetSystemMetrics( int nIndex ) LIBRARY "USER32.DLL"

//該函數擷取菜單的位元影像尺寸

FUNCTION ulong GetMenuItemID(ulong hMenu,uint uItem) LIBRARY "USER32.DLL"

//該函數擷取功能表項目的ID號

FUNCTION int GetSubMenu (ulong hMenu,int pos) LIBRARY "USER32.DLL"

//該函數擷取子功能表項的控制代碼

FUNCTION ulong GetMenu(ulong hWindow) LIBRARY "USER32.DLL"

//該函數擷取應用的功能表項目

FUNCTION boolean ModifyMenu(ulong hMnu, ulong uPosition, ulong uFlags, &

ulong uIDNewItem, long lpNewI) alias for ModifyMenuA LIBRARY "USER32.DLL"

//該函數用來更新功能表項目

2)其次為視窗w_main聲明執行個體變數

//Win32常量

CONSTANT Integer IMAGE_BITMAP = 0

CONSTANT Integer LR_LOADFROMFILE = 16

CONSTANT Integer SM_CXMENUCHECK = 71

CONSTANT Integer SM_CYMENUCHECK = 72

CONSTANT Integer MF_BITMAP = 4

CONSTANT Integer MF_BYPOSITION = 1024

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.