0

继续我的对话框设置属性表/页面对话框,我有 5 个页面中的 4 个在工作。在 MFC 中,他们提供了一种名为 的简洁风格方法ApplicationLook,在我的一个属性页面上,我将单选按钮全部设置为该函数中 case 值的值,并且它按预期工作。我已经复制了ApplicationLook我的其他属性页的开关功能并更改了值,该属性页将控制所tabs提供的样式。具有选项卡的属性页遵循提供的选项卡样式的枚举。

就像使用ON_COMMAND_RANGE一样ApplicationLook,单选按钮应该进入选项卡功能......但它永远不会......就像没有人在家一样。但是,我创建了两个MenuItems用于测试的调用tab1tab2它们具有相同的案例标识符,并且它们都可以工作并进入选项卡功能。属性表的单选按钮具有相同的案例标识符,但它从不触发函数。我查看了任何地方是否ApplicationLook有任何 DDX 或 DDV 控件,我很幸运,ApplicationLook但没有,所以这似乎不是问题。

为了测试,函数条目上唯一应该发生的事情是在输出窗口中写入一个测试字符串,显示它进入了这种情况,然后写入注册表设置值......基本上是一个骨架函数,只是为了验证单选按钮操作...这就是为什么要问这个问题。

这很奇怪,因为menuitemradiobuttonID 相同,它们都应该触发该功能……但这不会发生。由于我逐字复制了功能元素,这让我很难过。这两个功能都存在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 StyleFlat设置为函数集的前两个案例值:

STYLE_3D_USER
STYLE_FLAT_SHARED_HORZ_SCROLL_USER

正如我上面提到的,下图显示了tabs设置为相同大小写值的两个,STYLE_3D_USER并按STYLE_FLAT_SHARED_HORZ_SCROLL_USER预期触发函数:

正确驱动功能的选项卡菜单

它确实告诉我(我认为)我的消息范围映射工作正常。我只是无法弄清楚为什么单选按钮设置为菜单项的确切 ID 值不会触发该功能。作为一个注释,我展示了我使用过的完全相同的方法,ApplicationLook这就是为什么我对选项卡式视图做了同样的事情,因为我知道它以一种方式工作......激发tab视图(我无法开始工作)。

ApplicationLook 以同样的方式做,确实有效

如果我能弄清楚为什么这不起作用,我“几乎”在那里。有什么想法可能是错的吗?

4

0 回答 0