我的资源文件里的图标都是16x16的,用 Call DrawIconEx(hDC, udtIconRect.Left + 2&, udtIconRect.Top + (udtIconRect.Bottom - udtIconRect.Top + 1& - 16&) / 2&, LoadResPicture(szIconID, vbResIcon), 16&, 16&, 0&, 0&, DI_NORMAL) 在每个菜单项上绘制显示的图标尺寸都一切正常。
可问题是,当使用 Call DrawState(hDC, 0&, 0&, LoadResPicture(szIconID, vbResIcon), 0&, udtIconRect.Left + 2&, udtIconRect.Top + (udtIconRect.Bottom - udtIconRect.Top + 1& - 16&) / 2&, 16&, 16&, DST_ICON Or DSS_UNION Or DSS_DISABLED) 想把无效不可用的菜单项图标绘制成灰色时,图标的尺寸就变大了。即便是将DrawState的参数n3、n4都设置成16,也仅仅是对图标进行了切割,图标还是变大的显示不完整。实在令人不解,请问有朋友知道这是怎么回事儿吗?
可问题是,当使用 Call DrawState(hDC, 0&, 0&, LoadResPicture(szIconID, vbResIcon), 0&, udtIconRect.Left + 2&, udtIconRect.Top + (udtIconRect.Bottom - udtIconRect.Top + 1& - 16&) / 2&, 16&, 16&, DST_ICON Or DSS_UNION Or DSS_DISABLED) 想把无效不可用的菜单项图标绘制成灰色时,图标的尺寸就变大了。即便是将DrawState的参数n3、n4都设置成16,也仅仅是对图标进行了切割,图标还是变大的显示不完整。实在令人不解,请问有朋友知道这是怎么回事儿吗?
Private Const DI_MASK = &H1
Private Const DI_IMAGE = &H2
Private Const DI_NORMAL = DI_MASK Or DI_IMAGE
Private Declare Function DrawState Lib "user32" Alias "DrawStateA" (ByVal hDC As Long, ByVal hBrush As Long, ByVal lpDrawStateProc As Long, ByVal lParam As Long, ByVal wParam As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal n3 As Long, ByVal n4 As Long, ByVal un As Long) As Long
Private Const DST_ICON As Long = &H3
Private Const DSS_DISABLED = &H20&Private Sub Command1_Click()
DrawIconEx Me.hDC, 10, 10, LoadPicture("d:\001.ico").Handle, 16, 16, 0, 0, DI_NORMAL
End SubPrivate Sub Command2_Click()
DrawState Me.hDC, 0, 0, LoadPicture("d:\001.ico").Handle, 0, 10, 10, 16, 16, DST_ICON Or DSS_DISABLED
End SubPrivate Sub Form_Load()
Me.ScaleMode = vbPixels
End Sub
http://download.csdn.net/source/2778551
http://www.vbaccelerator.com/home/VB/Code/Controls/Menus/Popup_Menu_ActiveX_DLL/article.asp
解决办法是用LoadImageA加载资源文件里面的图标,当然还要OleCreatePictureIndirect取得StdPicture对象。我用你的工程实验过,可以的。