建立點陣圖選單 (轉)
在通常的中選單總是以文字的方式存在,有時候顯得非常單調乏味。如果能夠在選單中加入點陣圖圖形,將會極大地增加的使用興趣。本文介紹瞭如何使用點陣圖製作選單選項。
建立點陣圖選單
----建立點陣圖選單其實非常簡單,它需要用到應用程式介面()的一些選單和點陣圖函式,你需要將這些函式的宣告包含在你的應用程式的標準模組中,具體的內容請參見樣例程式。步驟如下:
-
使用函式GetSubMenu來提取子選單項的控制程式碼,並透過使用函式CreateCompatibleDC來建立一個相容的裝置環境描述表;
-
在一個迴圈過程中透過使用CreateCompatibleBitmap函式,函式以及BitBlt函式來分別將針對各個選單項所載入的點陣圖選入到相容裝置環境中;
-
透過ModifyMenu函式繪製真正的點陣圖選單選項;
-
使用DeleteDC函式來釋放裝置環境,以便其他的程式可以使用它們。
----提取點陣圖可以有多種方法,在本樣例程式中在窗體上設定了四個圖形框,使用它們載入4個預設的圖示來作為選單選項點陣圖的源,當然你也可以使用其他的方法,例如使用LoadPicture函式來從裝載點陣圖。
樣例程式
-
在中開始一個新的工程,採用預設的方法建立Form1。
-
建立一個新的模組,採用預設的方法建立Module1.Bas。
-
將如下的宣告語句和常量新增到Module1.Bas模組中:
Option Explicit
Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long,
ByVal nPAs Long) As Long
Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long,
ByVal nPos As Long) As Long
Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA"
(ByVal hMenu As Long,ByVal nPosition As Long, ByVal wFlags As Long,
ByVal wIDNewItem As Long, ByVal lpString As Any) As Long
Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Declare Function CreateCompatibleBitmap Lib "gdi32"
(ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long,
ByVal hObject As Long) As Long
Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long,
ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC
As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Public Const SRCCOPY = &HCC0020
Public Const MF_BYPOSITION = &H400&
Public Const MF_BITMAP = &H4&
注意上面的宣告語句需要書寫在一行內。 -
在Form1上新增4個圖形框控制元件,將它們的Name屬性設定為Picture1,將它們的Index屬性依次設定為0,1,2,3,將它們的AutoRedrew屬性設定為True,將它們的AutoResize屬性設定為Ture,以及將它們的Visable屬性設定為False。
-
將上面的4個圖形框控制元件的Picture屬性依次設定為Face1.ico,Face2.ico,Face3.ico,Face4.ico。
-
在Form1上新增第一個選單項,將它的標題設定為“[&F]檔案”,名稱設定為mnuFile。在其下新增一個子選單項,將它的標題設定為“[&E]退出”,名稱設定為mnuExit。
-
在Form1上新增第二個選單項,將它的標題設定為“[&A]臉譜”,名稱設定為mnuFace。在其下新增4個子選單項,分別將改4個子選單項的名稱設定為“[N]正常”,“[&S]微笑”,“ [&L]大笑”,以及“[&O]悲傷”。將它們的名稱設定為“mnuFaceSel”,並相應將這4個子選單項的設定為0,1,2,3。
-
將如下的程式碼新增到Form1的Form_Load事件中:
Private Sub Form_Load()
Dim nLCtr As Integer
Dim lResult As Long
Dim hTempDC As Long
Dim nWidth As Integer
Dim nHeight As Integer
Dim lTempID As Long
Dim hMenuID As Long
Dim lItemCount As Long
Dim hBitmap As Long
nWidth = Picture1(nLoopCtr).Width Screen.TwipsPerPixelX
nHeight = Picture1(nLoopCtr).Height Screen.TwipsPerPixelY
hMenuID = GetSubMenu(GetMenu((Me.hwnd)), 1)
hTempDC = CreateCompatibleDC(Picture1(nLoopCtr).hdc)
For nLoopCtr = 0 To 3
hBitmap = CreateCompatibleBitmap(Picture1(nLoopCtr).hdc, nWidth,
nHeight)
lTempID = SelectObject(hTempDC, hBitmap)
lResult = BitBlt(hTempDC, 0, 0, nWidth, nHeight, (Picture1(nLoopCtr).
hdc), 0, 0, SRCCOPY)
lTempID = SelectObject(hTempDC, lTempID)
mnuFaceSel(nLoopCtr).Caption = ""
lResult = ModifyMenu(hMenuID, nLoopCtr, MF_BYPOSITION Or MF_BITMAP,
GetMenuItemID(hMenuID, nLoopCtr), hBitmap)
Next nLoopCtr
lResult = DeleteDC(hTempDC)
End Sub -
將如下的程式碼新增到“退出”子選單的單擊事件中:
Private Sub mnuExit_Click(Index As Integer)
Select Case Index
Case 0
Unload Me
End Select
End Sub
執行該樣例程式,單擊“臉譜”選單,則會看到由4個臉譜圖示所形成的點陣圖子選單項,如圖1所示。單擊“檔案”“退出”選單可退出應用程式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988033/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用點陣圖選單項——建立點陣圖 (轉)
- 使用點陣圖選單項——點陣圖選單項例項 (轉)
- 使用點陣圖選單項——新增線和圖形到選單 (轉)
- 使用點陣圖選單項——設定點陣圖型別標記 (轉)型別
- PHP掃描圖片轉點陣 二維碼轉點陣PHP
- 點陣圖
- BMP點陣圖格式詳解--轉載
- No MFC,Only API——選單的建立和使用 (轉)API
- 在選單中加入圖示 (轉)
- 將圖象列表轉換成裝置無關點陣圖 (轉)
- 用 Java 儲存點陣圖檔案 (轉)Java
- 點陣圖排序排序
- 動態建立選單
- 點陣圖索引.sql索引SQL
- 微信公眾號-點選選單回覆圖片二維碼
- echarts使用dataset資料集建立單軸散點圖Echarts
- 點陣圖索引(Bitmap Index)——從B*樹索引到點陣圖索引索引Index
- 一個點陣圖淡入淡出控制元件 (轉)控制元件
- BMP點陣圖檔案結構及VC操作 (轉)
- 載入點陣圖檔案到DirectDraw的方法(轉)
- 選單(轉)
- android(一) 選單建立Android
- 遊戲開發新手入門之點陣圖化圖形(轉)遊戲開發
- 點陣圖索引(Bitmap Index)——點陣圖索引與資料DML鎖定索引Index
- Android 選單(OptionMenu)大全 建立你自己的選單Android
- PHP 文字生成點陣圖PHP
- Redis 應用-點陣圖Redis
- 可寫點陣圖(WriteableBitmap)
- Oracle索引——點陣圖索引Oracle索引
- Oracle-點陣圖索引Oracle索引
- 點陣圖字型匯入
- 怎麼在linux下建立帶選單的DVD(轉)Linux
- 用XML資料島建立上下文選單 (轉)XML
- 用C#與XML建立動態分層選單(轉)XML
- BMP點陣圖檔案結構及平滑縮放 (轉)
- 公眾號點選選單會直接跳轉到 Safari 開啟
- 建立上下文選單
- ClickHouse 留存、路徑、漏斗、session 點陣圖 roaringbitmap 點陣圖最佳化Session