資源描述:
《淺談如何利用pb實現(xiàn)動態(tài)添加菜單》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、淺談如何利用PB實現(xiàn)動態(tài)添加菜單本文擬結(jié)合POWERBUILDER語言,簡述如何實現(xiàn)動態(tài)添加菜單效果。在實際開發(fā)過程當(dāng)中很多時候會因為權(quán)限控制的需要,根據(jù)用戶的不同權(quán)限來動態(tài)添加菜單項目,如何避免使用繁瑣的API函數(shù)(如:CreateMenu、InsertMenu、InsertMenuItem、AppendMenu等),利用POWERBUILDER語言自身功能達(dá)到這一目的呢?本文將就此問題簡單予以論述。一、基本思路在PB幫助的MENUOBJECT一節(jié)當(dāng)中,關(guān)于其PROPERTIES描述當(dāng)中有一項:Item[]MenuS
2、pecifiestheMenuobjectsunderaMenuobject.這看似簡單的一句話其實包含了三層含義:1、這句話說明MENU對象有一個屬性為數(shù)組類型,它其中的各個元素記錄了其所有的具體子ITEM項目,可以借助這個數(shù)組中各元素來訪問底層的各子菜單;2、這些子ITEM項目仍是MENU類型,因此可以按照第一點(diǎn)的邏輯繼續(xù)向下層推廣,借助該子ITEM的ITEM[]屬性可以進(jìn)而訪問其所屬下層的第二層子菜單,推而廣之,即可全面遍歷整個菜單體系的所有子菜單項目;3、既然該屬性是一個數(shù)組類型,那么就可以按照數(shù)組類型變量來處
3、理,我們可以對其進(jìn)行upperbound()、lowerbound()等函數(shù)操作,還可以進(jìn)行數(shù)組的擴(kuò)展,即添加新項目,這一點(diǎn)很重要,它是我們整篇文章的核心,如何利用PB實現(xiàn)動態(tài)添加菜單,說白了就是添加這個數(shù)組元素(讀者必須對此有一個清晰的認(rèn)識),同時期間有一些配套具體的實現(xiàn)技巧,詳見下文。二、具體實現(xiàn)(一)基本工作創(chuàng)建一個WINDOW窗口和二個MENU菜單,其中一個菜單命名為m_main,用作窗口的基本主菜單,新增菜單將在其上添加,該菜單初始可以包含一些基本菜單,如:文件、添加、刪除、保存、退出等;另外一個菜單命名為m
4、_new,該菜單只有主菜單一個ITEM,其下沒有進(jìn)一步的子菜單,因此該菜單其實就是一個菜單ITEM。在主窗口中聲明實例變量(INSTANCEVARIABLES):menuim_new[]//聲明一菜單數(shù)組用于引用新增菜單integerii_count//聲明一變量記錄總共新增菜單個數(shù)(二)具體代碼1、添加一級菜單功能的實現(xiàn)://////////////////////////////////////////////////用途:在最后一項以及菜單之后新增一項一級菜單//時間:2003-6-1//////////////
5、//////////////////////////////////integerli_itemcount//聲明變量記錄當(dāng)前一級菜單總個數(shù);//新創(chuàng)建一個菜單對象,并將其放到菜單數(shù)組im_new[]當(dāng)中;ii_count++im_new[ii_count]=createm_new//此處對新創(chuàng)建的菜單對象獲取引用;li_itemcount=upperbound(m_main.item[])m_main.item[li_itemcount+1]=im_new[ii_count].item[1]//下面是設(shè)置新生成菜單的
6、TEXT屬性,這個屬性可以從數(shù)據(jù)庫中取,但此處省略簡化掉了;m_main.item[li_itemcount+1].text="新增一級-"+string(li_itemcount+1)//下面是設(shè)置新生成菜單的TAG屬性,這個屬性可以從數(shù)據(jù)庫中取,但此處省略簡化掉了;//通過這個TAG可以當(dāng)作功能號等來使用,通過gf_menumessage()函數(shù)來予以公共處理;//m_main.item[li_itemcount+1].tag="xxxxxxxxx"http://此處來將新生成的菜單對象顯示出來;m_main.item[1]
7、.hide()m_main.item[1].show()2、添加二級菜單功能的實現(xiàn)://////////////////////////////////////////////////用途:在最后一項一級菜單下新增一項二級菜單//時間:2003-6-1//////////////////////////////////////////////////聲明變量記錄當(dāng)前一級菜單總個數(shù)、最后一項一級菜單對應(yīng)的二級菜單總個數(shù);integerli_precount,li_itemcount//新創(chuàng)建一個菜單對象,并將其放到菜單數(shù)
8、組im_new[]當(dāng)中;ii_count++im_new[ii_count]=createm_new//此處對新創(chuàng)建的菜單對象獲取引用;li_precount=upperbound(m_main.item[])li_itemcount=upperbound(m_main.item[li_precount].item[])m_mai