На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> какой то артефакт при отрисовке , CScrollView
    Здравствуйте, вот продолжаю мудрить с БД :D

    но вопрос в другом, хочу расположить 50 кнопок на вьюшке вертикально, все располагается, но внизу окна появляется область в виде артефакта как его убрать?
    вот код и примерчик:

    ExpandedWrap disabled
      class CExample4View : public CScrollView
      {
      ..............
          
          CArray<std::shared_ptr<CButton>> mDetailButtons;
      .......................
       
       
      int CExample4View::OnCreate(LPCREATESTRUCT lpCreateStruct)
      {
          if (CScrollView::OnCreate(lpCreateStruct) == -1)
              return -1;
       
       
          // Создаем кнопки деталировки
          for (int i = 0; i < 50; ++i)
          {
              CString caption;
              std::shared_ptr<CButton> button(new CButton);
              caption.Format(_T(""));
              button->Create(caption, BS_PUSHBUTTON, CRect(0, 0, 76, 23), this, i + 1);
              mDetailButtons.Add(button);
          }
       
          return 0;
      }
       
      void CExample4View::OnInitialUpdate()
      {
          TRACE("CExample4View::OnInitialUpdate\n");
       
          CScrollView::OnInitialUpdate();
       
          //CSize sizeTotal;
          //// TODO: calculate the total size of this view
          //sizeTotal.cx = sizeTotal.cy = 100;
          //SetScrollSizes(MM_TEXT, sizeTotal);
       
           const int cMapMode = MM_HIMETRIC;
       
          // устанавливаем размеры окна 20 Х 40 см
          const int cX = 20000;
          const int cY = 40000;
       
          CSize sizeTotal(cX, cY);
          CSize sizePage(sizeTotal.cx / 2, sizeTotal.cy / 2);
          CSize sizeLine(sizeTotal.cx / 50, sizeTotal.cy / 50);
       
          SetScrollSizes(cMapMode, sizeTotal, sizePage, sizeLine);    
       
          
          // TODO: Располагаем кнопки детализации
          CPoint scrlPos = GetDeviceScrollPosition();
       
          const CSize buttonSize(76, 23);
          int cx = -scrlPos.x;
          int cy =  -scrlPos.y;  
          
          for (int i = 0; i < mDetailButtons.GetCount(); ++i)
          {
              CString s;
              s.Format(_T("Button %d"), i+1);
              mDetailButtons[i]->SetWindowText(s);
              mDetailButtons[i]->SetWindowPos(&wndTop, cx, cy, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
              cy += buttonSize.cy;        
          }
      }


    Прикреплённый файлПрикреплённый файлExample4.zip (78,56 Кбайт, скачиваний: 79)
    Сообщение отредактировано: Cfon -
      Цитата Cfon @
      но вопрос в другом, хочу расположить 50 кнопок на вьюшке вертикально, все располагается, но внизу окна появляется область в виде артефакта как его убрать?
      вот код и примерчик:

      В чём проблема-то? У тебя размер скроллинга больше чем суммарный размер кнопок.

      Добавлено
      Кстати, так и не ставишь флаги о который я тебе писал. У тебя там всё перемаргивает
        Цитата Олег М @
        В чём проблема-то? У тебя размер скроллинга больше чем суммарный размер кнопок.

        Добавлено
        Кстати, так и не ставишь флаги о который я тебе писал. У тебя там всё перемаргивает

        ну внизу окошка где 19 кнопка у меня под кнопкой черный фон виден.

        ExpandedWrap disabled
          button->Create(caption, WS_CLIPCHILDREN|WS_CLIPSIBLINGS| BS_PUSHBUTTON, CRect(0, 0, 76, 23), this, i + 1);

        эти флажки?
        ставил но все равно кнопки мигают :)
          Цитата Cfon @
          эти флажки?
          ставил но все равно кнопки мигают

          Их не для кнопок ставить надо, а для родителя. В ListView::PreCreateWindow(CREATESTRUCT& cs)
            ща подумал распологать 50 кнопок на вьюшке не вариант :D
            наверное выберу другой подход буду отслеживать положение и клик мыши, но всеравно надо бы и вариант с 50 кнопками добить, чтобы показать что это неправильнй подход :D

            Добавлено
            Цитата Олег М @
            Цитата Cfon @
            эти флажки?
            ставил но все равно кнопки мигают

            Их не для кнопок ставить надо, а для родителя. В ListView::PreCreateWindow(CREATESTRUCT& cs)

            а точно ща проверю :D
            Сообщение отредактировано: Cfon -
              Цитата Cfon @
              ну внизу окошка где 19 кнопка у меня под кнопкой черный фон виден.

              У тебя там ещё какое-то окно создаётся
                Цитата Олег М @
                Цитата Cfon @
                ну внизу окошка где 19 кнопка у меня под кнопкой черный фон виден.

                У тебя там ещё какое-то окно создаётся

                что за окно? :unsure:
                вроде ничего больше не создаю
                  Цитата Cfon @
                  что за окно?
                  вроде ничего больше не создаю


                  Ошибся
                    да помогло мерцаний нет, теперь бы артефакт убрать :)

                    ExpandedWrap disabled
                      BOOL CExample4View::PreCreateWindow(CREATESTRUCT& cs)
                      {
                          // TODO: Modify the Window class or styles here by modifying
                          //  the CREATESTRUCT cs
                       
                          cs.style |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
                       
                          return CScrollView::PreCreateWindow(cs);
                      }


                    Добавлено
                    этот артефакт оказывается и раньше был, когда 4 кнопки навигации лепил внизу, просто я его не видел, а ща увидел слишком много кнопочек стало :D
                      Цитата Cfon @
                      что за окно?
                      вроде ничего больше не создаю

                      Вот это
                      // создаем кнопку
                      mFirstPageButton.Create(_T("First"), BS_PUSHBUTTON, CRect(0, 0, 76, 23), this, IDC_FIRST_BUTTON);
                        Цитата Олег М @
                        Цитата Cfon @
                        что за окно?
                        вроде ничего больше не создаю

                        Вот это
                        // создаем кнопку
                        mFirstPageButton.Create(_T("First"), BS_PUSHBUTTON, CRect(0, 0, 76, 23), this, IDC_FIRST_BUTTON);

                        не его можно убрать, артефакт остается :)
                          пока решил отложить поиск причины этого артефакта, начал делать по другому через отслеживание клика мыши и выбор соответствующего действия :)
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0503 ]   [ 18 queries used ]   [ Generated: 18.04.24, 12:49 GMT ]