六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線(xiàn)學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

順序?qū)R菜單完成方法

[摘要]作者:丁健 張萬(wàn)軍 江南 右順序?qū)R菜單就是菜單在菜單條的最右側(cè)對(duì)齊,往左排列。平時(shí),我們能看到很多右順序?qū)R菜單的例子,如“WPS2000集成辦公系統(tǒng)”有文件打開(kāi)時(shí)的“定制界面”菜單、Origin...
作者:丁健 張萬(wàn)軍 江南

右順序?qū)R菜單就是菜單在菜單條的最右側(cè)對(duì)齊,往左排列。平時(shí),我們能看到很多右順序?qū)R菜單的例子,如“WPS2000集成辦公系統(tǒng)”有文件打開(kāi)時(shí)的“定制界面”菜單、Origin2.5的“Help”菜單等。將右順序?qū)R菜單應(yīng)用于應(yīng)用程序中,可以打破常規(guī)菜單左順序?qū)R的顯示方式,給人耳目一新的感覺(jué);另外,我們可以將一些需要實(shí)時(shí)更新的消息、提示等顯示在右順序?qū)R菜單中,醒目突出,既符合人體肉眼查詢(xún)信息的習(xí)慣,又可避免占用窗體或狀態(tài)欄空間。因此,右順序?qū)R菜單具有一定的實(shí)用性。
Visual C++環(huán)境下的實(shí)現(xiàn)方法
Visual C++的編程環(huán)境支持可視化的菜單設(shè)計(jì),在設(shè)計(jì)菜單時(shí)可直接將菜單指定為“右順序?qū)R菜單”。具體方法是:選定菜單后雙擊或在右鍵菜單中選“屬性”,打開(kāi)菜單屬性對(duì)話(huà)框,選“Extended Styles”標(biāo)簽,在“Extended Styles”標(biāo)簽板上只有“右-左順序?qū)R”項(xiàng),選擇“右-左順序?qū)R”項(xiàng)即可。注意,上述指定只對(duì)菜單條上的菜單有效,對(duì)子菜單項(xiàng)也可指定但運(yùn)行時(shí)沒(méi)有效果。圖1為經(jīng)過(guò)Visual C++編譯后的右順序?qū)R菜單應(yīng)用程序運(yùn)行時(shí)的顯示效果。

圖1 VC環(huán)境下右順序?qū)R菜單應(yīng)用程序
Visual Basic環(huán)境下的實(shí)現(xiàn)方法
Visual Basic環(huán)境不支持直接指定、創(chuàng)建右順序?qū)R菜單,必須通過(guò)編程實(shí)現(xiàn)。根據(jù)MSDN對(duì)菜單信息數(shù)據(jù)結(jié)構(gòu)、相關(guān)API函數(shù)的解釋?zhuān)筛爬ǔ鰧?shí)現(xiàn)這項(xiàng)功能的四個(gè)步驟或稱(chēng)具體程序流程:  
1.定義菜單信息數(shù)據(jù)結(jié)構(gòu)MenuItemInfo全局對(duì)象;
2.用GetMenuItemInfo API函數(shù)取得指定的菜單信息,并將信息存放于定義的MenuItemInfo對(duì)象內(nèi);
3.將定義的MenuItemInfo全局對(duì)象的fType部分設(shè)為MFT_RIGHTJUSTIFY(設(shè)置右順序?qū)R菜單的關(guān)鍵參數(shù));
4. 用SetMenuItemInfo API函數(shù)重新設(shè)置菜單。
MenuItemInfo的定義
MenuItemInfo存放菜單特征信息如: 類(lèi)型、狀態(tài)、標(biāo)識(shí)號(hào)、句柄指針值等,這些特征信息決定了菜單的標(biāo)題內(nèi)容、排列順序、響應(yīng)方式等等。適當(dāng)改變其中某些信息即可實(shí)現(xiàn)菜單右順序?qū)R。
MenuItemInfo的定義如下:
typedef struct tagMENUITEMINFO {
UINT cbSize;
UINT fMask;
UINT fType;
UINT fState;
UINT wID;
HMENU hSubMenu;
HBITMAP hbmpChecked;
HBITMAP hbmpUnchecked;
DWORD dwItemData;
LPTSTR dwTypeData;
UINT cch;
} MENUITEMINFO,F(xiàn)AR *
LPMENUITEMINFO。
MenuItemInfo結(jié)構(gòu)中與右順序?qū)R菜單實(shí)現(xiàn)密切相關(guān)的是fType參數(shù),fType存放菜單項(xiàng)的類(lèi)型參數(shù),它可以是預(yù)定義值中的一個(gè)或幾個(gè)。
其中的MFT_RIGHTJUSTIFY常數(shù)可將本菜單項(xiàng)及其隨后的菜單調(diào)整到菜單條的右側(cè)排列。
API函數(shù)GetMenuItemInfo、SetMenuItemInfo簡(jiǎn)介
GetMenuItemInfo函數(shù)簡(jiǎn)介:
函數(shù)功能:取得一個(gè)菜單項(xiàng)的信息。
函數(shù)原型:BOOL GetMenuItemInfo(HMENU hMenu, UINT uItem, BOOL fByPosition, LPMENUITEMINFO Ipmii)。
參數(shù):
hMenu:包含指定菜單項(xiàng)的菜單的句柄。
uItem: 將要取得其信息的菜單項(xiàng)的標(biāo)識(shí)符或位置,此參數(shù)的含義取決于參數(shù)fByPosition的值。
fByPosition: 此值用于指定參數(shù)uItem的含義,如果此參數(shù)是FALSE,則uItem表示菜單項(xiàng)的標(biāo)識(shí)符; 否則,表示菜單項(xiàng)的位置。
Ipmii:指向結(jié)構(gòu)MenuItemInfo的指針,該結(jié)構(gòu)指定要取得的信息并接收菜單項(xiàng)的信息。
返回值:如果函數(shù)調(diào)用成功,返回非零值;如果函數(shù)調(diào)用失敗,返回值是零。
調(diào)用注意點(diǎn):Windows CE環(huán)境下,由參數(shù)Ipmii指向的MenuItemInfo結(jié)構(gòu)中的fMask不能取MIM_CHECKMARKS。
SetMenuItemInfo函數(shù)簡(jiǎn)介:
函數(shù)功能:該函數(shù)改動(dòng)一個(gè)菜單項(xiàng)的信息。
函數(shù)原型:BOOL SetMenuItemInfo(HMENU hMenu, UINT uItem, BOOL fByPosition, LPMENUITEMINFO Ipmii)。
參數(shù):
hMenu: 包含菜單項(xiàng)的菜單的句柄。
uItem: 將被修改的菜單項(xiàng)的標(biāo)識(shí)或位置,此參數(shù)的含義由參數(shù)fByPosition確定。
fByPosition: 此值用于指定uItem的含義。如果此參數(shù)值為FALSE,則參數(shù)uItem是菜單項(xiàng)的標(biāo)識(shí);否則,表示菜單項(xiàng)的位置。
Ipmii:指向結(jié)構(gòu)MenuItemInfo的指針,該結(jié)構(gòu)含有菜單項(xiàng)的信息,并且指定將被修改的菜單項(xiàng)的屬性。
返回值:如果函數(shù)調(diào)用成功,返回非零值;如果函數(shù)調(diào)用失敗,返回值是零。
調(diào)用注意點(diǎn):為了使鍵盤(pán)加速鍵能控制位圖或自己繪制的菜單項(xiàng),菜單的擁有者必須處理WM_MENUCHAR消息。Windows CE環(huán)境下,只有下列值對(duì)參數(shù)Ipmii指向的MenuItemInfo結(jié)構(gòu)中的fMask成員有效:MIIM_DATA、MIIM_ID和MIIM_TYPE 。如果MIIM_TYPE被指定,結(jié)構(gòu)MenuItemInfo的fType成員必須為菜單項(xiàng)的當(dāng)前類(lèi)型,也就是說(shuō),該類(lèi)型不能被改變。
Visual Basic環(huán)境下的源代碼(以實(shí)現(xiàn)圖2所示菜單為例):  
’數(shù)據(jù)結(jié)構(gòu)聲明
Public Type menuItemInfo  
cbSize As Long
fMask As Long
fType As Long
……
End Type
’API函數(shù)聲明
Public Declare Function SetMenuItemInfo Lib “user32” Alias “SetMenuItemInfoA” (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, lpcMenuItemInfo As menuItemInfo) As Long
Public Declare Function GetMenuItemInfo Lib “user32” Alias “GetMenuItemInfoA” (ByVal hMenu As Long, ByVal un As Long, ByVal b As Long, lpMenuItemInfo As menuItemInfo) As Long
Public Declare Function DrawMenuBar Lib “user32” (ByVal hwnd As Long) As Long
Public Declare Function GetMenu Lib “user32” (ByVal hwnd As Long) As Long
’在窗體載入過(guò)程(也可放在其他過(guò)程)中對(duì)菜單設(shè)置進(jìn)行更改
Private Sub Form_Load()
Dim my_menuItemInfo As menuItemInfo
Dim return_value As Long
my_menuItemInfo.cbSize = 44
my_menuItemInfo.fMask = 16  
’MIIM_TYPE
my_menuItemInfo.cch = 128
my_menuItemInfo.dwTypeData
= Space$(128)  
return_value = GetMenuItemInfo(GetMenu(Me.hwnd), 2, 1, my_menuItemInfo)
my_menuItemInfo.fType = 16384  
’MFT_RIGHTJUSTIFY
return_value = SetMenuItemInfo(GetMenu(Me.hwnd),2, 1, my_menuItemInfo)  
DrawMenuBar GetMenu(Me.hwnd)
End Sub
圖2為Visual Basic環(huán)境下編譯的應(yīng)用程序右順序?qū)R菜單顯示效果。

圖2 Visual Basic編譯的右順序?qū)R菜單應(yīng)用程序
存在的問(wèn)題
在程序運(yùn)行過(guò)程中,我們常要對(duì)菜單標(biāo)題進(jìn)行更改,對(duì)用上述程序更改為右順序?qū)R后的菜單來(lái)說(shuō),由此帶來(lái)的一個(gè)問(wèn)題是右順序?qū)R顯示效果失效,即已經(jīng)在最右側(cè)的菜單恢復(fù)到左側(cè)排列,其原因是菜單標(biāo)題字符串所在內(nèi)存空間數(shù)據(jù)的更改。我們可以在Visual Basic程序中做實(shí)驗(yàn),在窗體鼠標(biāo)單擊事件過(guò)程內(nèi)加入如下語(yǔ)句:
Private Sub Form_Click()
location.Caption = “改變”  
’目標(biāo)位置菜單的名稱(chēng)為location
End Sub
上述程序?qū)︼@示目標(biāo)位置的菜單標(biāo)題作了修改。運(yùn)行該程序,用鼠標(biāo)單擊窗體部分,結(jié)果如圖3所示。

圖3 失效的右順序?qū)R菜單
通過(guò)摸索,我們提出了一個(gè)變通解決方法:在欲將其調(diào)整到右側(cè)的菜單前面加一個(gè)空菜單,并在程序中對(duì)該空菜單進(jìn)行右順序?qū)R編程。
仍以Visual Basic編譯環(huán)境下圖2所示應(yīng)用程序的菜單為例,先打開(kāi)“菜單編輯器”,在“目標(biāo)位置”菜單前插入一個(gè)標(biāo)題字符為空、名稱(chēng)為“void_menu”的空菜單,接著編譯該程序。運(yùn)行時(shí)API函數(shù)SetMenuItemInfo將“void_menu”空菜單及其右側(cè)的所有菜單(“目標(biāo)位置”菜單等)均調(diào)整到菜單條最右側(cè),因?yàn)椤皏oid_menu”空菜單的標(biāo)題字符為空,所以該菜單不顯示,程序中接下來(lái)可以對(duì)“目標(biāo)位置”菜單的標(biāo)題字符內(nèi)容作任意修改、更新。圖4為對(duì)添加的空菜單進(jìn)行右順序?qū)R編程后的顯示效果,用前面窗體中的單擊事件過(guò)程的代碼進(jìn)行測(cè)試,可以發(fā)現(xiàn)標(biāo)題更改為“改變”的location菜單仍顯示在右側(cè),完全達(dá)到目的。Visual C++編程環(huán)境中也可采用類(lèi)似方法。


主站蜘蛛池模板: 日韩淫片| 午夜影院在线播放 | 天天做日日干 | 日韩三级一区 | 青青青免费高清在线观看视频在线 | 日本亚洲精品 | 午夜亚洲视频 | 四虎澳门永久8848在线影院 | 色噜噜狠狠狠狠色综合久不 | 日日干狠狠 | 亚洲人成自拍网站在线观看忄 | 四虎影院毛片 | 四虎在线视频 | 日本一道在线观看 | 亚洲天堂男人天堂 | 日韩中文一区 | 四虎永久免费地址在线网站 | 日本亚欧乱色视频在线观看 | 日韩黄色大全 | 特黄特色一级特色大片中文 | 色天天天综合色天天碰 | 人人鲁免费播放视频人人香蕉 | 中文字幕亚洲一区二区v@在线 | 综合热久久 | 亚欧乱色视频小说 | 欧美午夜视频一区二区 | 青草免费免费观看视频在线 | 青青青国产在线观看 | 日本成片视频 | 日本欧美国产 | 欧美最黄视频 | 午夜手机福利视频 | 欧美性视频一区二区三区 | 日本三级视频在线观看 | 天天干天天草天天射 | 天天影视色香欲综合网小说 | 日韩黄色毛片 | 伊香蕉大综综综合久久 | 亚欧免费视频一区二区三区 | 日本片网址 | 日韩欧美中文字幕一区二区三区 |