简体   繁体   中英

How to translate this VB.NET code to C#?

I'm trying to translate this VB.NET code to C#, but I'm new with C#.

This is my code VB.NET code:

 Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" ( _
        ByVal hwnd As Integer, _
        ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, _
        ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer

 Private Const SWP_NOSIZE As Integer = &H1
 Private Const SWP_NOMOVE As Integer = &H2

 Private Shared ReadOnly HWND_TOPMOST As New IntPtr(-1)
 Private Shared ReadOnly HWND_NOTOPMOST As New IntPtr(-2)
 Private windows As New WindowInteropHelper(Me)

 Public Function MakeTopMost()
     SetWindowPos(windows.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
 End Function

And this is my C# Code:

 [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
 public static extern IntPtr SetWindowPos(string hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

 private const int SWP_NOSIZE = 0x1;
 private const int SWP_NOMOVE = 0x2;


 public void MakeTopMost()
 {
     SetWindowPos(windows.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
 }

Error in MakeTopMost(): invalid Arguments

截图

    [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
    public static extern IntPtr SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

    private const int SWP_NOSIZE = 0x1;
    private const int SWP_NOMOVE = 0x2;
    private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
    private static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
    private WindowInteropHelper windows = new WindowInteropHelper(this);

    public void MakeTopMost()
    {
        SetWindowPos(windows.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
    }

It shouldn't get any errors.

Hexadecimal numbers start with 0x :

private const int SWP_NOSIZE = 0x1;
private const int SWP_NOMOVE = 0x2;

For the MakeTopMost() function you need to use a single | not two, as two translate to "OrAlso" which can only be used in a conditional. Here's the completed code (as reflected from the comment thread)

[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
private const int SWP_NOSIZE = 0x1;
private const int SWP_NOMOVE = 0x2;
private readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
private readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
private WindowInteropHelper windows = new WindowInteropHelper(this); 

public static extern IntPtr SetWindowPos(string hWnd, IntPtr hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

public void MakeTopMost()
{
    SetWindowPos(windows.handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM