[英]D3DApp Class Problems
因此,我正在D3DApp类中包含的方法中创建WNDCLASSEX,我将通过另一个类(例如,Engine,Game等)来调用该类,该类称为InitMainWindow(在基类中也受保护):
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变量时,我收到一条C2440错误,指出以下内容
'=':无法从'LRESULT(__cdecl D3DApp :: *)(HWND,UINT,WPARAM,LPARAM)'转换为'WNDPROC'
我是否必须在派生自D3DApp的类中创建WNDPROC回调的定义? 还是我必须从基类和派生类中完全删除此回调,并将其放在WinMain函数范围之外? 我已经研究了大约2天的时间来解决该错误,并且没有找到任何可能的修复方法的运气。我认为我的C ++技能可能不如我想象的那么出色。 但是,如果有人可以帮助我了解我的问题所在,那将是惊人的!
ps,是的,我知道我要进行一些错误检查,但我只想确保它首先适用于我的编译器:)
这是WNDPROC的签名:
typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
但是您的声明是不同的:
LRESULT WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
您应该像这样在类外部声明它:
LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
或将其声明为static并删除virtual关键字。 还要注意,由于项目配置为使用__cdecl调用约定,因此应添加CALLBACK来解析__stdcall调用约定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.