簡體   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