永远也不完美的程序

不断学习,不断实践,不断的重构……

常用链接

统计

积分与排名

好友链接

最新评论

CreateWindow创建失败的问题

    今天重写了一下3D程序的架构,基本上是参考DX9b那套构架写的,发现CreateWindow返回NULL,而且GetLastError()也返回0,一时很奇怪,后来上网查了一下,才发现是WndProc函数的问题,我代码如下:
if( m_hWnd == NULL) 
    
{
        
// Register the windows class
        WNDCLASS wndClass = 0, WndProc, 00, 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, 00, 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 );
}
因为在WndProc中,g_sApp指针此时还为NULL,所以创建不成功。
调用CreateWindow时,CreateWindow会调用一次WndProc,并且要求WndProc返回TRUE,因此要注意该问题。

posted on 2008-08-14 22:36 狂烂球 阅读(7051) 评论(6)  编辑 收藏 引用 所属分类: Windows编程

评论

# re: CreateWindow创建失败的问题 2008-08-15 00:47 陈梓瀚(vczh)

当然了,WM_CREATE怎能让用户处理……OnCreate事件跟WM_CREATE其实没啥关系……  回复  更多评论   

# re: CreateWindow创建失败的问题 2008-11-30 02:24 笨鸟

感激ing,同样的问题解决了.  回复  更多评论   

# re: CreateWindow创建失败的问题[未登录] 2010-08-19 19:29 dj

抄来抄去抄来抄去,而且答案也没给出,有意思么  回复  更多评论   

# re: CreateWindow创建失败的问题[未登录] 2011-06-21 19:12 jolley

这样太恶心了,都不知道结果的,晕死。  回复  更多评论   

# re: CreateWindow创建失败的问题 2011-06-22 10:50 魔鬼螳螂

@jolley
是有些说得不清楚,实际上是这样,在调用CreateWindow前,要先把g_sApp new了出来就可以创建成功了。  回复  更多评论   

# re: CreateWindow创建失败的问题 2015-05-11 15:22 姚若兵

创建失败  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理