SetWindowLong (coredll)
Last changed: -84.45.5.97

.
Summary

C# Signature:

[DllImport("coredll.dll", SetLastError=true)]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
[DllImport("coredll.dll", SetLastError=true)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

VB Signature:

<DllImport("coredll.dll", SetLastError:=True)> _
Private Shared Function SetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
End Function
<DllImport("coredll.dll", SetLastError:=True)> _
Private Shared Function GetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer
End Function

User-Defined Types:

None.

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

The sample code is compatible with Visual Studio .Net 2005.

==> For Windows 8.1 and later You must use "user32.dll" instead of "coredll.dll".

=========

Tips & Tricks:

Please add some!

Sample Code:

    private const int GWL_STYLE = -16;
    private const int BS_CENTER = 0x00000300;
    private const int BS_VCENTER = 0x00000C00;
    private const int BS_MULTILINE = 0x00002000;

    public static void SetButtonStyle(Button ctrl)
    {
        IntPtr hWnd;
        int style;

       // ctrl.Capture = true;
        // hWnd = GetCapture();
        // ctrl.Capture = false;

       // Comment below and uncomment above if using Visual Studio 2003
       hWnd = ctrl.Handle;

        style = GetWindowLong(hWnd, GWL_STYLE);
        SetWindowLong(hWnd, GWL_STYLE, (style | BS_CENTER | BS_VCENTER | BS_MULTILINE));

        ctrl.Refresh();
    }

.... and much the same in VB.NET - tested on VS2008/Windows CE 6

Option Explicit On

Option Strict On

Imports System.Runtime.InteropServices

Module MultiLineButtonFix

    <DllImport("coredll.dll", SetLastError:=True)> _
    Private Function SetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
    End Function
    <DllImport("coredll.dll", SetLastError:=True)> _
    Private Function GetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer
    End Function
    Private Const GWL_STYLE As Int32 = -16
    Private Const BS_CENTER As Int32 = &H300
    Private Const BS_VCENTER As Int32 = &HC00
    Private Const BS_MULTILINE As Int32 = &H2000

    Public Sub SetButtonStyle(ByVal ctrl As Button)
    Dim hWnd As IntPtr
    Dim style As Integer

    hWnd = ctrl.Handle

    style = GetWindowLong(hWnd, GWL_STYLE)
    SetWindowLong(hWnd, GWL_STYLE, (style Or BS_VCENTER Or BS_MULTILINE))

    ctrl.Refresh()
    End Sub

End Module

Documentation