如何从 C++ 中的类调用 WNDCLASSEX 上的 wndproc

问题描述

我正在尝试制作 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,GetModuleHandle( 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,LParaM lParam );

private:
    ...

    LRESULT WINAPI wnd_proc( HWND hWnd,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,lParam );
    }
};


extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler( HWND hWnd,LParaM lParam );

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)