今天重寫了一下3D程序的架構(gòu),基本上是參考DX9b那套構(gòu)架寫的,發(fā)現(xiàn)CreateWindow返回NULL,而且GetLastError()也返回0,一時(shí)很奇怪,后來上網(wǎng)查了一下,才發(fā)現(xiàn)是WndProc函數(shù)的問題,我代碼如下:
if( m_hWnd == NULL)

{
// Register the windows class

WNDCLASS wndClass =
{ 0, WndProc, 0, 0, hInst,
LoadIcon( hInst, MAKEINTRESOURCE(IDI_MY3DGRAPHIC) ),
LoadCursor( NULL, IDC_ARROW ),
(HBRUSH)GetStockObject(WHITE_BRUSH),
NULL, m_szWindowClass };
RegisterClass( &wndClass );

// Set the window's initial style
m_dwWindowStyle = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME |
WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE;

// Set the window's initial width
RECT rc;
SetRect( &rc, 0, 0, m_dwCreationWidth, m_dwCreationHeight );
AdjustWindowRect( &rc, m_dwWindowStyle, true );

// Create the render window
m_hWnd = CreateWindow( m_szWindowClass,
m_strWindowTitle,
m_dwWindowStyle,
CW_USEDEFAULT,
CW_USEDEFAULT,
(rc.right - rc.left),
(rc.bottom - rc.top),
0,
NULL, //LoadMenu( hInstance, MAKEINTRESOURCE(IDC_MY3DGRAPHIC) ),
hInstance,
0 );

WndProc代碼如下:
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )


{
return g_sApp->MsgProc( hWnd, uMsg, wParam, lParam );
}
因?yàn)樵赪ndProc中,g_sApp指針此時(shí)還為NULL,所以創(chuàng)建不成功。
調(diào)用CreateWindow時(shí),CreateWindow會調(diào)用一次WndProc,并且要求WndProc返回TRUE,因此要注意該問題。