⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 040105.htm

📁 提供一个VB学习教程,入门级。来源于网上
💻 HTM
📖 第 1 页 / 共 2 页
字号:
        [问题:怎样给插入的菜单添加事件过程,以响应用户的单击操作?]<br>
        ----------------------------------------<br>
        在菜单尾部附加菜单项:AppendMenuA函数<br>
        声明:<br>
        Declare Function AppendMenuA Lib &quot;user32&quot; (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long<br>
        参数与上面的InsertMenuA基本相同,因它附加到菜单尾部,所以省去了指定插入位置的那个nPosition参数而已。调用如:<br>
        lxn = GetSystemMenu(hwnd, False)<br>
        AppendMenu lxn, MF_STRING, 11, &quot;李新宁&quot;<br>
        连wFlags参数的MF_BYPOSITION也不要了,因为不要指定添加位置(反正就在尾部),故用来度量位置的&quot;依据&quot;也就免了。<br>
        --------------------------------------------------<br>
        修改菜单项:ModifyMenuA函数<br>
        声明:<br>
        Declare Function ModifyMenuA Lib &quot;user32&quot; (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As String) as long<br>
        五个参数与InsertMenuA的相同,第1个为菜单句柄,第2个为要修改的菜单项位置(从0开始)或ID,第3个指明①用位置或ID来选择菜单项②菜单项标题为文本还是图形③菜单项是否有效…,第4个自定1个菜单项的ID号,第5个指定菜单项的标题内容(文字或图形句柄)。<br>
        -------------------------------------------<br>
        删除菜单项:DeleteMenu函数<br>
        声明:<br>
        Declare Function DeleteMenu Lib &quot;user32&quot; (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long<br>
        第1个参数指定菜单句柄,第2个参数指定菜单项的位置或ID,第3个参数指定按位置还是按ID。调用如:<br>
        DeleteMenu GetSystemMenu(hwnd,false),1,MF_BYPOSITION<br>
        注:在上面多处的讲述中,&quot;菜单&quot;和&quot;菜单项&quot;不同,&quot;菜单项&quot;是&quot;菜单&quot;中的一个项。而&quot;菜单&quot;包含多个&quot;菜单项&quot;。<br>
        --------------------------------------<br>
        删除菜单:DestroyMenu函数<br>
        此函数删除菜单,当然也就删除了它的所有菜单项。声明:<br>
        Declare Function DestroyMenu Lib &quot;user32&quot; (ByVal hMenu As Long) As Long<br>
        参数hMenu指定要删除的菜单句柄,调用如:<br>
        lxn=GetSystemMenu(hwnd,false)<br>
        DestroyMenu lxn<br>
        ---------------------------------------- <br>
        取得指定菜单所包含菜单项数:GetMenuItemCount函数<br>
        声明:<br>
        Declare Function GetMenuItemCount Lib &quot;user32&quot;(ByVal hMenu As Long) As Long<br>
        参数简单:hMenu指定1个菜单句柄。<br>
        函数返回值为该菜单下包含的子菜单项数。<br>
        调用如:<br>
        s = GetMenuItemCount(GetSubMenu(GetMenu(form1.hwnd),0))<br>
        Print s <br>
        上例返回总句柄下第一个子菜单&quot;文件&quot;菜单下包含的子菜单项数。如为7。<br>
        ---------------------------------------------------<br>
        取得指定菜单下某子菜单项的命令ID号:GetMenuItemID<br>
        该函数返回1个菜单下指定位置的1个子菜单项的菜单ID号。如果指定的子菜单项是一分隔符,则函数返回值为0,声明:<br>
        Declare Function GetMenuItemID Lib &quot;user32&quot;(ByVal hMenu As Long, ByVal nPos As Long) As Long <br>
        参数:hMenu--父菜单句柄。 <br>
        nPos--子菜单项在父菜单中的位置,第1个子菜单项编号为0。<br>
        -----------------------------------------<br>
        改变菜单项函数:ModifyMenuA函数<br>
        声明:<br>
        Declare Function ModifyMenuA Lib &quot;user32&quot;(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As String) as long<br>
        参数:hMenu--欲改变的菜单的上级父菜单句柄。<br>
        nPosition--欲改变的子菜单项的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的子菜单项的命令ID号。如设置的是MF_BYPOSITION,这个参数就代表欲改变菜单项在上级父菜单中的位置(第一个菜单项的位置为零) <br>
        wFlags--一系列常数标志的组合。详见菜单常数标志表 <br>
        wIDNewItem--指定欲改变菜单项的新命令ID号。如在wFlags参数中指定MF_POPUP,就应是一个弹出式菜单的句柄。 <br>
        lpString--如在wFlags参数中指定了MF_STRING标志,就代表欲设置到菜单项的字符串。如设置的是MF_BITMAP,就代表一个Long变量,其中包含了一个位图句柄。如设置的是MF_OWNERDRAW,那么这个值就会包括到DRAWITEMSTRUCT和MEASUREITEMSTRUCT结构中,并由windows在菜单项需要重画的时候发出 <br>
        注:wFlags参数的下述组合形式是不允许的:MF_BYCOMMAND和MF_BYPOSITION;MF_CHECKED和MF_UNCHECKED;MF_MENUBARBREAK和MF_MENUBREAK;MF_DISABLED,MF_ENABLED和MF_GRAYED;MF_BITMAP,MF_STRING,MF_OWNERDRAW和MF_SEPARATOR<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>
        ----------------------------------------------<br>
        1个创建位图菜单的例子,代码如下:<br>
        Public Const SRCCOPY = &amp;HCC0020<br>
        Public Const MF_BYPOSITION = &amp;H400&amp;<br>
        Public Const MF_BITMAP = &amp;H4&amp;
        <p>Private Sub Form_Load()<br>
          Dim nLoopCtr, nWidth, nHeight As Integer<br>
          Dim lResult, hTempDC, lTempID, hMenuID, lItemCount, hBitmap As Long<br>
          nWidth = Picture1(nLoopCtr).Width \ Screen.TwipsPerPixelX<br>
          nHeight = Picture1(nLoopCtr).Height \ Screen.TwipsPerPixelY<br>
          hMenuID = GetSubMenu(GetMenu(Me.hwnd), 0)<br>
          hTempDC = CreateCompatibleDC(Picture1(nLoopCtr).hdc)<br>
          For nLoopCtr = 0 To 3<br>
          hBitmap = CreateCompatibleBitmap(Picture1(nLoopCtr).hdc, nWidth, nHeight)<br>
          lTempID = SelectObject(hTempDC, hBitmap)<br>
          lResult = BitBlt(hTempDC, 0, 0, nWidth, nHeight, Picture1(nLoopCtr).hdc, 0, 0, SRCCOPY)<br>
          lTempID = SelectObject(hTempDC, lTempID)<br>
          mnubook(nLoopCtr).Caption = &quot;&quot;<br>
          lResult = ModifyMenuA(hMenuID, nLoopCtr, MF_BYPOSITION Or MF_BITMAP, _<br>
          GetMenuItemID(hMenuID, nLoopCtr), hBitmap)<br>
          Next nLoopCtr<br>
          lResult = DeleteDC(hTempDC)<br>
          End Sub</p>
        <p align="center">
        <br>
        &lt; <a href="040104.htm">上一页</a>--<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="040106.htm">下一页</a>     
        &gt;<br>
      </td>
    </tr>
  </table>
  </center>
</div>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -