所以我正在创建一个包含在D3DApp类中的方法中的WNDCLASSEX,我将从另一个类派生出来,例如引擎,游戏,等...称为InitMainWindow(这也是在基类保护):D3DApp类问题
bool D3DApp::InitMainWindow() {
WNDCLASSEX wc;
ZeroMemory(&wc, sizeof(WNDCLASSEX));
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc; // This is where the error is!
wc.hInstance = mAppInst;
wc.hCursor = LoadCursor(mAppInst, IDC_ARROW);
wc.lpszClassName = L"MainWindow";
RegisterClassEx(&wc);
RECT rect = { 0,0,SCREEN_WIDTH,SCREEN_HEIGHT };
AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);
mMainWnd = CreateWindowEx(NULL, L"MainWindow", L"Test", WS_OVERLAPPEDWINDOW, 300, 300, rect.right - rect.left, rect.bottom - rect.top, NULL, NULL, mAppInst, NULL);
ShowWindow(mMainWnd, NULL);
return true;
}
我WNDPROC回调声明和定义就是InitMainWindow()的位置,定义为同一D3DApp基类中例如:
virtual LRESULT WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
当我了WNDCLASSEX结构内填写的lpfnWndProc变量I接收C2440错误,指出以下
'=':无法从“LRESULT(转换__cdecl d 3DApp :: *)(HWND,UINT,WPARAM,LPARAM)”到 'WNDPROC'
我必须从D3DApp类派生来创建我的WNDPROC回调的定义吗?还是必须从基类和派生类中完全移除此回调,并将其放在我的WinMain函数的范围之外?我一直在研究如何解决这个错误大约2天,并没有找到任何可能的修复方法的运气......我认为我的C++技能可能不如我认为的那么出色。但如果任何人都可以帮助我理解我的问题在哪里,那将是惊人的!
PS是的,我知道我有一些错误检查可以做,但我只是想确保它适合我的编译器首先:)
你应该声明窗口过程为静态,并从中删除虚拟关键字或声明和定义它,它的类为外解析为__stdcall调用约定非成员函数 – Asesh
修复了我收到的错误,非常感谢您的帮助。 MSDN格式的文档仍然让我很难理解,我真的很感谢像你这样的人愿意帮助解决这些问题。 @Asesh – Sharpie
已在下面的答案中添加更多信息 – Asesh