當前位置:菜譜大全網 - 菜譜 - 在VB6+XP環境下,如何使用API函數動態創建菜單?

在VB6+XP環境下,如何使用API函數動態創建菜單?

請右擊來測試效果。

動態創建菜單,鼠標右鍵彈出菜單,執行相應的鼠標事件。

形式

選項顯式

私有子窗體_Load()

hMenu = CreateMenu()

hmenupopup = CreatePopupMenu()

Result = Appendmenu (h menuppopup,MF _ string,300," New ")。

result = Appendmenu(hmenupup,MF _ string,301," Save ")。

result = Appendmenu(hmenupup,MF _ string,302,“另存為”)。

Result = Appendmenu (hmenu,MF _ popup,hmenupopup,“文件”)

oldwinproc = GetWindowLong(me . hwnd,GWL_WNDPROC)

SetWindowLong Me.hWnd,GWL_WNDPROC,地址OnMenu

末端接頭

私有子窗體_MouseDown(按鈕為整數,Shift為整數,x為單值,y為單值)

像RECT壹樣暗淡

Dim p As POINTAPI

如果Button = vbRightButton,則

GetCursorPos p

TrackPopupMenu hmenupopup,0,p.x,p.y,0,Me.hWnd,r

如果…就會結束

末端接頭

私有子窗體_Unload(取消為整數)

SetWindowLong Me.hWnd,GWL_WNDPROC,oldwinproc

末端接頭

組件

選項顯式

公共聲明函數create menu Lib“user 32”()為Long

公共聲明函數AppendMenu Lib“user 32”別名“AppendMenuA”(ByVal hMenu為Long,ByVal wFlags為Long,ByVal wIDNewItem為Long,ByVal lpNewItem為Any)為Long

公共聲明函數trackpupmenu Lib“user 32”(ByVal hMenu為Long,ByVal wFlags為Long,ByVal x為Long,ByVal y為Long,ByVal nReserved為Long,ByVal hWnd為Long,lprc為RECT)為Long

公共聲明函數CreatePopupMenu Lib "user32 "()為Long

公共聲明函數SetWindowLong Lib“user 32”別名“SetWindowLongA”(ByVal hWnd為Long,ByVal nIndex為Long,ByVal dwNewLong為Long)為Long

公共聲明函數CallWindowProc Lib“user 32”別名“CallWindowProcA”(ByVal lpPrevWndFunc As Long、ByVal hWnd As Long、ByVal Msg As Long、ByVal wParam As Long、ByVal lParam As Long)長

公共聲明函數GetWindowLong Lib“user 32”別名“GetWindowLongA”(ByVal hWnd為Long,ByVal nIndex為Long)

公共聲明函數GetCursorPos Lib " user 32 "(LP point As POINTAPI)為Long

公共常量MF _ STRING = & ampH0 & amp;

公共常量MF _ POPUP = & amph 10 & amp;

公共Const WM _ USER = & ampH400

公共類型RECT

左等長

頂端壹樣長

壹樣長

底部壹樣長

結束類型

公共類型POINTAPI

x壹樣長

只要

結束類型

公共常數GWL_WNDPROC = (-4)

公共hMenu作為長

公共hmenupopup壹樣長

公共結果為長

Public oldwinproc As Long

公共Const WM _ COMMAND = & ampH111

公共函數OnMenu(ByVal hWnd為Long,ByVal wMsg為Long,ByVal wParam為Long,ByVal lParam為Long)為Long

選擇案例wMsg

案例WM_COMMAND

選擇案例wParam

案例300

MsgBox“u select new”,vbInformation,“hello,world!”

案例301

MsgBox“u select save”,vbInformation,“hello,world!”

案例302

MsgBox“u select另存為”,vbInformation,“hello,world!”

結束選擇

結束選擇

on menu = CallWindowProc(oldwinproc,hWnd,wMsg,wParam,lParam)

結束功能