📄 040105.htm
字号:
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>vb study</title>
<style>
<!--
td {font-size: 9pt}
A:link {text-decoration: none; color: #0033cc;font-size: 9pt}
A:visited {text-decoration: none; color: #0066CC;font-size: 9pt}
A:active {text-decoration: none; color: #ff0000; font-size: 9pt}
A:hover {text-decoration: underline; color: #000000;font-size: 9pt}
-->
</style>
</head>
<body>
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="98%">
<tr>
<td width="100%"><a href="#">你的位置</a>:<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="#">VB学习</a>--<a href="#">API函数</a></td>
</tr>
<tr>
<td width="100%">
<p align="center">菜单类函数</td>
</tr>
<tr>
<td width="100%"><br>
取得窗口中的菜单句柄函数:GetMenu<br>
该函数返回指定窗口中菜单的"总"的句柄(在有菜单的前提下)。声明:<br>
Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long<br>
参数hwnd为1个窗口句柄。注意:该窗口应是1个窗体如Form的句柄。不能是1个子窗口(因为子窗口不会包含菜单)。<br>
说明:我们通常见到的"文件""编辑""帮助"等最上层菜单都归于1个窗口总句柄之下,也就是说它们都是窗口菜单总句柄的"子菜单"。<br>
调用如: x = GetMenu(Form1.hwnd),x就返回Form1中菜单总句柄。<br>
--------------------------------------<br>
取得菜单中一个指定菜单项的句柄:GetSubMenu<br>
该函数根据菜单的句柄求得其中某个菜单项的句柄,要指明所求菜单项位于菜单中的顺序位置,从第1个菜单项位置为0开始。声明:<br>
Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long <br>
参数:<br>
hMenu:父菜单的句柄 <br>
nPos:子菜单项在该父菜单中的位置。第一个子菜单项的编号为0。 <br>
多次调用此函数,可得到任意级下的子菜单项句柄,如要得到窗口form1中"文件"菜单(排在同级菜单第1位)的"新建"(在同级菜单即"文件"菜单的多条子菜单中位置排在第1位)菜单的"Web页"(排在"新建"下1级子菜单的第3位)子菜单的句柄,如下:<br>
a = GetMenu(Form1.hwnd) 得到总句柄<br>
b = GetSubMenu(a, 0) 得到"文件"菜单句柄<br>
c = GetSubMenu(b, 0) 得到"新建"菜单句柄<br>
d = GetSubMenu(c, 2) 得到"Web页"菜单句柄<br>
----------------------------------------------<br>
读取指定菜单项的标题字符串:GetMenuStringA函数<br>
声明:<br>
Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, ByVal nMaxCount As Long, ByVal wFlag As Long) As Long<br>
调用如: <br>
Private Const MF_BYPOSITION = &H400&<br>
z = GetMenuStringA(GetMenu(Form1.hwnd), 0, LXN, 255, MF_BYPOSITION)<br>
LXN = Left(LXN, z)<br>
Print LXN<br>
上例LXN返回"文件"菜单的"文件"两个字。<br>
参数:<br>
hMenu:菜单句柄。 <br>
wIDItem:菜单项的标识符。如果在wFlags参数中设置了MF_BYCOMMAND,这个参数就用菜单项的命令ID。如果设置的是MF_BYPOSITION,这个参数就用菜单项在菜单中的位置(这时与GetSubMenu的参数相似) <br>
lpString:指定一个预先定义好的字符串缓冲区,以便为菜单项装载标题字串 <br>
nMaxCount:载入lpString缓冲区中的最大字符数量+1。(缓冲区长度)。 <br>
wFlag:常数MF_BYCOMMAND或MF_BYPOSITION,取决于wIDItem参数的设置 。<br>
注:函数返回值为在lpString中返回的字串的长度。因此上例中直接用 LXN = Left(LXN, z)来得到"纯返回字符串"。<br>
--------------------------------------------------<br>
修改窗口的系统菜单:GetSystemMenu函数<br>
该函数返回指定窗口的系统菜单句柄,并决定是否可修改,声明:<br>
Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long<br>
参数hwnd为窗口句柄,bRevert--是否使用缺省的原始系统菜单,设为False时可修改系统菜单,设为True则恢复为原始系统菜单。<br>
函数返回值为系统菜单句柄。<br>
调用如:(向系统菜单附加1条菜单项)<br>
lxn = GetSystemMenu(hwnd, False)<br>
AppendMenu lxn, MF_STRING, 11, "李新宁"<br>
可以用InsertMenuItem函数插入或追加菜单项, 当然也可分别用InsertMenu插入菜单项,或用AppendMenu追加菜单项。<br>
--------------------------------------<br>
插入菜单项:InsertMenuA函数<br>
此函数在菜单的指定位置处插入一个菜单项,并根据需要将其他菜单项向下移动。<br>
声明:<br>
Declare Function InsertMenuA Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long<br>
参数:<br>
hMenu :菜单的句柄 <br>
nPosition:指定新菜单项插入点的一个现有菜单项标识符。如果在wFlags中指定了MF_BYCOMMAND标志,这个参数就代表欲改变的菜单项的命令ID。如设置的是MF_BYPOSITION标志,这个参数就代表菜单项在菜单中的位置,第一个菜单项的位置为零。 <br>
wFlags :可以是以下多个常数标志的组合:<br>
菜单常数标志表<br>
MF_BITMAP 菜单条目是一幅位图。一旦设入菜单,这幅位图就绝对不能删除。所以不应该使用由vb的image属性返回的值<br>
MF_BYCOMMAND 菜单条目由菜单的命令ID指定<br>
MF_BYPOSITION 菜单条目由条目在菜单中的位置决定。零代表菜单中的第一个条目<br>
MF_CHECKED 检查指定的菜单条目。不能与vb的checked属性兼容<br>
MF_DISABLED 禁止指定的菜单条目。不与vb的enabled属性兼容<br>
MF_ENABLED 允许指定的菜单条目。不与vb的enabled属性兼容<br>
MF_GRAYED 禁止指定的菜单条目,并用浅灰色描述它。不与vb的enabled属性兼容<br>
MF_MENUBARBREAK 在弹出式菜单中,将指定的条目放置于一个新列,并用一条垂直线分隔不同的列<br>
MF_MENUBREAK 在弹出式菜单中,将指定的条目放置于一个新列。在顶级菜单中,将条目放置到一个新行<br>
MF_OWNERDRAW 创建一个物主绘图菜单(由您设计的程序负责描绘每个菜单条目)<br>
MF_POPUP 将一个弹出式菜单置于指定的条目。可用于创建子菜单及弹出式菜单<br>
MF_SEPARATOR 在指定的条目处显示一条分隔线<br>
MF_STRING 在指定的条目处放置一个字串。不与vb的caption属性兼容<br>
MF_UNCHECKED 检查指定的条目。不能与vb的checked属性兼容<br>
注:标志的下述组合形式是不允许的:MF_BYCOMMAND和MF_BYPOSITION;MF_CHECKED和MF_UNCHECKED;MF_MENUBARBREAK和MF_MENUB<br>
REAK;MF_DISABLED,MF_ENABLED和MF_GRAYED;MF_BITMAP,MF_STRING,MF_OWNERDRAW和MF_SEPARATOR <br>
wIDNewItem :指定菜单项的新命令ID。如果在wFlags中指定了MF_POPUP标志,就应该指定弹出式菜单的一个句柄 。(其实相当于菜单编辑器中的"名称"框,只不过要用Long型值,如123,以用于响应事件)。<br>
lpNewItem 如果在wFlags参数中设置了MF_STRING标志,就代表要设置到菜单中的字串(String)。(相当于菜单编辑器中的"标题"框,如写"文件"),如设置的是MF_BITMAP标志,就代表一个Long型变量,其中包含了一个位图句柄。调用如:<br>
lxn = GetSystemMenu(hwnd, False)<br>
InsertMenuA lxn, 0, MF_BYPOSITION + MF_STRING, 11, "添加到第一项"<br>
上例lxn为菜单句柄,0为添加位置(添加到原第1项前)用MF_BYPOSITION"位置"非"ID"作标准,第3个参数指定①按POSITION来度量菜单顺序位置;和②菜单项标题内容为文字,"11"为自定的菜单ID标识符(用于代码中对新建的本菜单项进行控制),后面引号内文字为新插入的这个菜单项标题。<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -