Вопрос Imgui window close

Searching for myself
Пользователь
Статус
Оффлайн
Регистрация
29 Сен 2021
Сообщения
212
Реакции[?]
69
Поинты[?]
11K
Создал окно через imgui с viewports. Но закрыть его нормально не могу, окно не отзывается, думаю трабл в wndproc.
C++:
LRESULT __attribute__((__stdcall__)) event_handler( const HWND hwnd,
                                                    const UINT msg,
                                                    const WPARAM w_param,
                                                    const LPARAM l_param ) noexcept {
    core::directx_render::get_instance( ).render_event( hwnd, msg, w_param, l_param );

    return ::DefWindowProcA( hwnd, msg, w_param, l_param );
}
   
long directx_render::render_event( HWND hwnd, UINT msg, WPARAM w_param, LPARAM l_param ) {
        if ( ::ImGui_ImplWin32_WndProcHandler( hwnd, msg, w_param, l_param ) != 0 )
            return 1;

        switch ( msg ) {
            case WM_SIZE:
                if ( m_device != nullptr && w_param != SIZE_MINIMIZED ) {
                    cleanup_render_target( );

                    m_swap_chain->ResizeBuffers( 0, LOWORD( l_param ), HIWORD( l_param ), DXGI_FORMAT_UNKNOWN, 0 );

                    create_render_target( );
                }
                break;
            case WM_DESTROY:
                ::PostQuitMessage( 0 );
                break;
            default:
                break;
        }

        return 0;
    }
 
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
516
Реакции[?]
496
Поинты[?]
85K
Создал окно через imgui с viewports. Но закрыть его нормально не могу, окно не отзывается, думаю трабл в wndproc.
C++:
LRESULT __attribute__((__stdcall__)) event_handler( const HWND hwnd,
                                                    const UINT msg,
                                                    const WPARAM w_param,
                                                    const LPARAM l_param ) noexcept {
    core::directx_render::get_instance( ).render_event( hwnd, msg, w_param, l_param );

    return ::DefWindowProcA( hwnd, msg, w_param, l_param );
}
 
long directx_render::render_event( HWND hwnd, UINT msg, WPARAM w_param, LPARAM l_param ) {
        if ( ::ImGui_ImplWin32_WndProcHandler( hwnd, msg, w_param, l_param ) != 0 )
            return 1;

        switch ( msg ) {
            case WM_SIZE:
                if ( m_device != nullptr && w_param != SIZE_MINIMIZED ) {
                    cleanup_render_target( );

                    m_swap_chain->ResizeBuffers( 0, LOWORD( l_param ), HIWORD( l_param ), DXGI_FORMAT_UNKNOWN, 0 );

                    create_render_target( );
                }
                break;
            case WM_DESTROY:
                ::PostQuitMessage( 0 );
                break;
            default:
                break;
        }

        return 0;
    }
попробуй case WM_CLOSE:
 
Начинающий
Статус
Оффлайн
Регистрация
21 Мар 2021
Сообщения
172
Реакции[?]
16
Поинты[?]
2K
Код:
case WM_CLOSE:
    ::DestroyWindow(hwnd);
    break;
и если над
Код:
if (ImGui::BeginMainMenuBar())
{
    if (ImGui::BeginMenu("File"))
    {
        if (ImGui::MenuItem("Exit"))
        {
            ::DestroyWindow(hwnd);
        }
        ImGui::EndMenu();
    }
    ImGui::EndMainMenuBar();
}
 
Сверху Снизу