★卢培培★ ── 欢迎光临卢培培(goodname008)的BLOG

人生真正的快乐,多在贫家茅舍,少在富室红楼。

用户操作
[即时聊天] [发私信] [加为好友]
卢培培ID:goodname008
79356次访问,排名1255好友0人,关注者0
goodname008的文章
原创 22 篇
翻译 0 篇
转载 5 篇
评论 286 篇
卢培培的公告


只有干不成事的人
没有干不成的事


代码下载说明:请将代码下载地址的链接复制到浏览器的地址栏,按下回车即可正常下载。

最近评论
jingang123gz:在C# 中怎么屏蔽WIN键啊?????
kennylyj:我在做类似的东西的时候遇到一个问题:
由于需要将一些16位的DOS程序的输出导出,因此使用了管道,但直接CreateProcess这些程序是不行的,必须通过ComSpec这个环境变量得到命令行程序的路径并把要运行的DOS程序的路径及相关参数作为命令行程序的参数才行,或者是先运行cmd/command,然后通过标准写端口写入要启动的程序的参数
而这样做却导致系统的虚拟机程序……
mycaibo:原来可以下载呀,我还自己写了一遍,不过说KBDLLHOOKSTRUCT没有定义,也不知道是为什么,谢谢哈
jarcyju:大哥下载不了呀,麻烦发一份给我,谢谢啦
zhuyc0808@gmail.com
wuzhongyi:我认为以上的方案不好,看样子你也是做开发的。先不考虑硬盘本身的分区特点及如何得到更快的访问速度,

现在如果c:\为系统盘,而也是你常用的。那样XP安装完以后要多大?2G左右吧,那么虚拟的内存又会占用1G多,你再装点软件什么的。VS2005+msdn即使你不装在C盘,照样撑死你。
文章分类
收藏
    相册
    其它图片
    文章用图
    A.我的软件
    1.注册表大师 v2.0
    2.窗口间谍
    3.图易贴 v1.1
    B.强烈推荐
    1.VB打造超酷个性化菜单[一]
    2.VB打造超酷个性化菜单[二]
    3.VB打造超酷个性化菜单[三]
    4.剖析VC++函数调用约定
    C.有脚印的地方
    CSDN--中国软件网
    微软中国社区
    微软中文新闻组
    D.开放源代码
    1.鼠标感应器
    2.VB自绘菜单类
    3.你想要钱吗?
    E.友情链接
    1. 凝尘
    2. 羽毛羽毛
    3. 泗水寻芳
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 VB打造超酷个性化菜单(二)收藏

    新一篇: VB打造超酷个性化菜单(三) | 旧一篇: VB打造超酷个性化菜单(一)

    VB打造超酷个性化菜单(二)

        其实,漂亮的界面都是“画”出来的,菜单当然也不例外。既然是“画”出来的,就需要有窗体来接收“画”菜单这个消息,后面我们会看到,实际上不仅仅是“画”这个消息,一切关于这个菜单的消息都要有一个窗体来接收。如果你对消息不太了解,可以看看网上其它一些关于Windows消息机制的文章。不了解也没有关系,只要会使用就可以了,后面的文章给出了完整的源代码,而且文章的最后还给出了源代码的下载地址。

    下面我们来创建接收消息的窗体:打开上次建好的工程,添加一个窗体,并将其名称设置为frmMenu注意:这一步是必须的)。还记得上篇文章的最后一幅图吗?菜单左边那个黑底色的附加条,为了方便,将frmMenuPicture属性设置成那幅图。到此,这个窗体就算OK了!对了,就这样,因为这个窗体仅仅是为了处理消息和存储那个黑底色的风格条,我们将会对它进行子类处理,处理消息的代码全部都放在了将在下一篇中详细介绍的标准模块中。

        接下来添加一个类模块,并将其名称设置为cMenu,代码如下:

    '**************************************************************************************************************

    '* 本类模块是一个菜单类, 提供了各种样式的菜单的制作方案

    '*

    '* 版权: LPP软件工作室

    '* 作者: 卢培培(goodname008)

    '* (******* 复制请保留以上信息 *******)

    '**************************************************************************************************************

     

    Option Explicit

     

    Private Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, lprc As Any) As Long

     

    Public Enum MenuUserStyle                                   ' 菜单总体风格

        STYLE_WINDOWS

        STYLE_XP

        STYLE_SHADE

        STYLE_3D

        STYLE_COLORFUL

    End Enum

     

    Public Enum MenuSeparatorStyle                              ' 菜单分隔条风格

        MSS_SOLID

        MSS_DASH

        MSS_DOT

        MSS_DASDOT

        MSS_DASHDOTDOT

        MSS_NONE

        MSS_DEFAULT

    End Enum

     

    Public Enum MenuItemSelectFillStyle                         ' 菜单项背景填充风格

        ISFS_NONE

        ISFS_SOLIDCOLOR

        ISFS_HORIZONTALCOLOR

        ISFS_VERTICALCOLOR

    End Enum

     

    Public Enum MenuItemSelectEdgeStyle                         ' 菜单项边框风格

        ISES_SOLID

        ISES_DASH

        ISES_DOT

        ISES_DASDOT

        ISES_DASHDOTDOT

        ISES_NONE

        ISES_SUNKEN

        ISES_RAISED

    End Enum

     

    Public Enum MenuItemIconStyle                               ' 菜单项图标风格

        IIS_NONE

        IIS_SUNKEN

        IIS_RAISED

        IIS_SHADOW

    End Enum

     

    Public Enum MenuItemSelectScope                             ' 菜单项高亮条的范围

        ISS_TEXT = &H1

        ISS_ICON_TEXT = &H2

        ISS_LEFTBAR_ICON_TEXT = &H4

    End Enum

     

    Public Enum MenuLeftBarStyle                                ' 菜单附加条风格

        LBS_NONE

        LBS_SOLIDCOLOR

        LBS_HORIZONTALCOLOR

        LBS_VERTICALCOLOR

        LBS_IMAGE

    End Enum

     

    Public Enum MenuItemType                                    ' 菜单项类型

        MIT_STRING = &H0

        MIT_CHECKBOX = &H200

        MIT_SEPARATOR = &H800

    End Enum

     

    Public Enum MenuItemState                                   ' 菜单项状态

        MIS_ENABLED = &H0

        MIS_DISABLED = &H2

        MIS_CHECKED = &H8

        MIS_UNCHECKED = &H0

    End Enum

     

    Public Enum PopupAlign                                      ' 菜单弹出对齐方式

        POPUP_LEFTALIGN = &H0&                                  ' 水平左对齐

        POPUP_CENTERALIGN = &H4&                                ' 水平居中对齐

        POPUP_RIGHTALIGN = &H8&                                 ' 水平右对齐

        POPUP_TOPALIGN = &H0&                                   ' 垂直上对齐

        POPUP_VCENTERALIGN = &H10&                              ' 垂直居中对齐

        POPUP_BOTTOMALIGN = &H20&                               ' 垂直下对齐

    End Enum

     

    ' 释放类

    Private Sub Class_Terminate()

        SetWindowLong frmMenu.hwnd, GWL_WNDPROC, preMenuWndProc

        Erase MyItemInfo

        DestroyMenu hMenu

    End Sub

     

    ' 创建弹出式菜单

    Public Sub CreateMenu()

        preMenuWndProc = SetWindowLong(frmMenu.hwnd, GWL_WNDPROC, AddressOf MenuWndProc)

        hMenu = CreatePopupMenu()

        Me.Style = STYLE_WINDOWS

    End Sub

     

    ' 插入菜单项并保存自定义菜单项数组, 设置Owner_Draw自绘菜单

    Public Sub AddItem(ByVal itemAlias As String, ByVal itemIcon As StdPicture, ByVal itemText As String, ByVal itemType As MenuItemType, Optional ByVal itemState As MenuItemState)

        Static ID As Long, i As Long

        Dim ItemInfo As MENUITEMINFO

        ' 插入菜单项

        With ItemInfo

            .cbSize = LenB(ItemInfo)

            .fMask = MIIM_STRING Or MIIM_FTYPE Or MIIM_STATE Or MIIM_SUBMENU Or MIIM_ID Or MIIM_DATA

            .fType = itemType

            .fState = itemState

            .wID = ID

            .dwItemData = True

            .cch = lstrlen(itemText)

            .dwTypeData = itemText

        End With

        InsertMenuItem hMenu, ID, False, ItemInfo

       

        ' 将菜单项数据存入动态数组

        ReDim Preserve MyItemInfo(ID) As MyMenuItemInfo

       

        For i = 0 To UBound(MyItemInfo)

            If MyItemInfo(i).itemAlias = itemAlias Then

                Class_Terminate

                Err.Raise vbObjectError + 513, "cMenu", "菜单项别名相同."

            End If

        Next i

     

        With MyItemInfo(ID)

            Set .itemIcon = itemIcon

            .itemText = itemText

            .itemType = itemType

            .itemState = itemState

            .itemAlias = itemAlias

        End With

       

        ' 获得菜单项数据

        With ItemInfo

            .cbSize = LenB(ItemInfo)

            .fMask = MIIM_DATA Or MIIM_ID Or MIIM_TYPE

        End With

        GetMenuItemInfo hMenu, ID, False, ItemInfo

       

        ' 设置菜单项数据

        With ItemInfo

            .fMask = .fMask Or MIIM_TYPE

            .fType = MFT_OWNERDRAW

        End With

        SetMenuItemInfo hMenu, ID, False, ItemInfo

       

        ' 菜单项ID累加

        ID = ID + 1

       

    End Sub

     

    ' 删除菜单项

    Public Sub DeleteItem(ByVal itemAlias As String)

        Dim i As Long

        For i = 0 To UBound(MyItemInfo)

            If MyItemInfo(i).itemAlias = itemAlias Then

                DeleteMenu hMenu, i, 0

                Exit For

            End If

        Next i

    End Sub

     

    ' 弹出菜单

    Public Sub PopupMenu(ByVal x As Long, ByVal y As Long, ByVal Align As PopupAlign)

        TrackPopupMenu hMenu, Align, x, y, 0, frmMenu.hwnd, ByVal 0

    End Sub

     

    ' 设置菜单项图标

    Public Sub SetItemIcon(ByVal itemAlias As String, ByVal itemIcon As StdPicture)

        Dim i As Long

        For i = 0 To UBound(MyItemInfo)

            If MyItemInfo(i).itemAlias = itemAlias Then

                Set MyItemInfo(i).itemIcon = itemIcon

                Exit For

            End If

        Next i

    End Sub

     

    ' 获得菜单项图标

    Public Function GetItemIcon(ByVal itemAlias As String) As StdPicture

        Dim i As Long

        For i = 0 To UBound(MyItemInfo)

            If MyItemInfo(i).itemAlias = itemAlias Then

                Set GetItemIcon = MyItemInfo(i).itemIcon

                Exit For

            End If

        Next i

    End Function

     

    ' 设置菜单项文字

    Public Sub SetItemText(ByVal itemAlias As String, ByVal itemText As String)

        Dim i As Long

        For i = 0 To UBound(MyItemInfo)

            If MyItemInfo(i).itemAlias = itemAlias Then

                MyItemInfo(i).itemText = itemText

                Exit For

            End If

        Next i

    End Sub

     

    ' 获得菜单项文字

    Public Function GetItemText(ByVal itemAlias As String) As String

        Dim i As Long

        For i = 0 To UBound(MyItemInfo)

            If MyItemInfo(i).itemAlias = itemAlias Then

                GetItemText = MyItemInfo(i).itemText

                Exit For

            End If

        Next i

    End Function

     

    ' 设置菜单项状态

    Public Sub SetItemState(ByVal itemAlias As String, ByVal itemState As MenuItemState)

        Dim i As Long

        For i = 0 To UBound(MyItemInfo)

            If MyItemInfo(i).itemAlias = itemAlias Then

                MyItemInfo(i).itemState = itemState

                Dim ItemInfo As MENUITEMINFO

                With ItemInfo

                    .cbSize = Len(ItemInfo)

                    .fMask = MIIM_STRING Or MIIM_FTYPE Or MIIM_STATE Or MIIM_SUBMENU Or MIIM_ID Or MIIM_DATA

                End With

                GetMenuItemInfo hMenu, i, False, ItemInfo

                With ItemInfo

                    .fState = .fState Or itemState

                End With

                SetMenuItemInfo hMenu, i, False, ItemInfo

                Exit For

            End If

        Next i

    End Sub

     

    ' 获得菜单项状态

    Public Function GetItemState(ByVal itemAlias As String) As MenuItemState

        Dim i As Long

        For i = 0 To UBound(MyItemInfo)

            If MyItemInfo(i).itemAlias = itemAlias Then

                GetItemState = MyItemInfo(i).itemState

                Exit For

            End If

        Next i

    End Function

     

    ' 属性: 菜单句柄

    Public Property Get hwnd() As Long

        hwnd = hMenu

    End Property

     

    Public Property Let hwnd(ByVal nValue As Long)

     

    End Property

     

    ' 属性: 菜单附加条宽度

    Public Property Get LeftBarWidth() As Long

        LeftBarWidth = BarWidth

    End Property

     

    Public Property Let LeftBarWidth(ByVal nBarWidth As Long)

        If nBarWidth >= 0 Then

            BarWidth = nBarWidth

        End If

    End Property

     

    ' 属性: 菜单附加条风格

    Public Property Get LeftBarStyle() As MenuLeftBarStyle

        LeftBarStyle = BarStyle

    End Property

     

    Public Property Let LeftBarStyle(ByVal nBarStyle As MenuLeftBarStyle)

        If nBarStyle >= 0 And nBarStyle <= 4 Then

            BarStyle = nBarStyle

        End If

    End Property

     

    ' 属性: 菜单附加条图像(只有当 LeftBarStyle 设置为 LBS_IMAGE 时才有效)

    Public Property Get LeftBarImage() As StdPicture

        Set LeftBarImage = BarImage

    End Property

     

    Public Property Let LeftBarImage(ByVal nBarImage As StdPicture)

        Set BarImage = nBarImage

    End Property

     

    ' 属性: 菜单附加条过渡色起始颜色(只有当 LeftBarStyle 设置为 LBS_HORIZONTALCOLOR LBS_VERTICALCOLOR 时才有效)

    '       LeftBarStyle 设置为 LBS_SOLIDCOLOR (实色填充)时以 LeftBarStartColor 颜色为准

    Public Property Get LeftBarStartColor() As Long

        LeftBarStartColor = BarStartColor

    End Property

     

    Public Property Let LeftBarStartColor(ByVal nBarStartColor As Long)

        BarStartColor = nBarStartColor

    End Property

     

    ' 属性: 菜单附加条过渡色终止颜色(只有当 LeftBarStyle 设置为 LBS_HORIZONTALCOLOR LBS_VERTICALCOLOR 时才有效)

    '       LeftBarStyle 设置为 LBS_SOLIDCOLOR (实色填充)时以 LeftBarStartColor 颜色为准

    Public Property Get LeftBarEndColor() As Long

        LeftBarEndColor = BarEndColor

    End Property

     

    Public Property Let LeftBarEndColor(ByVal nBarEndColor As Long)

        BarEndColor = nBarEndColor

    End Property

     

    ' 属性: 菜单项高亮条的范围

    Public Property Get ItemSelectScope() As MenuItemSelectScope

        ItemSelectScope = SelectScope

    End Property

     

    Public Property Let ItemSelectScope(ByVal nSelectScope As MenuItemSelectScope)

        SelectScope = nSelectScope

    End Property

     

    ' 属性: 菜单项可用时文字颜色

    Public Property Get ItemTextEnabledColor() As Long

        ItemTextEnabledColor = TextEnabledColor

    End Property

     

    Public Property Let ItemTextEnabledColor(ByVal nTextEnabledColor As Long)

        TextEnabledColor = nTextEnabledColor

    End Property

     

    ' 属性: 菜单项不可用时文字颜色

    Public Property Get ItemTextDisabledColor() As Long

        ItemTextDisabledColor = TextDisabledColor

    End Property

     

    Public Property Let ItemTextDisabledColor(ByVal nTextDisabledColor As Long)

        TextDisabledColor = nTextDisabledColor

    End Property

     

    ' 属性: 菜单项选中时文字颜色

    Public Property Get ItemTextSelectColor() As Long

        ItemTextSelectColor = TextSelectColor

    End Property

     

    Public Property Let ItemTextSelectColor(ByVal nTextSelectColor As Long)

        TextSelectColor = nTextSelectColor

    End Property

     

    ' 属性: 菜单项图标风格

    Public Property Get ItemIconStyle() As MenuItemIconStyle

        ItemIconStyle = IconStyle

    End Property

     

    Public Property Let ItemIconStyle(ByVal nIconStyle As MenuItemIconStyle)

        IconStyle = nIconStyle

    End Property

     

    ' 属性: 菜单项边框风格

    Public Property Get ItemSelectEdgeStyle() As MenuItemSelectEdgeStyle

        ItemSelectEdgeStyle = EdgeStyle

    End Property

     

    Public Property Let ItemSelectEdgeStyle(ByVal nEdgeStyle As MenuItemSelectEdgeStyle)

        EdgeStyle = nEdgeStyle

    End Property

     

    ' 属性: 菜单项边框颜色

    Public Property Get ItemSelectEdgeColor() As Long

        ItemSelectEdgeColor = EdgeColor

    End Property

     

    Public Property Let ItemSelectEdgeColor(ByVal nEdgeColor As Long)

        EdgeColor = nEdgeColor

    End Property

     

    ' 属性: 菜单项背景填充风格

    Public Property Get ItemSelectFillStyle() As MenuItemSelectFillStyle

        ItemSelectFillStyle = FillStyle

    End Property

     

    Public Property Let ItemSelectFillStyle(ByVal nFillStyle As MenuItemSelectFillStyle)

        FillStyle = nFillStyle

    End Property

     

    ' 属性: 菜单项过渡色起始颜色(只有当 ItemSelectFillStyle 设置为 ISFS_HORIZONTALCOLOR ISFS_VERTICALCOLOR 时才有效)

    '       ItemSelectFillStyle 设置为 ISFS_SOLIDCOLOR (实色填充)时以 ItemSelectFillStartColor 颜色为准

    Public Property Get ItemSelectFillStartColor() As Long

        ItemSelectFillStartColor = FillStartColor

    End Property

     

    Public Property Let ItemSelectFillStartColor(ByVal nFillStartColor As Long)

        FillStartColor = nFillStartColor

    End Property

     

    ' 属性: 菜单项过渡色终止颜色(只有当 ItemSelectFillStyle 设置为 ISFS_HORIZONTALCOLOR ISFS_VERTICALCOLOR 时才有效)

    '       ItemSelectFillStyle 设置为 ISFS_SOLIDCOLOR (实色填充)时以 ItemSelectFillStartColor 颜色为准

    Public Property Get ItemSelectFillEndColor() As Long

        ItemSelectFillEndColor = FillEndColor

    End Property

     

    Public Property Let ItemSelectFillEndColor(ByVal nFillEndColor As Long)

        FillEndColor = nFillEndColor

    End Property

     

    ' 属性: 菜单背景颜色

    Public Property Get BackColor() As Long

        BackColor = BkColor

    End Property

     

    Public Property Let BackColor(ByVal nBkColor As Long)

        BkColor = nBkColor

    End Property

     

    ' 属性: 菜单分隔条风格

    Public Property Get SeparatorStyle() As MenuSeparatorStyle

        SeparatorStyle = SepStyle

    End Property

     

    Public Property Let SeparatorStyle(ByVal nSepStyle As MenuSeparatorStyle)

        SepStyle = nSepStyle

    End Property

     

    ' 属性: 菜单分隔条颜色

    Public Property Get SeparatorColor() As Long

        SeparatorColor = SepColor

    End Property

     

    Public Property Let SeparatorColor(ByVal nSepColor As Long)

        SepColor = nSepColor

    End Property

     

    ' 属性: 菜单总体风格

    Public Property Get Style() As MenuUserStyle

        Style = MenuStyle

    End Property

     

    Public Property Let Style(ByVal nMenuStyle As MenuUserStyle)

        MenuStyle = nMenuStyle

        Select Case nMenuStyle

            Case STYLE_WINDOWS                                              ' Windows 默认风格

                Set BarImage = LoadPicture()

                BarWidth = 20

                BarStyle = LBS_NONE

                BarStartColor = GetSysColor(COLOR_MENU)

                BarEndColor = BarStartColor

                SelectScope = ISS_ICON_TEXT

                TextEnabledColor = GetSysColor(COLO