Страница свойств MFC MDI Радиокнопки работают на одной странице для функции 1, кнопки на другой странице для функции 2 не срабатывают

Продолжая мои настройки диалогового окна Property Sheet / Page, у меня работают 4 из 5 страниц. В MFC они предлагают аккуратный метод стиля, вызываемый на одной из моих страниц свойств, у меня все переключатели установлены на значения значения case в этой функции, и он работает, как ожидалось. Я воспроизвел функцию переключения и изменил значения для другой страницы свойств, которая будет управлять предлагаемыми стилями. Страница свойств с вкладками соответствует перечислению предлагаемых стилей вкладок.

С помощью ON_COMMAND_RANGEтак же, как и радиокнопки, должны входить в функцию вкладок .... но этого никогда не происходит ... как будто никого нет дома. Однако я создал два MenuItems для тестирования называется tab1 а также tab2которые имеют одинаковый идентификатор случая, и оба они работают и входят в функцию вкладок. Радиокнопки на странице свойств имеют тот же идентификатор случая, но он никогда не запускает функцию. Я посмотрел, есть ли где-нибудь элементы управления DDX или DDV, и мне повезло, но их нет, так что, похоже, это не проблема.

Для тестирования единственное, что должно произойти при записи функции, - это записать тестовую строку в окно вывода, показывающую, что она вошла в этот случай, а затем записать значение параметра реестра ... в основном функция скелета, просто чтобы проверить переключатель операция ... вот почему задается этот вопрос.

Это очень странно, так как menuitem и radiobuttonИдентификаторы одинаковы, они оба должны запускать функцию ... но этого не происходит. Поскольку я дословно скопировал функциональные элементы, это меня озадачило. Обе функции живут в MainFrame.cpp

      BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
    ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnApplicationLook)
    ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnUpdateApplicationLook)
    
    ON_COMMAND_RANGE(STYLE_3D_USER, STYLE_3D_ROUNDED_SCROLL_USER, &CMainFrame::OnUserTabStyles)
    //ON_UPDATE_COMMAND_UI_RANGE(STYLE_3D_USER, STYLE_3D_ROUNDED_SCROLL_USER, &CMainFrame::OnUpdateApplicationLook)
END_MESSAGE_MAP()

Resource.h

      #define STYLE_FLAT_USER                 201
#define STYLE_FLAT_SHARED_HORZ_SCROLL_USER 202
#define STYLE_3D_SCROLLED_USER          203
#define STYLE_3D_ONENOTE_USER           204
#define STYLE_3D_VS2005_USER            205
#define STYLE_3D_ROUNDED_USER           206
#define STYLE_3D_ROUNDED_SCROLL_USER    207
#define ID_VIEW_APPLOOK_WIN_2000        40013
#define ID_VIEW_APPLOOK_OFF_XP          40014
#define ID_VIEW_APPLOOK_WIN_XP          40015
#define ID_VIEW_APPLOOK_OFF_2003        40016
#define ID_VIEW_APPLOOK_VS_2005         40017
#define ID_VIEW_APPLOOK_VS_2008         40018
#define ID_VIEW_APPLOOK_OFF_2007_BLUE   40019
#define ID_VIEW_APPLOOK_OFF_2007_BLACK  40020
#define ID_VIEW_APPLOOK_OFF_2007_SILVER 40021
#define ID_VIEW_APPLOOK_OFF_2007_AQUA   40022
#define ID_VIEW_APPLOOK_WINDOWS_7       40023

Я сократил функцию до двух случаев и значения по умолчанию только для тестирования.

MainFrame.cpp

      void CMainFrame::OnUserTabStyles(UINT id)
{
    CWaitCursor wait;
    m_nAppTabLook = id;

    switch (m_nAppTabLook)
    {
    case STYLE_3D_USER:
        AfxGetApp()->WriteProfileString(_T("Settings"), _T("UserTabStyle"), _T("STYLE_3D")); // Save value to registry
        m_wndOutput.AddStringStatusTab(_T("3D"));

        break;

    case STYLE_FLAT_SHARED_HORZ_SCROLL_USER:
        AfxGetApp()->WriteProfileString(_T("Settings"), _T("UserTabStyle"), _T("STYLE_FLAT_SHARED_HORZ_SCROLL")); // Save value to registry
        m_wndOutput.AddStringStatusTab(_T("H Scroll"));

        break;

    default:
        switch (m_nAppTabLook)
        {
        case STYLE_FLAT_USER:
            m_wndOutput.AddStringStatusTab(_T("Flat User"));

            break;
        }

    }

}

на странице диалога 3d Style а также Flat устанавливаются в первые два значения case в функции, установленной как:

      STYLE_3D_USER
STYLE_FLAT_SHARED_HORZ_SCROLL_USER

Как я уже упоминал выше, на изображении ниже показаны два tabs которые установлены в те же значения регистра STYLE_3D_USER а также STYLE_FLAT_SHARED_HORZ_SCROLL_USER чтобы запустить функцию, как ожидалось:

Он говорит мне (я думаю), что моя карта диапазона сообщений работает правильно. Я просто не могу понять, почему переключатель, установленный на точное значение идентификатора элемента меню, не запускает функцию. В качестве примечания я показываю тот же метод, который использовал для ApplicationLook вот почему я сделал то же самое для представления с вкладками, поскольку знал, что он работает в одну сторону ... вдохновляя tab вид (с которым я не могу работать).

Я «почти» там, если смогу разобраться, почему это не работает. Есть мысли относительно того, что может быть не так?

0 ответов

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