【问题标题】:Is it possible to add CMFCToolBar to a dialog?是否可以将 CMFCToolBar 添加到对话框中?
【发布时间】:2010-11-06 23:35:03
【问题描述】:

我刚刚尝试了将 CToolbar 添加到新 CMFCToolBar 上的对话框的标准方法。但它不起作用。在我进入新的实现之前,我想知道它是否真的可能?

【问题讨论】:

    标签: c++ visual-c++ mfc mfc-feature-pack


    【解决方案1】:

    我不确定您所说的“标准方式”是什么意思,但您当然可以通过编程方式进行:

    // In MyDlg.h
    class CMyDlg : public CDialog
    {
    ...
        CMFCToolBar m_ToolBar;
    ...
    };
    
    // In MyDlg.cpp
    BOOL CMyDlg::OnInitDialog()
    {
    ...
        if( m_ToolBar.Create( this, AFX_DEFAULT_TOOLBAR_STYLE, 100 ) )
        {
            m_ToolBar.SetPaneStyle( m_ToolBar.GetPaneStyle() 
                & ~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_ANY) );
    
            m_ToolBar.InsertButton( CMFCToolBarButton( ID_APP_ABOUT, -1, _T("About") ) );
            m_ToolBar.InsertButton( CMFCToolBarButton( ID_APP_EXIT, -1, _T("Exit") ) );
    
            CSize   sizeToolBar = m_ToolBar.CalcFixedLayout( FALSE, TRUE );
            m_ToolBar.SetWindowPos( NULL, 0, 0, sizeToolBar.cx, sizeToolBar.cy,
                SWP_NOACTIVATE | SWP_NOZORDER );
        }
    ...
    }
    

    【讨论】:

    • 您也可以使用 LoadToolBar 从资源中加载工具栏。
    【解决方案2】:

    上面的OnInitDialog 运行良好,除非该命令是仅对话框命令。

    如果没有应用程序或主机处理程序,则按钮会自行禁用并且不会调用处理程序。请注意,上面的代码路由正确,因为 ID_APP_ABOUTID_APP_EXIT 已经有 CWinAppEx 处理程序。

    不涉及覆盖OnCmdMsg 的解决方法是在应用程序或主机级别添加处理程序。然后工具栏保持活动状态,并正确找到正确的对话框处理程序。添加一个简单的 void 处理程序到CMainFrame 就可以了(下面的示例代码)。不调用 void 处理程序。

    BOOL CMyDlg::OnInitDialog()                    
    {                    
        ...  
        m_ToolBar.InsertButton( CMFCToolBarButton( **ID_DLG_COMMAND**, -1, _T("DlgCommand") ) ); 
        ...     
    }    
    
    //CMainFrame
    BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
    ...
        ON_COMMAND(**ID_DLG_COMMAND**, VoidHandler)
    END_MESSAGE_MAP()
    
    void CMainFrame::VoidHandler()
    {
        assert(0);
    }
    

    【讨论】:

      【解决方案3】:

      如果您只需要处理仅限对话框的命令,诀窍是将 SetRouteCommandsViaFrame 设置为 FALSE。然后所有者(通常是对话框)将用于命令而不是主框架。

      【讨论】:

        猜你喜欢
        • 2012-12-29
        • 1970-01-01
        • 2013-07-03
        • 1970-01-01
        • 2012-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多