繁体   English   中英

D3DApp类问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM