怎么修改VB6菜单的字体呢?

anstern 2004-10-27 02:50:41
在VB6中,在窗口添加中文菜单,但字体太大了,不好看,我想改小一点,但不知道如何修改。
...全文
500 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingxiangchen 2004-11-03
  • 打赏
  • 举报
回复
啊、那么多蚂啊,晕哦,不过挺不错的,我可不行啦,呵呵,跟你学、
skywolfY 2004-11-03
  • 打赏
  • 举报
回复
我看算了吧,别改啦,改来改去也不如意,还不如用菜单类或控件呢,虽没微软件的菜单听话,不过随便
怎么改都行
wudeqing 2004-11-02
  • 打赏
  • 举报
回复
怎么我做菜单小得可怜,我想变大,你们知道吗?
winnerfast_gg 2004-10-27
  • 打赏
  • 举报
回复
代码写的好多。
同意改系统的字体设置不就得了。
裸男 2004-10-27
  • 打赏
  • 举报
回复
楼上的代码那么多,都看得头晕。:(
lxcc 2004-10-27
  • 打赏
  • 举报
回复
最简单就是 kmzs(.:RNPA:.山水岿濛) 的方法
kona813 2004-10-27
  • 打赏
  • 举报
回复
我也想改我程序的菜单字体,不会要这样吧,写完都不知道有没有必要了
江语 2004-10-27
  • 打赏
  • 举报
回复
天啊,就为改个菜单的字体!!
还想懒够 2004-10-27
  • 打赏
  • 举报
回复
窗体代码


Private Sub Form_Load()
Call CreateMenus(Me.hWnd)
'set Callback
OldWindowProc = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf NewWindowProc)
End Sub

Private Sub Form_Unload(Cancel As Integer)

'do some clean work
Call OnDestroy

End Sub
还想懒够 2004-10-27
  • 打赏
  • 举报
回复
续上面的模块代码

Public Function NewWindowProc(ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, lParam As Long) As Long
Dim mM As MEASUREITEMSTRUCT
Dim dM As DRAWITEMSTRUCT
Select Case msg
Case WM_DRAWITEM
MemCopy dM, lParam, Len(dM)
If dM.CtlType = ODT_MENU Then
OnDrawMenuItem hWnd, dM
End If
Case WM_MEASUREITEM
MemCopy mM, lParam, Len(mM)
If mM.CtlType = ODT_MENU Then
mM = OnMeasureItem(hWnd, mM)
MemCopy lParam, mM, Len(mM)
End If
End Select
NewWindowProc = CallWindowProc(OldWindowProc, hWnd, msg, wParam, VarPtr(lParam))
End Function

Sub CreateMenus(hWnd As Long)
hMenu = GetMenu(Form1.hWnd)
hFont = CreateFont(20, 0, 0, 0, 0, 0, 0, 0, 106, 0, 16, 0, 0, "隶书") '"Arial")
Dim iNoOfMenu%, iNoOfSubMenu%
Dim iCounter1%, iCounter2%
iNoOfMenu = GetMenuItemCount(hMenu)
'iNoOfMenuItems

'******************************
ReDim MyItem(1 To 7)
'Here I choose 7 since altogether there are 7 menuitems in
'File & Edit menu. If u want can write a function to
'findout the No. of menu items by extending the following
'For Loop.
'******************************
If iNoOfMenu Then
For iCounter1 = 0 To iNoOfMenu - 1
CreateOwnerDrawMenus hMenu, iCounter1
hSubMenu = GetSubMenu(hMenu, iCounter1)
iNoOfSubMenu = GetMenuItemCount(hSubMenu)
If iNoOfSubMenu Then
For iCounter2 = 0 To iNoOfSubMenu - 1
CreateOwnerDrawMenus hSubMenu, iCounter2
Next iCounter2
End If
Next iCounter1
End If
End Sub
Sub CreateOwnerDrawMenus(hdMenu As Long, iMenuID As Integer)
Dim minfo As MENUITEMINFO, r As Long
iNoOfMenuItems = iNoOfMenuItems + 1
minfo.cbSize = Len(minfo)
minfo.fMask = MIIM_TYPE
minfo.fType = MFT_STRING
minfo.dwTypeData = Space$(256)
minfo.cch = Len(minfo.dwTypeData)
'get menuitem data
r = GetMenuItemInfo(hdMenu, iMenuID, True, minfo)
'and save into user array
MyItem(iNoOfMenuItems).cchItemText = minfo.cch 'menuitem length
MyItem(iNoOfMenuItems).szItemText = Trim(minfo.dwTypeData) 'text
'change menu type
minfo.fType = MF_OWNERDRAW
minfo.fMask = MIIM_TYPE Or MIIM_DATA
minfo.dwItemData = iNoOfMenuItems
'into MF_OWNERDRAW
r = SetMenuItemInfo(hdMenu, iMenuID, True, minfo)
End Sub

Function OnMeasureItem(hWnd As Long, lpmis As MEASUREITEMSTRUCT) As MEASUREITEMSTRUCT
On Error GoTo E2
Dim xM As MEASUREITEMSTRUCT, hfntOld As Long
Dim S As Size, hdc As Long

'find DC
hdc = GetDC(hWnd)

hfntOld = SelectObject(hdc, hFont)

GetTextExtentPoint hdc, MyItem(lpmis.itemData).szItemText, _
MyItem(lpmis.itemData).cchItemText, S

'set menu item rect
xM.itemWidth = S.cx + 10
xM.itemHeight = S.cy

SelectObject hdc, hfntOld
ReleaseDC hWnd, hdc

LSet OnMeasureItem = xM
Exit Function
E2:
Form1.Caption = lpmis.itemData
Exit Function
End Function

Sub OnDrawMenuItem(hWnd As Long, lpdis As DRAWITEMSTRUCT)
On Error GoTo E1
Dim x, y

'set the menuitem colors
If (lpdis.itemState And ODS_SELECTED) Then 'if selected
clrPrevText = SetTextColor(lpdis.hdc, GetSysColor(COLOR_HIGHLIGHTTEXT))
clrPrevBkgnd = SetBkColor(lpdis.hdc, GetSysColor(COLOR_HIGHLIGHT))
Else
clrPrevText = SetTextColor(lpdis.hdc, GetSysColor(COLOR_MENUTEXT))
clrPrevBkgnd = SetBkColor(lpdis.hdc, GetSysColor(COLOR_MENU))
End If

'leave space for checkmark
'may use GetMenuCheckMarkDimensions
x = lpdis.rcItem.Left + 20
y = lpdis.rcItem.Top

hfntPrev = SelectObject(lpdis.hdc, hFont)

ExtTextOut lpdis.hdc, x, y, ETO_OPAQUE, _
lpdis.rcItem, Trim(" "), 1&, 0&

TextOut lpdis.hdc, x, y, MyItem(lpdis.itemData).szItemText, MyItem(lpdis.itemData).cchItemText
'Form1.Caption = lpdis.itemData
'may put some bitblt function here also.

SelectObject lpdis.hdc, hfntPrev
SetTextColor lpdis.hdc, clrPrevText
SetBkColor lpdis.hdc, clrPrevBkgnd
Exit Sub
E1:
Form1.Caption = lpdis.itemData
Exit Sub
End Sub
Sub OnDestroy()
Dim r As Long
'do some clean works
Dim minfo As MENUITEMINFO, id As Integer
Dim iNoOfMenu%, iNoOfSubMenu%
Dim iCounter1%, iCounter2%
iNoOfMenu = GetMenuItemCount(hMenu)
'iMenuItemBound
If iNoOfMenu Then
For iCounter1 = 0 To iNoOfMenu - 1
minfo.fMask = MIIM_DATA
r = GetMenuItemInfo(hMenu, iCounter1, True, minfo)
DeleteObject minfo.dwItemData
r = SetMenuItemInfo(hMenu, iCounter1, True, minfo)
hSubMenu = GetSubMenu(hMenu, iCounter1)
iNoOfSubMenu = GetMenuItemCount(hSubMenu)
If iNoOfSubMenu Then
For iCounter2 = 0 To iNoOfSubMenu - 1
minfo.fMask = MIIM_DATA
r = GetMenuItemInfo(hSubMenu, iCounter2, True, minfo)
DeleteObject minfo.dwItemData
r = SetMenuItemInfo(hSubMenu, iCounter2, True, minfo)
Next iCounter2
End If
Next iCounter1
End If
DeleteObject hFont
Erase MyItem
End Sub

还想懒够 2004-10-27
  • 打赏
  • 举报
回复
模块代码中的定义

Option Explicit
DefLng A-Z
Const MFT_STRING = 0

Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Type Size
cx As Long
cy As Long
End Type

'MENUITEMINFO
Public Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type

' MEASUREITEMSTRUCT for ownerdraw
Type MEASUREITEMSTRUCT
CtlType As Long
CtlID As Long
itemID As Long
itemWidth As Long
itemHeight As Long
itemData As Long
End Type

' DRAWITEMSTRUCT for ownerdraw
Type DRAWITEMSTRUCT
CtlType As Long
CtlID As Long
itemID As Long
itemAction As Long
itemState As Long
hwndItem As Long
hdc As Long
rcItem As RECT
itemData As Long
End Type

Public Declare Function GetMenu Lib "user32" _
(ByVal hWnd As Long) As Long
Public Declare Function GetSubMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPos As Long) As Long
Public Declare Function GetMenuItemCount Lib "user32" _
(ByVal hMenu As Long) As Long
Public Declare Function GetMenuItemInfo Lib "user32" _
Alias "GetMenuItemInfoA" _
(ByVal hMenu As Long, ByVal un As Long, _
ByVal b As Boolean, lpmii As MENUITEMINFO) As Long

Declare Function GetMenuItemID Lib "user32" _
(ByVal hMenu As Long, ByVal nPos As Long) As Long

Public Declare Function SetMenuItemInfo Lib "user32" _
Alias "SetMenuItemInfoA" _
(ByVal hMenu As Long, ByVal uItem As Long, _
ByVal fByPosition As Long, lpmii As MENUITEMINFO) As Long

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

Declare Function RemoveMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, _
ByVal wFlags As Long) As Long

Declare Function CreateFont Lib "gdi32" _
Alias "CreateFontA" (ByVal H As Long, _
ByVal W As Long, ByVal E As Long, ByVal O As Long, _
ByVal W As Long, ByVal I As Long, ByVal U As Long, _
ByVal S As Long, ByVal C As Long, ByVal OP As Long, _
ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, _
ByVal F As String) As Long

Declare Function DeleteObject Lib "gdi32" _
(ByVal hObject As Long) As Long

'MENUITEMINFO
Public Const MIIM_STATE = &H1
Public Const MIIM_ID = &H2
Public Const MIIM_SUBMENU = &H4
Public Const MIIM_CHECKMARKS = &H8
Public Const MIIM_TYPE = &H10
Public Const MIIM_DATA = &H20

'menustyle
Public Const MF_BYCOMMAND = &H0&
Public Const MF_BYPOSITION = &H400&

Public Const MF_STRING = &H0&
Public Const MF_BITMAP = &H4&
Public Const MF_OWNERDRAW = &H100&

'textout style
Public Const ETO_OPAQUE = 2

' Owner draw state
Public Const ODS_SELECTED = &H1
Public Const ODS_GRAYED = &H2
Public Const ODS_DISABLED = &H4
Public Const ODS_CHECKED = &H8
Public Const ODS_FOCUS = &H10

'messages:
Public Const WM_COMMAND = &H111
Public Const WM_SYSCOMMAND = &H112
Public Const WM_MENUSELECT = &H11F
Public Const WM_LBUTTONUP = &H202
Public Const WM_MBUTTONUP = &H208
Public Const WM_RBUTTONUP = &H205
Public Const WM_USER = &H400
Public Const WM_CREATE = &H1
Public Const WM_DESTROY = &H2
Public Const WM_DRAWITEM = &H2B
Public Const WM_MEASUREITEM = &H2C
Public Const WM_SYSCOLORCHANGE = &H15

Declare Sub MemCopy Lib "kernel32" Alias _
"RtlMoveMemory" (dest As Any, src As Any, _
ByVal numbytes As Long)

Public Const GWL_WNDPROC = (-4)
Public Const GWL_USERDATA = (-21)

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

Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Declare Function TextOut Lib "gdi32" Alias "TextOutA" _
(ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
ByVal lpString As String, ByVal nCount As Long) As Long

Declare Function ExtTextOut Lib "gdi32" Alias _
"ExtTextOutA" (ByVal hdc As Long, ByVal x As _
Long, ByVal y As Long, ByVal wOptions As Long, _
lpRect As RECT, ByVal lpString As String, _
ByVal nCount As Long, lpDx As Long) As Long

Declare Function GetDC Lib "user32" _
(ByVal hWnd As Long) As Long

Declare Function ReleaseDC Lib "user32" _
(ByVal hWnd As Long, ByVal hdc As Long) As Long

Declare Function SelectObject Lib "gdi32" _
(ByVal hdc As Long, ByVal hObject As Long) As Long

Declare Function SetBkColor Lib "gdi32" _
(ByVal hdc As Long, ByVal crColor As Long) As Long

Declare Function SetTextColor Lib "gdi32" _
(ByVal hdc As Long, ByVal crColor As Long) As Long

Declare Function GetSysColor Lib "user32" _
(ByVal nIndex As Long) As Long

Declare Function GetTextExtentPoint Lib "gdi32" _
Alias "GetTextExtentPointA" (ByVal hdc As Long, _
ByVal lpszString As String, ByVal cbString As Long, _
lpSize As Size) As Long

Public Const COLOR_MENU = 4
Public Const COLOR_MENUTEXT = 7
Public Const COLOR_HIGHLIGHT = 13
Public Const COLOR_HIGHLIGHTTEXT = 14
Public Const COLOR_GRAYTEXT = 17

'consts MenuItem IDs.
Public Const IDM_CHARACTER = 10
Public Const IDM_REGULAR = 11
Public Const IDM_BOLD = 12
Public Const IDM_ITALIC = 13
Public Const IDM_UNDERLINE = 14

Type myItemType
cchItemText As Integer
szItemText As String * 32
End Type

Public OldWindowProc
Public hMenu, hSubMenu
Public iNoOfMenuItems, MyItem() As myItemType
Public clrPrevText, clrPrevBkgnd
Public hfntPrev

Public Const ODT_MENU = 1
Public hFont As Long
kmzs 2004-10-27
  • 打赏
  • 举报
回复
VB???手动吧!右键单击桌面——属性——外观(——XP或更高:高级)——菜单。。。
lyxhappy 2004-10-27
  • 打赏
  • 举报
回复
不知道,帮你UP!
lovebeethoven 2004-10-27
  • 打赏
  • 举报
回复
我也想知道

7,763

社区成员

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

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