SystemParametersInfo в С#
От: DarkSid Россия  
Дата: 31.05.04 08:41
Оценка:
Пытаюсь программно изменить ширину ScrollBar.
Для этого использую функцию SystemParametersInfo
Пример:

[DllImport("user32.dll", SetLastError=true)]
        public static extern   Boolean SystemParametersInfo(
            int uiAction,
            int uiParam,
            ref NONCLIENTMETRICS pvParam,
            int fWinIni);

private void button1_Click(object sender, System.EventArgs e)
        {
            Int16 ScrollHeight;
            Int16 ScrollWidth;
        
            NONCLIENTMETRICS _test = new NONCLIENTMETRICS();
            
            if (SystemParametersInfo((int)SysParInfo.SPI_GETNONCLIENTMETRICS,System.Runtime.InteropServices.Marshal.SizeOf(_test),
                 ref _test,0))
            {
                ScrollHeight=_test.iScrollHeight;
                ScrollWidth=_test.iScrollWidth;
                
            }
            else
            {
                MessageBox.Show(System.Runtime.InteropServices.Marshal.GetLastWin32Error().ToString("X"));
                return;

            }
            _test.iScrollHeight *= 3;

            if (SystemParametersInfo((int)SysParInfo.SPI_SETNONCLIENTMETRICS,System.Runtime.InteropServices.Marshal.SizeOf(_test) ,
                ref _test,0))
            {
            }
            else
            {
                MessageBox.Show(System.Runtime.InteropServices.Marshal.GetLastWin32Error().ToString("X"));
            }

        }


Структуры объявлены так:


[StructLayout(LayoutKind.Sequential)]
    public class LOGFONT 
    { 
        public const Int16 LF_FACESIZE = 32;
        public Int16 lfHeight; 
        public Int16 lfWidth; 
        public Int16 lfEscapement; 
        public Int16 lfOrientation; 
        public Int16 lfWeight; 
        public byte lfItalic; 
        public byte lfUnderline; 
        public byte lfStrikeOut; 
        public byte lfCharSet; 
        public byte lfOutPrecision; 
        public byte lfClipPrecision; 
        public byte lfQuality; 
        public byte lfPitchAndFamily;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst=LF_FACESIZE)]
        public string lfFaceName; 
    }


    [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
    public struct NONCLIENTMETRICS
    {
        public Int16 cbSize;
        public Int16 iBorderWidth;  
        public Int16 iScrollWidth;  
        public Int16 iScrollHeight;  
        public Int16 iCaptionWidth;  
        public Int16 iCaptionHeight;  
        public LOGFONT lfCaptionFont;  
        public Int16 iSmCaptionWidth;  
        public Int16 iSmCaptionHeight;  
        public LOGFONT lfSmCaptionFont;  
        public Int16 iMenuWidth;  
        public Int16 iMenuHeight;  
        public LOGFONT lfMenuFont;  
        public LOGFONT lfStatusFont;  
        public LOGFONT lfMessageFont;
    }

Код дает ошибку 7F.
Где я ошибся? Заранее благодарен за ответ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.