Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Rebar, Как создать Rebar подобный VS  (Прочитано 6530 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zubr
Гость
« : 21-11-2006 17:07 » 

Пишу приложение на WTL в VS2003. Надо сделать ребар подобный ребару в самой VS, то есть чтобы мог ставиться в любое положение, а не в крайнее левое. Как только не комбинировал параметры в процедуре Create - не получается, устанавливается в крайнее левое положение. Может кто уже делал подобное (чтобы ребар мог быть в любом положении), подскажите.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 22-11-2006 00:07 » 

Что значит ребар?

Покажи как делаешь. Что именно используешь.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
zubr
Гость
« Ответ #2 : 22-11-2006 05:03 » 

Rebar controls act as containers for child windows. An application assigns child windows, which are often other controls, to a rebar control band. Rebar controls contain one or more bands, and each band can have any combination of a gripper bar, a bitmap, a text label, and a child window. However, bands cannot contain more than one child window. (Описание из MSDN).
Весь код показать не смогу, дело в том, что я пишу виртуальный тулбар (там периодически меняются иконки, кнопки, контролы, баннер) для коммерческого использования. В общем по требованию заказчика он должен находится на ребаре, чтобы его можно было перетаскивать.
Ну вот как я создаю ребар:
Код:
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
        REBARINFO     rbi;
        REBARBANDINFO rbBand;
        HWND   hwndCB, hwndTB, hwndRB;
        RECT rc;
        SIZE sz;


        ::SetClassLong(m_hWnd, GCL_HBRBACKGROUND, (LONG)::GetSysColorBrush(COLOR_BTNFACE));

        hwndRB=m_ReBar.Create(m_hWnd, NULL, NULL, WS_CHILD|WS_VISIBLE | WS_CLIPSIBLINGS |
                           WS_CLIPCHILDREN | /*CCS_NORESIZE | CCS_NOPARENTALIGN |/*RBS_VARHEIGHT |*/
                           CCS_NODIVIDER, /*RBS_AUTOSIZE*/ 0/*, WS_EX_TOOLWINDOW);

        rbi.cbSize = sizeof(REBARINFO); 
        rbi.fMask  = 0;
        rbi.himl   = (HIMAGELIST)NULL;
m_ReBar.SetBarInfo(&rbi);

        rbBand.cbSize = sizeof(REBARBANDINFO);
        rbBand.fMask  = /*RBBIM_COLORS /*| RBBIM_TEXT /*| RBBIM_BACKGROUND |*/
                   RBBIM_STYLE | RBBIM_CHILD  | RBBIM_CHILDSIZE |
                   RBBIM_SIZE /*| RBBIM_IDEALSIZE*/;
        rbBand.fStyle = RBBS_CHILDEDGE /*| RBBS_FIXEDBMP | RBBS_GRIPPERALWAYS  | RBBS_USECHEVRON*/;
        rbBand.clrBack=0;
       
        tbar.m_ToolBarImageArea.setBorder(TRUE);//tbar - это мой виртуальный тулбар
        tbar.m_ToolBarImageArea.setShowHint(TRUE);
        tbar.m_ToolBarImageArea.CreateSimple(m_hWnd);
       
        tbar.m_hWnd=this->m_hWnd;
        tbar.createBarControls();
        tbar.initButton();

        tbar.loadBannerData();
        tbar.runBannerImage(true);

        rbBand.hwndChild  = tbar.m_ToolBarImageArea.m_hWnd;
        rbBand.cxMinChild = 0;
        tbar.m_ToolBarImageArea.GetPadding(&sz);
        rbBand.cyMinChild = tbar.m_ToolBarImageArea.getButtonHeight()+2*sz.cy;// rc.bottom - rc.top;
        rbBand.cx  = 300;
        m_ReBar.InsertBand(-1, &rbBand);

        CEdit m_Edit;
        m_Edit.Create(m_hWnd, CRect(0, 0, 100, 24), "", WS_CHILD | WS_BORDER
          | WS_VISIBLE | ES_LEFT | ES_AUTOVSCROLL | ES_MULTILINE, 0, ID_NONSTRETCH);

        ::GetWindowRect(m_Edit.m_hWnd, &rc);
        //rbBand.fStyle = RBBS_CHILDEDGE | RBBS_HIDDEN;
//rbBand.lpText     = " ";
        rbBand.hwndChild  = m_Edit.m_hWnd;
        rbBand.cxMinChild = 0;
        rbBand.cyMinChild = rc.bottom - rc.top;
        rbBand.cx         = 250;
        m_ReBar.InsertBand(-1, &rbBand);



        // register object for message filtering and idle updates
       CMessageLoop* pLoop = _Module.GetMessageLoop();
       ATLASSERT(pLoop != NULL);
      pLoop->AddMessageFilter(this);
      pLoop->AddIdleHandler(this);
       
      return 0;
}
Пишу на WTL (таково требование заказчика).

« Последнее редактирование: 22-11-2006 05:05 от zubr » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines