为什么我不能初始化WNDCLASSEX wc? [英] Why can't I initialize WNDCLASSEX wc?

查看:226
本文介绍了为什么我不能初始化WNDCLASSEX wc?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的头文件中声明属性 WNDCLASSEX wc ,如下所示:

I declare the attribute WNDCLASSEX wc in my header file like so:

private:
    HWND hWnd;
    LPDIRECT3D9 g_pD3D; // Used to create the D3DDevice
    LPDIRECT3DDEVICE9 g_pd3dDevice; // Our rendering device
    WNDCLASSEX wc;

我想在Init()函数中初始化它,如下:

And I want to initialize it in my Init() function, like so:

void RAT_RendererDX9::Init(RAT_WindowManager* argWMan)
{
    wMan = argWMan;

    // Register the window class
    wc  =
    {
        sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0, 0,
        GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
        "D3D Tutorial", NULL
    };
    RegisterClassEx( &wc );

       hWnd = CreateWindow( "", "abc", WS_OVERLAPPEDWINDOW, 10, 10, 20, 20,
                     NULL, NULL, wc.hInstance, NULL );

        g_pD3D = (LPDIRECT3D9)Direct3DCreate9( D3D_SDK_VERSION );

        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory( &d3dpp, sizeof( d3dpp ) );
        d3dpp.Windowed = TRUE;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

    g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                              D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                              &d3dpp, &g_pd3dDevice );
}
However, I get the following errors because of it:

1> e:\rat_engine\rat_engine\rat_engine\rat_rendererdx9.cpp(18):error
C2059:语法错误: {'

1>e:\rat_engine\rat_engine\rat_engine\rat_rendererdx9.cpp(18): error C2059: syntax error : '{'

1> e:\rat_engine\rat_engine\rat_engine\rat_rendererdx9.cpp(18):error
C2143:语法错误:missing ';'before'{'

1>e:\rat_engine\rat_engine\rat_engine\rat_rendererdx9.cpp(18): error C2143: syntax error : missing ';' before '{'

1> e:\rat_engine\rat_engine\rat_engine\rat_rendererdx9.cpp(19):error
C3867 :'RAT_ENGINE :: RAT_RendererDX9 :: MsgProc':缺少函数调用
参数列表;使用& RAT_ENGINE :: RAT_RendererDX9 :: MsgProc'创建一个
指向成员的指针

1>e:\rat_engine\rat_engine\rat_engine\rat_rendererdx9.cpp(19): error C3867: 'RAT_ENGINE::RAT_RendererDX9::MsgProc': function call missing argument list; use '&RAT_ENGINE::RAT_RendererDX9::MsgProc' to create a pointer to member

1> e:\rat_engine\rat_engine\rat_engine \rat_rendererdx9.cpp(22):error
C2143:语法错误:缺少';'before'}

1>e:\rat_engine\rat_engine\rat_engine\rat_rendererdx9.cpp(22): error C2143: syntax error : missing ';' before '}'

但我实际上从教程中复制了初始化,唯一的例外是wc在WinMain()函数中初始化,而不是Init()函数。

But I practically copied that initialization from the tutorial, with the only exception that wc is initialized in the WinMain() function, instead of an Init() function.

推荐答案

这种语法适用于 copy-initializing 一个聚合,但你的实际上是一个赋值。当您执行 RAT_RendererDX9 类的构造函数时,对象 wc 获得默认构造。

That syntax works for copy-initializing an aggregate, but yours is actually an assignment. The object wc gets default-constructed when you execute the constructor of your RAT_RendererDX9 class.

Init 函数中的赋值实际上等效于:

The assignment in your Init function is actually equivalent to this:

wc.operator = (...);

如果要使用该语法,可以尝试将作业更改为以下内容:

If you want to use that syntax, you could try changing your assignment into the following:

WNDCLASSEX wndClass =
{
    sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0, 0,
    GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
    "D3D Tutorial", NULL
};

wc = wndClass;

这篇关于为什么我不能初始化WNDCLASSEX wc?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆