大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 在系统菜单上添加自定义菜单项

在系统菜单上添加自定义菜单项

时间: 2021-07-31 作者:daque

作家:马鞍子山钢铁路总工会公司员工大学 王加龙 ---- 正文标题所说的体例菜单不是指运用步调体例的菜单,而是指当用户用鼠标左键单击运用步调窗体左上角的图标时弹出的菜单。同样,当用户用鼠标右键单击运用步调窗体的题目栏,或体例工作栏中的运用步调题目时,弹出的也是这个菜单。体例菜单与运用步调菜单不一律,体例菜单不受运用步调遏制,它是由windows体例径直遏制的。所以,在系统菜单上添加自定义菜单项,就显得比拟艰巨。以次便是自己运用vb实行在系统菜单上添加自定义菜单项的本领。 ---- 开始须要领会一点是体例菜单的处事进程。当咱们单击体例菜单中某一项时,运用步调窗口会收到一条wm_syscommand动静,该动静包括了体例菜单中所单击那一项的操作符id。此时,运用步调窗口的默许窗口因变量会按照wm_syscommand动静以及菜单操作符id实行相映的操纵,实行菜单吩咐。即使咱们能阻挡达到窗口的wm_syscommand动静,而且辨别出菜单的操作符id,咱们就不妨在体例菜单上增添本人的菜单项,而且实行指定的举措。底下的例子即是在体例菜单上增添一条分割符和"对于…"菜单项。 ---- 启用visual basic,兴建规范exe工程,在工程中增添一规范模块,称呼不妨是默许的。在规范模块的证明局部介入下列代码: '菜单api因变量证明public declare function getsystemmenu lib "user32"(byval hwnd as long, byval brevert as long) as longpublic declare function appendmenu lib "user32" alias"appendmenua" (byval hmenu as long, byval wflags as long,byval widnewitem as long, byval lpnewitem as any) as long'菜单api因变量常数证明public const mf_bycommand = &h0&public const mf_separator = &h800&public const mf_string = &h0&'相关窗口因变量的api因变量证明public declare function setwindowlong lib"user32" alias "setwindowlonga" (byval hwnd as long, byval nindex as long, byvaldwnewlong as long) as longpublic declare function callwindowproc lib "user32"alias "callwindowproca" (byval lpprevwndfuncas long, byval hwnd as long, byval msg as long,byval wparam as long, byval lparam as long) as longpublic declare function defwindowproc lib "user32" alias "defwindowproca" (byvalhwnd as long, byval wmsg as long, byval wparam as long, byval lparam as long) as long'动静public const gwl_wndproc = (-4)public const wm_nclbuttondown = &ha1public const wm_ncrbuttondown = &ha4public const wm_user = &h400public const wm_syscommand = &h112public const htsysmenu = 3public const htcaption = 2'自设置菜单项的标识号偏移量public const idm_separator = 1public const idm_myabout = 2'其余变量dim shwnd as longdim oldproc as long接着可向规范模块增添底下两个进程:public sub addmenu(frm as form) '置换窗口因变量进程shwnd = frm.hwndoldproc = setwindowlong(frm.hwnd, gwl_wndproc, addressof addcallback)end subpublic sub release() '开释自设置窗口因变量进程setwindowlong shwnd, gwl_wndproc, oldprocend sub结果向规范模块中增添一自设置窗口因变量进程:public function addcallback(byval hwnd as long,byval wmsg as long, byval wparam as long, byval lparam as long) as longselect case wmsgcase wm_syscommand '体例动静select case wparam '尝试case wm_user + idm_myabout '"对于..."菜单项'此处可介入用户须要本人处置"对于…"菜单项的代码msgbox "单击了增添的菜单条件", vbokonlycase else '其它菜单项调换体例处置addcallback = defwindowproc(hwnd,wmsg, wparam, lparam)end selectexit functioncase elseaddcallback = callwindowproc(oldproc,hwnd, wmsg, wparam, lparam)end selectend function封闭规范模块的代码窗口,翻开窗体的代码窗口,在form_load()进程中介入下列代码:'加载自设置窗口进程addmenu me'赢得体例菜单的句柄dim hmenu as longhmenu = getsystemmenu(me.hwnd, 0)'在体例菜单中增添自设置2条菜单项appendmenu hmenu, mf_separatoror mf_bycommand,idm_separator, vbnullstring'分割符appendmenu hmenu, mf_bycommand or mf_string,wm_user + idm_myabout, "对于..." '"对于…"菜单项在form_unload进程中介入下列代码:release '开释自设置窗口进程---- 到此,代码的输出处事实行,接下来的是举行尝试。单击启用按钮或按f5,启用工程,用鼠标单击窗体左上角的图标弹出体例菜单,看看能否称愿。万万要提防的一点是,在中断工程时,确定要用窗体右上角的封闭按钮大概体例菜单中的封闭菜单项,要不的话,会形成visual basic体例解体,展示不法操纵的缺点,以是在尝试工程前,最佳对工程举行生存。 ---- 之上步调在windows95,visual basic6.0情况下调节和测试经过。 

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.