zoukankan      html  css  js  c++  java
  • 利用CRebar和CDialogBar编写可浮动的dialog类型的工具栏

    这个crebar用起来参数真奇怪, 算了, 直接上代码吧:
    先弄一个基于cdialog的类CMyDlgBar,将基类改为cdialogbar, 需要注意必须修改 constructor(没有参数), OnInitDialog(里面需要初始化)
    class CMyDlgBar : public CDialogBar
    {
        DECLARE_DYNAMIC(CMyDlgBar)

    public:
        CMyDlgBar();   
    // standard constructor
        virtual ~CMyDlgBar();

    // Dialog Data
        enum { IDD = IDD_DIALOG1 };

    protected:
        
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

        DECLARE_MESSAGE_MAP()
    public:
        
    virtual BOOL Create(CWnd* pParentWnd, UINT nIDTemplate, UINT nStyle, UINT nID);
        
    int m_nData;
        afx_msg 
    void OnBnClickedOk();
    //    afx_msg void OnBnClickedButton1();
        afx_msg void OnBnClickedButton1();
        afx_msg LRESULT OnInitDialog(UINT wParam,LONG lParam);

        afx_msg 
    void OnEnChangeEdit1();
    }
    ;


    // CMyDlgBar dialog

    IMPLEMENT_DYNAMIC(CMyDlgBar, CDialogBar)

    CMyDlgBar::CMyDlgBar()
        : CDialogBar()
        , m_nData(
    0)
    {

    }


    CMyDlgBar::
    ~CMyDlgBar()
    {
    }


    void CMyDlgBar::DoDataExchange(CDataExchange* pDX)
    {
        CDialogBar::DoDataExchange(pDX);
    }



    BEGIN_MESSAGE_MAP(CMyDlgBar, CDialogBar)
        ON_BN_CLICKED(IDOK, 
    &CMyDlgBar::OnBnClickedOk)
    //    ON_BN_CLICKED(IDC_BUTTON1, &CMyDlgBar::OnBnClickedButton1)
    ON_BN_CLICKED(IDC_BUTTON1, &CMyDlgBar::OnBnClickedButton1)
    ON_EN_CHANGE(IDC_EDIT1, 
    &CMyDlgBar::OnEnChangeEdit1)
    ON_MESSAGE(WM_INITDIALOG,OnInitDialog)
    END_MESSAGE_MAP()

    LRESULT CMyDlgBar::OnInitDialog(UINT wParam,LONG lParam)

    {

        
    // TODO: Add extra initialization here

        BOOL bRet 
    = HandleInitDialog(wParam,lParam);

        
    if (!UpdateData(FALSE))

        
    {

            TRACE(
    "InitCDataStatus Failed!");

        }


        
    return TRUE; // return TRUE unless you set the focus to a control

        
    // EXCEPTION: OCX Property Pages should return FALSE

    }


    // CMyDlgBar message handlers

    BOOL CMyDlgBar::Create(CWnd
    * pParentWnd, UINT nIDTemplate, UINT nStyle, UINT nID)
    {
        
    // TODO: Add your specialized code here and/or call the base class

         CDialogBar::Create(pParentWnd, nIDTemplate, nStyle, nID);
         UpdateData(FALSE);
         
    return TRUE;
    }


    void CMyDlgBar::OnBnClickedOk()
    {
        
    // TODO: Add your control notification handler code here
    }


    //void CMyDlgBar::OnBnClickedButton1()
    //{
    //    // TODO: Add your control notification handler code here
    //}

    void CMyDlgBar::OnBnClickedButton1()
    {
        
    // TODO: Add your control notification handler code here
    }



    void CMyDlgBar::OnEnChangeEdit1()
    {
        
    // TODO:  If this is a RICHEDIT control, the control will not
        
    // send this notification unless you override the CDialogBar::OnInitDialog()
        
    // function and call CRichEditCtrl().SetEventMask()
        
    // with the ENM_CHANGE flag ORed into the mask.
        MessageBox(L"Changed");
        
    // TODO:  Add your control notification handler code here
    }



    在cmainframe里面定义两个变量
    CMyDlgBar m_barAttrib;
        CReBar      m_wndReBar;

    必须实现oncreate和oncmdmsg

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
            
    return -1;
        
        
    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
            
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
            
    !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
        
    {
            TRACE0(
    "Failed to create toolbar\n");
            
    return -1;      // fail to create
        }


        
    if (!m_wndStatusBar.Create(this||
            
    !m_wndStatusBar.SetIndicators(indicators,
              
    sizeof(indicators)/sizeof(UINT)))
        
    {
            TRACE0(
    "Failed to create status bar\n");
            
    return -1;      // fail to create
        }


        
    // TODO: Delete these three lines if you don't want the toolbar to be dockable
        if (!m_barAttrib.Create(this,m_barAttrib.IDD, CBRS_ALIGN_RIGHT|CBRS_GRIPPER, m_barAttrib.IDD))
        
    {
            TRACE0(
    "Failed to create dialogbar\n");
            
    return -1;
        }

        m_barAttrib.SetWindowText(L
    "部件属性");
        
    /*XXX是一个资源id手工直接在资源的.h文件中添加一条,不会,这里就不教了。
            工具条的显示和隐藏代码如下,自己慢慢理解吧:
    */

        
    //    ShowControlBar(&m_barAttrib, (m_barAttrib.GetStyle() & WS_VISIBLE) == 0, FALSE);

        
    //m_wndReBar.Create(this);
        m_wndReBar.Create(this,   RBS_AUTOSIZE   |   RBS_BANDBORDERS,
            
    /*WS_CHILD   |   WS_VISIBLE   |  WS_CLIPSIBLINGS   |   WS_CLIPCHILDREN   | */  CBRS_RIGHT) ;
        m_wndReBar.AddBar(
    &m_barAttrib,NULL,NULL, RBBS_GRIPPERALWAYS|RBBS_FIXEDBMP);
        
        
    //m_wndReBar.AddBar(&m_wndToolBar,NULL,NULL, RBBS_GRIPPERALWAYS|RBBS_FIXEDBMP);
        m_barAttrib.EnableDocking(CBRS_ALIGN_ANY);
        
        m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
        EnableDocking(CBRS_ALIGN_ANY);
        DockControlBar(
    &m_barAttrib);
        DockControlBar(
    &m_wndToolBar);
        
        
        
    return 0;
    }

    BOOL CMainFrame::OnCmdMsg(UINT nID, 
    int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
    {
        
    // TODO: Add your specialized code here and/or call the base class

        
    if(m_barAttrib.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
            
    return TRUE;
        
    return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
    }


  • 相关阅读:
    你所不知道的React Hooks
    DataRow的RowState属性变化
    gRPC详解
    Protobuf简明教程
    docker容器内没有权限
    Locust高并发情况下的性能优化与分布式场景的应用
    Docker容器日志打满机器的解决方式
    Django单测详解
    使用Flask+uwsgi+Nginx部署Flask正式环境
    Locust-分布式执行
  • 原文地址:https://www.cnblogs.com/cutepig/p/1541557.html
Copyright © 2011-2022 走看看