2016-05-09 65 views
1

的時候如果我把WNDCLASSEX wcex變量定義了主要功能(如全局變量)的類將被註冊成功無法使用本地WNDCLASSEX變量

#include <windows.h> 
WNDCLASSEX wcex; 
int main() 
{ 
    wcex.cbSize = sizeof (WNDCLASSEX); 
    wcex.lpszClassName = "Success" ; 

    if (!RegisterClassEx (&wcex)) 
    { 
     MessageBox (NULL, "Failed to register window class.", "Error", MB_OK); 
    } 
} 

註冊窗口,但如果我把它的主要功能內,它不會被註冊

#include <windows.h> 
int main() 
{ 
    WNDCLASSEX wcex; 
    wcex.cbSize = sizeof (WNDCLASSEX); 
    wcex.lpszClassName = "Success" ; 

    if (!RegisterClassEx (&wcex)) 
    { 
     MessageBox (NULL, "Failed to register window class.", "Error", MB_OK); 
    } 
} 

我找不出原因,請在這個問題上有所幫助。 在此先感謝。

回答

4

帶有靜態對象storage duration的對象是零初始化的1)。你的第二個例子在語義上是不同的,因爲wcex(自動存儲持續時間)保存隨機值。要匹配語義,請改爲使用WNDCLASSEX wcex = { 0 };


1) 假設使用的是一個C++編譯器。 C的規則是不同的。

+0

對於C,使用'memset()'或'ZeroMemory()'代替。 –

+0

@RemyLebeau:我指的是具有靜態存儲持續時間的對象初始化規則。那些在C++中是零初始化的,但我不知道C足夠了解那裏的規則。我相信C沒有強制任何初始化,並且在使用C時,兩個'wcex'結構都是未初始化的,並且包含隨機值。 – IInspectable

+0

@IInspectable:謝謝,但你能告訴我爲什麼RegisterClass函數拒絕(隨機值)WNDCLASSEX變量? –