当试图从旧的VB6应用程序动态加载主框架图标时,我遇到了问题。图标文件有两个图标16x16x256和32x32x256,我通过以下简单的方式来完成它:
Private Sub Form_OnLoad()
Me.Icon = LoadPicture("C:\MainMyIcon.ico")
End Sub在windows任务栏上,图标看起来很好,但是在主框架上,图标只显示了16种(或者更少)的颜色。
最有趣的是,如果我通过VB加载这个图标,图标看起来又光滑又漂亮。
LoadPicture有几个参数,3 3rht是ColorDepth。我尝试手动将它设置为vbLPColor,它应该是256种颜色,但结果是一样的。
然后,我试图通过LoadResPicture从参考资料中加载图标,但对我来说还是没有任何进展。
有什么想法吗?
发布于 2017-01-28 21:26:35
如果您使用Windows,那么使用256种颜色的效果也很好:
Option Explicit
Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, ByVal dwImageType As Long, ByVal dwDesiredWidth As Long, ByVal dwDesiredHeight As Long, ByVal dwFlags As Long) As Long
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const LR_LOADFROMFILE = &H10
Private Const WM_SETICON = &H80
Private Const IMAGE_ICON = &H1
Private Const ICON_SMALL = &H0
Private Const ICON_BIG = &H1
Private Sub SetIconFromFile(ByVal hWnd As Long, FullFileName As String)
Dim hIcon As Long
hIcon = LoadImage(App.hInstance, FullFileName, IMAGE_ICON, 16, 16, LR_LOADFROMFILE)
If hIcon = 0 Then Exit Sub
SendMessageLong hWnd, WM_SETICON, ICON_BIG, hIcon
SendMessageLong hWnd, WM_SETICON, ICON_SMALL, hIcon
End Sub
Private Sub Command1_Click()
SetIconFromFile Me.hWnd, App.Path & "\" & "icon8bpp.ico"
End Sub下面是一个图标的比较,它有256种颜色。Me.Icon在向16摇摆不定。

https://stackoverflow.com/questions/41760979
复制相似问题