Страница свойств 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
вид (с которым я не могу работать).
Я «почти» там, если смогу разобраться, почему это не работает. Есть мысли относительно того, что может быть не так?