![](/img/trans.png)
[英]WinAPI C++ - RegisterClassEx 'The parameter was incorrect'
[英]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.hInstance
, m_wcx.lpfnWndProc
和m_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.