![](/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.