Question

VB.NET 2008 Express

Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Integer, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hwndParent As Integer, ByVal hMenu As Integer, ByVal hInstance As Integer, ByRef lpParam As Object) As Integer

Private Const WS_EX_APPWINDOW = &H40000
Private Const WS_EX_WINDOWEDGE = &H100&
Private Const WS_SYSMENU = &H80000
Private Const WS_CAPTION = &HC00000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_THICKFRAME = &H40000
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)

Dim AppHandle As Int32 = System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32()

Dim WindowHandle as integer = CreateWindowEx(WS_EX_APPWINDOW Or WS_EX_WINDOWEDGE, "MyWindow", "MyTitle", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, 0, 0, AppHandle, Nothing)

CreateWindowEx retourne 0?

Était-ce utile?

La solution

Les raisons possibles sont que vous avez oublié d'enregistrer la classe de fenêtre « MyWindow » avec RegisterClass / Ex (), n'a pas fixé correctement ou ne gèrent pas correctement la procédure de fenêtre du message WM_CREATE. En outre, votre P / Invoke déclaration est fausse, il ne fonctionnera pas sur les systèmes d'exploitation 64 bits.

Ne pas écrire ce genre de code vous-même, Windows Forms est un emballage très agréable autour CreateWindowEx ().

Autres conseils

Vous devez vérifier pour NULL après avoir appelé CreateWindowEx, et si elle est, vous pouvez appeler immédiatement Marshal.GetLastWin32Error pour la raison.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top