Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.34.87] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте, вот продолжаю мудрить с БД
но вопрос в другом, хочу расположить 50 кнопок на вьюшке вертикально, все располагается, но внизу окна появляется область в виде артефакта как его убрать? вот код и примерчик: 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) |
Сообщ.
#2
,
|
|
|
Цитата Cfon @ но вопрос в другом, хочу расположить 50 кнопок на вьюшке вертикально, все располагается, но внизу окна появляется область в виде артефакта как его убрать? вот код и примерчик: В чём проблема-то? У тебя размер скроллинга больше чем суммарный размер кнопок. Добавлено Кстати, так и не ставишь флаги о который я тебе писал. У тебя там всё перемаргивает |
Сообщ.
#3
,
|
|
|
Цитата Олег М @ В чём проблема-то? У тебя размер скроллинга больше чем суммарный размер кнопок. Добавлено Кстати, так и не ставишь флаги о который я тебе писал. У тебя там всё перемаргивает ну внизу окошка где 19 кнопка у меня под кнопкой черный фон виден. button->Create(caption, WS_CLIPCHILDREN|WS_CLIPSIBLINGS| BS_PUSHBUTTON, CRect(0, 0, 76, 23), this, i + 1); эти флажки? ставил но все равно кнопки мигают |
Сообщ.
#4
,
|
|
|
Цитата Cfon @ эти флажки? ставил но все равно кнопки мигают Их не для кнопок ставить надо, а для родителя. В ListView::PreCreateWindow(CREATESTRUCT& cs) |
Сообщ.
#5
,
|
|
|
ща подумал распологать 50 кнопок на вьюшке не вариант
наверное выберу другой подход буду отслеживать положение и клик мыши, но всеравно надо бы и вариант с 50 кнопками добить, чтобы показать что это неправильнй подход Добавлено Цитата Олег М @ Цитата Cfon @ эти флажки? ставил но все равно кнопки мигают Их не для кнопок ставить надо, а для родителя. В ListView::PreCreateWindow(CREATESTRUCT& cs) а точно ща проверю |
Сообщ.
#6
,
|
|
|
Цитата Cfon @ ну внизу окошка где 19 кнопка у меня под кнопкой черный фон виден. У тебя там ещё какое-то окно создаётся |
Сообщ.
#7
,
|
|
|
Цитата Олег М @ Цитата Cfon @ ну внизу окошка где 19 кнопка у меня под кнопкой черный фон виден. У тебя там ещё какое-то окно создаётся что за окно? вроде ничего больше не создаю |
Сообщ.
#8
,
|
|
|
Цитата Cfon @ что за окно? вроде ничего больше не создаю Ошибся |
Сообщ.
#9
,
|
|
|
да помогло мерцаний нет, теперь бы артефакт убрать
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 кнопки навигации лепил внизу, просто я его не видел, а ща увидел слишком много кнопочек стало |
Сообщ.
#10
,
|
|
|
Цитата Cfon @ что за окно? вроде ничего больше не создаю Вот это // создаем кнопку mFirstPageButton.Create(_T("First"), BS_PUSHBUTTON, CRect(0, 0, 76, 23), this, IDC_FIRST_BUTTON); |
Сообщ.
#11
,
|
|
|
Цитата Олег М @ Цитата Cfon @ что за окно? вроде ничего больше не создаю Вот это // создаем кнопку mFirstPageButton.Create(_T("First"), BS_PUSHBUTTON, CRect(0, 0, 76, 23), this, IDC_FIRST_BUTTON); не его можно убрать, артефакт остается |
Сообщ.
#12
,
|
|
|
пока решил отложить поиск причины этого артефакта, начал делать по другому через отслеживание клика мыши и выбор соответствующего действия
|