0

我正在尝试制作一个 ImGui DX9 窗口。但是,当我尝试在 WNDCLASSEX 结构上引用 wndproc 函数时出现错误。

当我尝试将wndproc函数预定义为静态时,出现错误:cannot overload static and non-static member functions with the same parameter types.

我已经尝试像这样直接调用该函数:menu::wnd_proc.

当我尝试调用该函数时,static我在函数上收到此错误:a value of type "LRESULT (__stdcall menu::*)(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)" cannot be used to initialize an entity of type "WNDPROC".

这是我的功能

#include "ui.hpp"

bool menu::render( )
{
    WNDCLASSEX wc = {
        sizeof( WNDCLASSEX ),
        CS_CLASSDC,
        menu::wnd_proc,
        0L,
        0L,
        GetModuleHandle( NULL ),
        NULL,
        NULL,
        NULL,
        NULL,
        _T( "ImGui Example" ),
        NULL
    };

    ...
}

这是ui.hpp头文件

#pragma once

class menu
{
public:

    bool render( );

private:
    LPDIRECT3D9 g_pD3D = NULL;
    LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;
    D3DPRESENT_PARAMETERS g_d3dpp = {};

    static LRESULT WINAPI wnd_proc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );

private:
    ...

    LRESULT WINAPI wnd_proc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
    {
        if ( ImGui_ImplWin32_WndProcHandler( hWnd, msg, wParam, lParam ) )
            return true;

        switch ( msg )
        {
            case WM_SIZE:
                if ( g_pd3dDevice != NULL && wParam != SIZE_MINIMIZED )
                {
                    g_d3dpp.BackBufferWidth = LOWORD( lParam );
                    g_d3dpp.BackBufferHeight = HIWORD( lParam );
                    menu::reset_device( );
                }
                return 0;
            case WM_SYSCOMMAND:
                if ( ( wParam & 0xfff0 ) == SC_KEYMENU )
                    return 0;
                break;
            case WM_DESTROY:
                ::PostQuitMessage( 0 );
                return 0;
        }
        return ::DefWindowProc( hWnd, msg, wParam, lParam );
    }
};


extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
4

0 回答 0