Win32超类初始化问题

时间:2014-05-27 01:51:19

标签: winapi superclass

因此,我正在制作自己的包装类,可以快速轻松地生成自定义(用户定义)窗口和提供(系统定义)窗口,并为每个窗口提供自定义WndProc。我把它设置得很好,除了尝试超类按钮类。我尝试过设置超类的几个不同的迭代(根据我设置为NULL以及我在WNDCLASSEX中重新定义的内容),但无论我做什么,当它注册新类时,我有在WNDCLASSEX结构中定义,它告诉我"错误参数不正确。"我尝试切换到一个基本的Win32项目创建只是创建一个空白窗口,看看我是否可以在那里实现超级分类技术,但错误仍然存​​在,我不知道为什么。相关代码是:

WNDCLASSEX wc;
    ZeroMemory( &wc, sizeof(WNDCLASSEX) );
    GetClassInfoEx( GetModuleHandle( NULL ), L"Button", &wc );
    SetOldProc( (LONG_PTR)wc.lpfnWndProc );
    wc.lpszClassName = L"myButton";
    wc.hInstance = GetModuleHandle( NULL );
    wc.lpszMenuName = NULL;
    wc.lpfnWndProc = AbstractWindow::msgRouter;
    if ( !RegisterClassEx( &wc ) )
    {
         ::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,        
                 NULL,                                      
                 GetLastError(),                            
                 MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
              lpBuffer,                                 
                 sizeof(lpBuffer)-1,                        
                 NULL);
         MessageBox (NULL, lpBuffer, L"Button", MB_ICONERROR) ;
         return 0 ;
    }

SetOldProc是我正在创建的包装器类中的一个方法,它存储指向原始按钮WndProc的指针,而AbstractWindow :: msgRouter是我的包装类的基类中的WndProc,它将消息路由到正确的窗口类时他们被收到了。包装类中的自定义类的工作方式与包装类的设置方式完全一样,就像我说的那样,我尝试了WNDCLASSEX结构中我更改的变量的多种变体,包括只给它一个名称和实例,但我尝试了一切只是给了我同样的错误,即使它是在一个简单的骨头项目,我不知道我做错了什么。对代码的更正,超级分类的提示等都是受欢迎的,即使它与修复我的问题没有直接关系,因为我总是想了解更多但是如果你有解决方案请分享。

0 个答案:

没有答案