如何改变菜单的背景色?100分

makefile 2004-08-31 06:30:30
VB中如何改变菜单的背景色,
在卓面中直接改变改变系统的菜单背景色,VB中的菜单颜色可以改变,
但是所有软件的菜单背景色也都改了。
有什么方法只改变VB中一个FORM的菜单背景颜色啊?
...全文
208 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pancult 2004-09-01
  • 打赏
  • 举报
回复
用subclass 子类化,拦截系统消息,重画菜单。
给你点例子,完全注解的。

''Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
''Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

''Public Const GWL_WNDPROC = (-4)
''Public Const WM_CONTEXTMENU = &H7B

''Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long 'GetMenu 作用是获取指定窗体的句柄
''Public Declare Function TrackPopupMenuBynum Lib "user32" Alias "TrackPopupMenu" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, ByVal lprc As Long) As Long
'Alias "TrackPopupMenu"是api的真名,比如
'Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long就是说GetMenu 在user32库里面的函数名就是GetMenu ,如果想在本程序中用另一个名字来使用这个函数,就必须加上Alias "???",比如我想用ABC来调用GetMenu 函数,那么可以这样声明:
'Private Declare Function ABC Lib "user32" Alias "GetMenu "(ByVal hwnd As Long) As Long,这个时候必须加Alias 来指定真名,因为user32库里的函数名字不可能改变的

''Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPOS As Long) As Long
'GetSubMenu是获取子菜单的句柄
''Public Const TPM_LEFTALIGN = &H0&
''Public Const TPM_RIGHTALIGN = &H8&
''Public hMenu As Long
''Public pMenu As Long
''Public Proroc As Long

''Function WindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'hwnd 就是产生消息的窗体(包括任何对象,按扭之类)的句柄,msg 就是消息内容,wParam 和lParam 是消息的附加消息
''Select Case msg
''Case WM_CONTEXTMEN '对msg来产生条件分歧,当产生WM_CONTEXTMENU(case WM_CONTEXTMENU)时执行的
'代码 ,case else就是说当产生的消息不是WM_CONTEXTMENU消息(其他消息)时候的分支过程
''Dim xl As Long 'Dim yl As Long,这就是鼠标坐标值的变量,我们等以下将数据放到这两个变量里
'' xl = lParam Mod H10000 'LParam参数为鼠标指针的屏幕座标(低字为X座标,高字为Y座标),其WParam参数为鼠标指针的窗口句柄
'' Y1 = lParam / &H10000

''Case Else
''WindowProc = CallWindowProc(Proroc, hwnd, msg, wParam, lParam)
'windows系统在WindowProc 过程里给了我们proroc hwnd msg wparam lparm这些参数供我们使用,
'现在我们当然要原封不动的还给他们,所以。。。proroc 告诉刚才在
'窗体里的Proroc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)的函数地址。
'hwnd,是被(控制)的对象句柄。 msg是此刻产生的消息内容。

''End Select
''End Function
of123 2004-09-01
  • 打赏
  • 举报
回复
也许可以通过 GetMenuItemRect 和 GetMenuString 取得范围和文字,然后重画。
makefile 2004-09-01
  • 打赏
  • 举报
回复
activebar2.1打开xplook后,菜单底色就是灰的了,怎么改也没用。
用vsnetmenu,有菜单项的地方变了颜色,而右侧区域还是灰色的,如何给换掉啊。
先在想要个比较简单的跟其他合并比较好的,第三方控件真难啊。
lrest 2004-08-31
  • 打赏
  • 举报
回复
有两个办法:
1、用其他控件如 activebar2.1
2、用subclass 子类化,拦截系统消息,重画菜单。(有点难度,api要非常熟悉)
rainstormmaster 2004-08-31
  • 打赏
  • 举报
回复
http://blog.csdn.net/goodname008/archive/2004/07/12/39664.aspx
wwqna 2004-08-31
  • 打赏
  • 举报
回复
要改变菜单颜色还是比较困难的
用其它的控件吧,

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧