问题描述
我正在尝试制作 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 (将#修改为@)