タイトル : 構造体を引数とするAPI(SystemParametersInfo) 投稿日 : 2009/10/29(Thu) 07:22 投稿者 : ダンボ
ListViewのタイル表示でのアイコン間隔を変えたくて、SystemParametersInfoの SPI_GETICONMETRICS、SPI_SETICONMETRICSを利用してみました。 (SPI_ICONHORIZONTALSPACINGで得られる値は別物ですよね?) SystemParametersInfoの第3引数にICONMETRICS構造体へのポインターを指定するらしいですが 下記コードではエラーリターンしてしまいます。 行き詰まってしまいましたのでアドバイスをよろしくお願いします。 それと第4引数を0にしておけば、このAPPだけに作用して終了後に規定値に戻ると予想して いるのですが、当たっているでしょうか? Imports System.Runtime.InteropServices <DllImport("USER32.DLL")> _ Private Function SystemParametersInfo( _ ByVal uAction As Integer, _ ByVal uparam As Integer, _ <[In](), Out()> ByRef lpvParam As ICONMETRICS, _ ByVal fuWinIni As Integer _ ) As Boolean End Function Private Const SPI_ICONHORIZONTALSPACING As Integer = 13 Private Const SPI_ICONVERTICALSPACING As Integer = 24 Private Const SPI_GETICONMETRICS As Integer = 45 Private Const SPI_SETICONMETRICS As Integer = 46 Private Const SPIF_SENDWININICHANGE As Integer = &H2 Private Const SPIF_UPDATEINIFILE As Integer = &H1 <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _ Structure ICONMETRICS Dim cbSize As Integer '構造体のバイト数 Dim iHorzSpacing As Integer '水平方向の間隔 Dim iVertSpacing As Integer '同、垂直方向 Dim iTitleWrap As Integer '0のとき、キャプションを折り返さない Dim lfFont As LOGFONT 'キャプションのフォントを指定するLOGFONT構造体 End Structure Public Const LF_FACESIZE As Int32 = 32 Public Const DEFAULT_CHARSET As Byte = 1 Public Const FW_NORMAL As Int32 = 400 Public Const FIXED_PITCH As Byte = 1 Public Const OUT_RASTER_PRECIS As Byte = 6 Public Const WM_SETFONT As Int32 = &H30 <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _ Public Structure LOGFONT Public lfHeight As Int32 Public lfWidth As Int32 Public lfEscapement As Int32 Public lfOrientation As Int32 Public lfWeight As Int32 Public lfItalic As Byte Public lfUnderline As Byte Public lfStrikeOut As Byte Public lfCharSet As Byte Public lfOutPrecision As Byte Public lfClipPrecision As Byte Public lfQuality As Byte Public lfPitchAndFamily As Byte <VBFixedString(LF_FACESIZE)> Public lfFaceName As String Public Sub New(ByVal fontName As String) lfWeight = FW_NORMAL lfCharSet = DEFAULT_CHARSET lfPitchAndFamily = FIXED_PITCH lfOutPrecision = OUT_RASTER_PRECIS lfFaceName = fontName lfHeight = 32 End Sub End Structure Public Sub main(ByVal CmdArgs() As String) Dim LOGFONT As New LOGFONT(Space(LF_FACESIZE)) Dim ICONMETRICS As New ICONMETRICS ICONMETRICS.lfFont = LOGFONT ICONMETRICS.cbSize = Marshal.SizeOf(ICONMETRICS) If Not SystemParametersInfo(SPI_GETICONMETRICS, ICONMETRICS.cbSize, ICONMETRICS, 0) Then Stop |