2015-11-21 82 views
0

我試圖添加一個子窗口到我的主窗口,但函數CreatWindow正在thrwoing一個異常,說無法訪問地址0x00000,但它工作正常,當我嘗試創建一個按鈕,我跟蹤變量和他們都不空,那就是:在Windows API上創建子窗口

WNDCLASSEX windowClass; 

windowClass.cbSize = sizeof(WNDCLASSEX); 
windowClass.hInstance = hInstance; 
windowClass.lpfnWndProc = NULL; 
windowClass.lpszClassName = className; 
windowClass.style = CS_HREDRAW | CS_VREDRAW; 
windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
windowClass.hCursor = LoadCursor(NULL, IDC_ARROW); 
windowClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 
windowClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); 
windowClass.cbClsExtra = 0; 
windowClass.cbWndExtra = 0; 
windowClass.lpszMenuName = NULL; 

if (!RegisterClassEx(&windowClass)){ 
    return; 
} 

window = CreateWindowEx(0, 
    className, 
    (LPCTSTR)NULL, 
    WS_CHILD | WS_BORDER, 
    0, 0, 0, 0, 
    owner, 
    (HMENU)ID, 
    hInstance, 
    NULL); 

上面給出的錯誤代碼,最重要的變量來自這裏:

gl = new OpenGLContainer("hellogl", hInstance); 
addChild(gl); 

第一個參數是className,構造函數只執行一個屬性,addChild方法調用gl- > setOwner(window_handler)和gl-> create()這是我發佈的第一段代碼。

我也看到了堆棧列表,問題出在程序進入CreateWindow函數後,這很奇怪,因爲調試器顯示沒有任何值(指針)爲空。感謝您的幫助

+0

'NULL'指針是窗口過程。在'CreateWindowEx'返回之前,它會嘗試調用WM_NCCREATE和WM_CREATE消息的窗口過程。 – IInspectable

回答

4

它可能會失敗,因爲lpfnWndProc是NULL?

+0

嗯,是的,現在這一切都很好,謝謝你的幫助 – user2542813