Привет. Добавляю в Rebar две кнопки и нужно поменять их местами: Код (Text): ... CReBar m_wndRebar; CButton m_wndButton1, m_wndButton2, m_wndButton3, m_wndButton4; ... BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_CREATE() ON_COMMAND(ID_APP_1, &CMainFrame::OnApp1) ON_COMMAND(ID_APP_2, &CMainFrame::OnApp2) END_MESSAGE_MAP() ... int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // create rebar if (!m_wndRebar.Create(this)) { TRACE0("Failed to create rebar\n"); return -1; // fail to create }... ... void CMainFrame::OnApp1() { CReBarCtrl& refReBarCtrl = m_wndRebar.GetReBarCtrl(); if(!m_wndButton1 && !m_wndButton2 && !m_wndButton3 && !m_wndButton4) { m_wndButton1.Create(L"btn 1",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON|BS_MULTILINE,CRect(0, 0, 100, 40),this,0); m_wndRebar.AddBar(&m_wndButton1,0,0,RBBS_CHILDEDGE|RBBS_BREAK|RBBS_NOGRIPPER); m_wndButton2.Create(L"btn 2",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON|BS_MULTILINE,CRect(0, 0, 100, 40),this,1); m_wndRebar.AddBar(&m_wndButton2,0,0,RBBS_CHILDEDGE|RBBS_BREAK|RBBS_NOGRIPPER); m_wndButton3.Create(L"btn 3",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON|BS_MULTILINE,CRect(0, 0, 100, 40),this,2); m_wndRebar.AddBar(&m_wndButton3,0,0,RBBS_CHILDEDGE|RBBS_BREAK|RBBS_NOGRIPPER); m_wndButton4.Create(L"btn 4",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON|BS_MULTILINE,CRect(0, 0, 100, 40),this,3); m_wndRebar.AddBar(&m_wndButton4,0,0,RBBS_CHILDEDGE|RBBS_BREAK|RBBS_NOGRIPPER); BOOL b = refReBarCtrl.MoveBand(2,0); //<---- возвращает 1, но местами не меняет //ExchangeBands(2,0); } } void CMainFrame::OnApp2() { CReBarCtrl& refReBarCtrl = m_wndRebar.GetReBarCtrl(); if(m_wndButton1 && m_wndButton2 && m_wndButton3 && m_wndButton4) { m_wndButton1.DestroyWindow(); refReBarCtrl.DeleteBand(0); m_wndButton2.DestroyWindow(); refReBarCtrl.DeleteBand(1); m_wndButton3.DestroyWindow(); refReBarCtrl.DeleteBand(2); m_wndButton4.DestroyWindow(); refReBarCtrl.DeleteBand(3); } } Если я прпвильно понял функция MoveBand(1,0) меняет местами элементы (band) Moves a band from one index to another. Или только индексы меняет? Как правильно ее использовать? И зачем она нужна если не меняет местами... такой код: Код (Text): int CMainFrame::ExchangeBands(int first, int second) { CReBarCtrl& refReBarCtrl = m_wndRebar.GetReBarCtrl(); int BandCount = (int)refReBarCtrl.GetBandCount(); if(first==second || BandCount==0 || first>BandCount || second>BandCount) return 1; LPREBARBANDINFO prbbi1 = new REBARBANDINFO; LPREBARBANDINFO prbbi2 = new REBARBANDINFO; BOOL b; prbbi1->cbSize = prbbi2->cbSize = sizeof(REBARBANDINFO); prbbi1->fMask = prbbi2->fMask = RBBIM_CHILD; // get b = refReBarCtrl.GetBandInfo(first,prbbi1); b = refReBarCtrl.GetBandInfo(second,prbbi2); // set b = refReBarCtrl.SetBandInfo(first,prbbi2); b = refReBarCtrl.SetBandInfo(second,prbbi1); //refReBarCtrl.ShowBand(first); // fix; т.к. не показывал последнее значение. Почему? if(prbbi1) delete prbbi1; if(prbbi2) delete prbbi2; return 0; } меняет местами, но только первый раз. При пересоздании кнопок ничего не происходит.