Я хочу, чтобы мое диалоговое окно вело себя как закрепляемая панель в MFC - приложении MDI на основе ленты

Я создаю диалог, он унаследован от CDialogEx (имя класса диалога DockColorDlg), и создаю другой класс (ColorDockable), который наследуется от класса CDockablePane. И в моем классе ColorDockable я создаю экземпляр DockColorDlg (DockColorDlg m_wndDialog).

Теперь я звоню из моего Mainfram.cpp и создаю закрепляемое окно, когда я это реализую, оно будет работать, но после нескольких раз или нескольких сборок оно не создаст окно.

вызов из моего Mainfrm.cpp:
    if (!m_wndMyDockablePane.Create(_T("Weaves & Color"), this, CRect(0, 0, 200, 200), TRUE,          ID_VIEW_MYDOCKABLEPANE, WS_CHILD | WS_VISIBLE | CBRS_TOP))
    {
        TRACE0("Failed to create dockable pane\n");
        return -1; // fail to create
    }   

    m_wndMyDockablePane.EnableDocking(CBRS_ALIGN_RIGHT | CBRS_ALIGN_LEFT);

    DockPane(&m_wndMyDockablePane);

    //this in my ColorDockable.cpp
    int ColorDockable::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        TRACE("ColorDockable::OnCreate called\n");

        if (CDockablePane::OnCreate(lpCreateStruct) == -1)
            return -1;

        if (!m_wndDialog.Create(IDD_DOC_COLOR_DLG, this));
        {
            TRACE("Failed to create dialog\n");
            return 0; // Fail to create
        }
        bool check = m_wndDialog.ShowWindow(SW_SHOWNORMAL);
        m_wndDialog.SetWindowPos(NULL, 0, 0, lpCreateStruct->cx, lpCreateStruct->cy, SWP_NOZORDER |    SWP_SHOWWINDOW);
        //ShowDockableDialog();
        return 0;
    }

//but its not created TRACE("Failed to create dialog\n");

Можете ли вы немного оживить отладочный код? GetLastError() твой друг!

thomiel 26.06.2024 11:37

Я использую основной мэйнфрейм в качестве обработчика, если главное окно не открывается, перед открытием главного окна оно вызывается. По этой причине это произошло?

Sanam Sah 26.06.2024 13:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Метод CDialog::Create() создает немодальное диалоговое окно, а это не то, что вам нужно. Вместо этого проверьте классы CPaneDialog и CDialogBar, которые являются классами на основе диалоговых ресурсов и ведут себя как закрепляемая панель и панель инструментов соответственно — последняя также закреплена.

Создайте несколько тестовых проектов, пробуя разные настройки стиля проекта, по крайней мере, вариант «Visual Studio», чтобы проверить их внешний вид и решить, какой из них лучше для вас. Затем вы можете скопировать части кода, созданного мастером, в свой проект ИЛИ, если проект новый, создать его снова с нужными параметрами.

Вы также можете просмотреть пример CTRLBARS MFC.

Другие вопросы по теме