在一个基于SDI的程序里,如何将工具栏移动到自己想要的位置?
又:怎么样获得工具栏里某一个Button的CWnd *指针?

解决方案 »

  1.   

    在CMainFrame的OnCreate里: if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_wndToolBar.LoadToolBar(IDR_MYTOOLBAR))
    {
    TRACE0("Failed to create toolbar\n");
    return -1;      // fail to create
    }
    其中,CBRS_LEFT代表工具栏的停靠位置在窗口左边
      

  2.   

    m_wndToolBar.MoveWindow(CRect(100,100,300,300));
      

  3.   

    你还需要设定风格
    否则不一定能移到你指定的位置问题2不清楚
    推荐函数
    GetButtonStyle
    SetButtonStyle
    GetButtonInfo
    SetButtonInfo
    GetButtonText
    GetButtonRect
      

  4.   

    To Viconia() :
    我不是指停靠的问题,我是指把ToolBar放在客户区的任意地方,程序运行后可以用手动来移动,但我想通过编程来实现。另外To he_zhidan:
    MoveWindow我试过了,没有效果,应该设置哪些风格呢?
      

  5.   

    你的意思是Toolbar不dock,而是停在任意的窗口位置?
    你在MainFrame的OnCreate里加入一个自定义函数CreatePopupToolBarint CMainFrame::CreatePopupToolBar()
    {
        if(!m_wndPopupToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_SIZE_FIXED|CBRS_TOOLTIPS)
                || !m_wndPopupToolBar.LoadToolBar(IDR_POPUPTOOOLBAR))
        return FALSE;
        
        m_wndPopupToolBar.EnableDocking(0);
        //...... 自建toolbar    Invalidate();
        RecalcLayout();    FloatControlBar(&m_wndPopupToolBar, CPoint(GetSystemMetrics(SM_CXSCREEN)/2,
                                GetSystemMetrics(SM_CXSCREEN)/2));
        return(TRUE);
    }
      

  6.   

    你为什么要获得工具栏上的BUTTON的HWND?
    给工具栏上的按钮关联一个ID,然后截获ID消息就可以操作了呀