Как установитьOriginalState динамически создаваемого CMFCToolbar? - PullRequest
0 голосов
/ 12 сентября 2018

В моем приложении mfc динамически создаются некоторые панели инструментов.

m_cToolBarEx.CreateEx(this, TBSTYLE_FLAT , WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC | CBRS_HIDE_INPLACE);

панель инструментов не имеет растрового изображения или идентификатора ресурса.Я использовал функцию InsertButton для добавления кнопок на моей панели инструментов

Когда я пытаюсь сбросить эту панель инструментов с помощью кнопки Сбросить панель инструментов из меню.Панель инструментов не сбрасывается в исходное состояние, только окно сообщения запрашивается, и никакие изменения не восстанавливаются.

Я предполагаю, что проблема заключается в том, что CMFCToolBar::RestoreOriginalstate() выполняется условие:

if (m_uiOriginalResID == 0)
    {
        return FALSE;
    }

получает значение true, а функция возвращает значение false, поскольку в m_uiOriginalResID отсутствует идентификатор ресурса.

Есть ли способ загрузить динамически созданную панель инструментов, или я должен унаследовать функцию RestoreOriginalstate и написать свою собственную.

1 Ответ

0 голосов
/ 12 сентября 2018

Вы должны переопределить RestoreOriginalstate (), как указано в разделе Примечание :

Этот метод вызывается, когда пользователь выбирает Сброс в меню настройки. Вы также можете вручную вызвать этот метод, чтобы программно сбросить состояние строки меню. Этот метод загружает исходное состояние из файла ресурсов.

Переопределите этот метод, если вы хотите выполнить какую-либо обработку, когда пользователь выбирает параметр Сброс.

Вы также должны переопределить функцию CanBeRestored (), реализация по умолчанию возвращает FALSE, если идентификатор ресурса равен 0.

Вот пример RestoreOriginalstate ():

BOOL CLinksBar::RestoreOriginalstate ()
{
    RemoveAllButtons ();

    InsertButton (CLinkButton (_T("MSDN Home"), _T("http://www.msdn.com")));
    InsertButton (CLinkButton (_T("Microsoft Home"), _T("http://www.microsoft.com")));
    InsertButton (CLinkButton (_T("Visual C++ Developer Center"), _T("http://msdn2.microsoft.com/visualc/")));

    EnableCustomizeButton (TRUE, -1, _T(""));

    AdjustLayout ();
    Invalidate ();

    return TRUE;
} 
...