3

在我的应用程序中调用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());
}

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

4

3 回答 3

3

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

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

于 2010-11-29T22:18:48.850 回答
0

通常“参数不正确”是 WINAPI 的表达方式,“伙计,你在给我发垃圾”。

所以其中一个WNDCLASSEX成员变量可能是废话。首先仔细查看最有可能包含不适当内容的变量: m_wcx.hInstancem_wcx.lpfnWndProcm_wcx.lpszClassName

编辑:

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

有什么不同?好吧,你知道 C++ 和对象之间的区别class,对吧?Aclass就像一个蓝图。对象是该蓝图的实例。窗口类和窗口也是如此。窗口类是创建窗口的蓝图,窗口是该窗口类的实例化。窗口类具有指定诸如使用哪种 DC、何时垂直刷新之类的样式——诸如适用于该窗口类的每个实例的低级内容。Windows 也有样式,但它们是不同的。窗口样式指定每个窗口的内容,例如窗口是否应该可见、最小化等。因此,RegisterClassEx 要求您提供橙色,而您尝试给它一个苹果。

于 2010-11-29T22:17:16.260 回答
0

第一件事是WS_ICONIC。窗口样式与窗口样式完全不同。类风格是CS_*那些。

于 2010-11-29T22:17:33.197 回答