继续我的对话框设置属性表/页面对话框,我有 5 个页面中的 4 个在工作。在 MFC 中,他们提供了一种名为 的简洁风格方法ApplicationLook
,在我的一个属性页面上,我将单选按钮全部设置为该函数中 case 值的值,并且它按预期工作。我已经复制了ApplicationLook
我的其他属性页的开关功能并更改了值,该属性页将控制所tabs
提供的样式。具有选项卡的属性页遵循提供的选项卡样式的枚举。
就像使用ON_COMMAND_RANGE
一样ApplicationLook
,单选按钮应该进入选项卡功能......但它永远不会......就像没有人在家一样。但是,我创建了两个MenuItems
用于测试的调用tab1
,tab2
它们具有相同的案例标识符,并且它们都可以工作并进入选项卡功能。属性表的单选按钮具有相同的案例标识符,但它从不触发函数。我查看了任何地方是否ApplicationLook
有任何 DDX 或 DDV 控件,我很幸运,ApplicationLook
但没有,所以这似乎不是问题。
为了测试,函数条目上唯一应该发生的事情是在输出窗口中写入一个测试字符串,显示它进入了这种情况,然后写入注册表设置值......基本上是一个骨架函数,只是为了验证单选按钮操作...这就是为什么要问这个问题。
这很奇怪,因为menuitem
和radiobutton
ID 相同,它们都应该触发该功能……但这不会发生。由于我逐字复制了功能元素,这让我很难过。这两个功能都存在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()
资源.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
我已将该功能缩减为 2 种情况,默认情况下仅用于测试。
主框架.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;
}
}
}
在tabs
对话框页面中,3d Style
和Flat
设置为函数集的前两个案例值:
STYLE_3D_USER
STYLE_FLAT_SHARED_HORZ_SCROLL_USER
正如我上面提到的,下图显示了tabs
设置为相同大小写值的两个,STYLE_3D_USER
并按STYLE_FLAT_SHARED_HORZ_SCROLL_USER
预期触发函数:
它确实告诉我(我认为)我的消息范围映射工作正常。我只是无法弄清楚为什么单选按钮设置为菜单项的确切 ID 值不会触发该功能。作为一个注释,我展示了我使用过的完全相同的方法,ApplicationLook
这就是为什么我对选项卡式视图做了同样的事情,因为我知道它以一种方式工作......激发tab
视图(我无法开始工作)。
如果我能弄清楚为什么这不起作用,我“几乎”在那里。有什么想法可能是错的吗?