无法弄清楚如何用相同的名字回复上一篇文章。 当我注销时,它要求我登录,而当我登录时,没有“发布您的回复”选项,无论如何,也许此网站上存在功能错误。
我有一个类似的问题,虽然可以正常获取值,但无法保存值,所以如果其他人在理解如何声明和使用api函数方面存在类似问题,我希望我的解决方案有所帮助。
[FYI:我正在设计一个用户绘制的组合框,并且“ Slide Open Combo Boxs”窗口设置影响了组合框的下拉部分的显示。 我的标题部分没有文本,如果我的数据源只有几行,它根本就没有数据,而且组合的高度也只有几像素! 我的解决方法是分别在DropDown和DropDownClosed事件中将此窗口设置值关闭然后再次打开:
<DllImport("user32.dll", EntryPoint:="SystemParametersInfoA", SetLastError:=True, _
CharSet:=CharSet.Ansi, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Private Function SystemParametersInfoGet(ByVal uiAction As SPI_INDEX, ByVal uiParam As UInteger, _
ByRef lpenabled As Boolean, ByVal fWinIni As UInteger) As Boolean
End Function
<DllImport("user32.dll", EntryPoint:="SystemParametersInfoA", SetLastError:=True, _
CharSet:=CharSet.Ansi, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Private Function SystemParametersInfoSet(ByVal uiAction As SPI_INDEX, ByVal uiParam As UInteger, _
ByVal lpenabled As Boolean, ByVal fWinIni As UInteger) As Boolean
End Function
Public Function SlideOpenComboBoxes(ByVal TurnOn As Boolean) As Boolean
Dim fResult As Boolean
Dim spValue As UInteger
Dim originalMaskOn As Boolean
fResult = SystemParametersInfoGet(SPI_INDEX.SPI_GETCOMBOBOXANIMATION, 0, originalMaskOn, SPFIPersistance_INDEX.SPFI_NONE)
Dim oWin32Ex As New Win32Exception()
If fResult Then
If TurnOn <> originalMaskOn Then
fResult = SystemParametersInfoSet(SPI_INDEX.SPI_SETCOMBOBOXANIMATION, 0, TurnOn, SPFIPersistance_INDEX.SPFI_NONE)
oWin32Ex = New Win32Exception()
End If
End If
If Not fResult Then
Throw oWin32Ex
End If
Return originalMaskOn
End Function
End Module
与上面的解决方案相比,我注意到上一篇文章提供的代码片段有2个区别:
- 首先是调用参数的顺序。 我将要获取或设置的变量作为第三个参数传递给api的调用。 上一篇文章的Return = SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,lActiveFlag,0,0),所以如果我没有记错的话,顺序可能是不正确的。
- 另一个区别是我对api声明有两个引用,一个用于获取,另一个用于设置。 区别在于对第三个参数使用ByVal(用于设置)与ByRef(用于Geting)。
在不给您我全部代码的前提下,如果其他人有经验的所有者在此设置影响您的代码的情况下绘制问题,我想听听您的短处以及您的解决方法和问题。