繁体   English   中英

RegisterClassEx失败为无效参数 - C ++

[英]RegisterClassEx Fails as Invalid Parameter - C++

在我的应用程序中调用RegisterClassEx失败,错误代码为87,“参数不正确”。

memset( &m_wcx, 0, sizeof(WNDCLASSEX) );

m_wcx.cbSize = sizeof(WNDCLASSEX);  // size of structure
m_wcx.style = WS_ICONIC;            // initially minimized
m_wcx.lpfnWndProc = &WndProc;       // points to window procedure
m_wcx.cbClsExtra = 0;               // no extra class memory
m_wcx.cbWndExtra = 0;               // no extra window memory
m_wcx.hInstance = m_hInstance;      // handle to instance
m_wcx.hIcon = ::LoadIcon( NULL, IDI_APPLICATION ); // default app icon
m_wcx.hCursor = ::LoadCursor( NULL, IDC_ARROW ); // standard arrow cursor
m_wcx.hbrBackground = NULL;         // no background to paint
m_wcx.lpszMenuName = NULL;          // no menu resource
m_wcx.lpszClassName = _pwcWindowClass; // name of window class
m_wcx.hIconSm = NULL;               // search system resources for sm icon

m_atom = ::RegisterClassEx( &m_wcx );

if ( m_atom == 0 )
{
    TRACE(_T("CNotifyWindow::CNotifyWindow : Failed to register window class.\r\n\tError: %d\r\n\tFile: %s\r\n\tLine: %d\r\n"), ::GetLastError(), __WFILE__, __LINE__);
    THROW(::GetLastError());
}

有谁知道我做错了什么? 谢谢。

WNDCLASSEX结构的style成员接受类样式 ,而不是窗口样式 换句话说,您不能使该类的所有窗口最初以这种方式最小化。

您应该将WS_ICONIC参数中的dwStyle传递给CreateWindow()CreateWindowEx()

通常“参数不正确”是WINAPI的说法,“伙计,你给我发垃圾。”

因此,其中一个WNDCLASSEX成员变量可能是废话。 首先仔细查看最有可能出现不适合的变量: m_wcx.hInstancem_wcx.lpfnWndProcm_wcx.lpszClassName

编辑:

正如@Johann Gerell所指出的, m_wcx.style = WS_ICONIC就是一个例子。 文档说这是一种类风格 ,但你发送了一种窗口样式 不好。

有什么不同? 嗯,你知道C ++ class和对象之间的区别,对吧? 一个class就像一个蓝图。 对象是该蓝图的实例化。 Window Classes和Windows也是如此。 Window类是创建窗口的蓝图,窗口是该Window类的实例。 Window Classes有一些样式,可以指定什么样的DC使用,何时进行垂直刷新 - 低级别的东西,如适用于该窗口类的每个实例的东西。 Windows也有样式,但这些是不同的。 窗口样式指定每个窗口的东西,如窗口应该是可见的,最小化的等等。所以RegisterClassEx问你橙色,你试图给它一个苹果。

首先是WS_ICONIC 窗口样式与窗口样式完全不同。 类样式是CS_*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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