首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么CreateWindowEx返回0

为什么CreateWindowEx返回0
EN

Stack Overflow用户
提问于 2010-02-16 16:14:34
回答 2查看 1.1K关注 0票数 1

VB.NET 2008速递

代码语言:javascript
复制
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返回0?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-16 16:29:24

可能的原因是您忘记向RegisterClass/Ex()注册"MyWindow“窗口类,没有正确设置窗口过程,或者没有正确处理WM_CREATE消息。另外,您的P/Invoke声明是错误的,它不能在64位操作系统上工作。

不要自己编写这种代码,Windows是CreateWindowEx()的一个非常好的包装器。

票数 1
EN

Stack Overflow用户

发布于 2010-02-16 16:21:28

您需要在调用CreateWindowEx之后检查NULL,如果是的话,就可以根据原因立即调用Marshal.GetLastWin32Error

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2274316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档