Как разместить полосу прокрутки не снизу, а сверху?

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Как разместить полосу прокрутки не снизу, а сверху?

Re: Как разместить полосу прокрутки не снизу, а сверху?

GulyaiVasko77 » 24 фев 2016, 22:40

Я тоже с этим не сталкивался.

Re: Как разместить полосу прокрутки не снизу, а сверху?

Сионист » 12 янв 2016, 06:30

А зачем тогда передавать SB_VERT,
Я его не передаю.
Используй такие же параметры, как и в SetScrollPos и у тебя всё заработает.
По факту не работает. Кстати, в сетпос только один пос, а в сетрэндж целых два, так что тех же параметров не хватит.
Если бы мне нужно было такое сделать, то я бы положил на месте мини-карты дочернее окно, на котором бы рисовал сами миникарту,
А я его что убрал что ли?
а также включил бы на нём горизонтальный скрол через стили.
А на нём то нафига?
В таком случае можно было бы обойтись стандратным скролом, а не создавать отдельно скрол-контрол.
Энто каким же образом?

Re: Как разместить полосу прокрутки не снизу, а сверху?

Romeo » 11 янв 2016, 22:31

Сионист писал(а):Вертикальной у меня нет вообще.
А зачем тогда передавать SB_VERT, если вертикального скрола не имеется? Таким вызовом ты задаёшь диапазон для несуществующего скрола. Каким образом это всё должно работать по-твоему? Используй такие же параметры, как и в SetScrollPos и у тебя всё заработает.
Сионист писал(а):Но внизу у меня ещё и кнопки градуса, минуты и секунды и отделять их от самой форточки как то не того, вверху же находится миникарта, которую так и так надо отделить. Поэтому лучше сверху.
Если бы мне нужно было такое сделать, то я бы положил на месте мини-карты дочернее окно, на котором бы рисовал сами миникарту, а также включил бы на нём горизонтальный скрол через стили. В таком случае можно было бы обойтись стандратным скролом, а не создавать отдельно скрол-контрол. Так всё было бы логичнее, наверное.

Re: Как разместить полосу прокрутки не снизу, а сверху?

Сионист » 11 янв 2016, 17:45

Romeo писал(а):А, вертикальную ты оставил стандартной.
Вертикальной у меня нет вообще. И не будет. Горизонтальная прокрутка необходима, так как строка может не влезать в окно. А вертикальная не нужна, так как старые сообщения должны быть во-первых давно прочитаны, а во-вторых уже не актуальны, соответственно нужны только последние, а значит вертикально прокручивать нечего. Но внизу у меня ещё и кнопки градуса, минуты и секунды и отделять их от самой форточки как то не того, вверху же находится миникарта, которую так и так надо отделить. Поэтому лучше сверху.
А на горизонтальном скроле, кстати, меняется ширина бегунка, когда диапазон меняешь?
Нет.

Re: Как разместить полосу прокрутки не снизу, а сверху?

Romeo » 11 янв 2016, 14:17

А, вертикальную ты оставил стандартной. Ну дальше значит нужно курить мануалы.

А на горизонтальном скроле, кстати, меняется ширина бегунка, когда диапазон меняешь?

Re: Как разместить полосу прокрутки не снизу, а сверху?

Romeo » 10 янв 2016, 19:08

А в SetScrollRange точно SB_CTL передаётся вторым параметром? ;)

Сионист » 10 янв 2016, 18:48

В описании SetScrollRange написано:
Handle to a scroll bar control or a window with a standard scroll bar, depending on the value of the nBar parameter.
. Но если передать hwnd форточки со скролом, то создаётся скролл внизу форточки, чей hwnd передан в функцию, даже если в ней уже создан скролл с помощью CreateWindow. А когда передаю hwnd самого созданного с помощью CreateWindow скролла, то походу ничего не срабатывает. И в описании SetScrollPos та же строчка, но если передать hwnd окна со скролом, то перемещается ползунок скрола внизу окна, созданного с помощью SetScrollRange, а если передать hwnd самого скролла, то функция не срабатывает. А как задать рендж и пос, передав hwnd самого скрола? По msdn получается, что обе функции работают и с форточкой, содержащей скролл, и с самим скролом, но тест подтверждает: даже после SetScrollPos старшее слово First при LOWORD(First), равном SB_THUMBPOSITION, остаётся равно нолю.
Я такого точно не советовал. Если скролбар создан, как отдельное окно, то второй параметр неверен. Там должен стоять SB_CTL. Ещё раз внимательно прочти документацию. Скорее всего поэтому бегунок и не двигается.
Теперь ол комплит, только длина бегунка на скролле так и не меняется.

Re: Как разместить полосу прокрутки не снизу, а сверху?

Romeo » 10 янв 2016, 18:25

Сионист писал(а):Зачем? Очевидно же, что проект или уникодовый, или нет.
Совсем не очевидно. Кому-то могут понадобиться оба варианта сборки. Ничего удивительного в таком требовании не вижу. Если этот механизм был придуман, то в любом случае он кому-то был нужен, разве не так? Если конкретно тебе он не нужен, просто его не используй.
Сионист писал(а):После Ваших же советов, точнее попытки его применения...
Сионист писал(а):SetScrollPos(Scroll, SB_HORZ, Position, TRUE);
Я такого точно не советовал. Если скролбар создан, как отдельное окно, то второй параметр неверен. Там должен стоять SB_CTL. Ещё раз внимательно прочти документацию. Скорее всего поэтому бегунок и не двигается.

Re: Как разместить полосу прокрутки не снизу, а сверху?

Сионист » 10 янв 2016, 17:58

Для того, чтобы, меняя в настройках проекта всего лишь одно значения макроса, можно было легко собрать как уникодную, так и не уникодную сборку, не трогая код.
Зачем? Очевидно же, что проект или уникодовый, или нет.
Если бы я ещё знал после чего наступило это "теперь"...
После Ваших же советов, точнее попытки их применения. Как было раньше, написано в соседней теме, заменил на

Код: Выделить всё

Scroll=CreateWindow(L"scrollbar"                                       ,
                     nullptr                                            ,
                     WS_CHILD                                           |
                     WS_VISIBLE                                         ,
                     2                                                  ,
                     2                                                  ,
                     2                                                  ,
                     16                                                 ,
                     Window                                             ,
                     NULL                                               ,
                     (HINSTANCE)GetWindowLongPtr(Window, GWLP_HINSTANCE),
                     nullptr                                            );
, где Window - hwnd главного окна, в его оконную процедуру добавил

Код: Выделить всё

  case WM_HSCROLL     : PostMessage(ChartWindow, Message, First, Second);
  break;
, (

Код: Выделить всё

LRESULT CALLBACK                 MainWindowWindowProcedure                    (      HWND                    Window               ,
                                                                                     UINT                    Message              ,
                                                                                     WPARAM                  First                ,
                                                                                     LPARAM                  Second               )
). WM_HSCROLL с LOWORD(First), равными SB_LINELEFT, SB_LINERIGHT и SB_PAGERIGHT проходят, Position инкремируется и декремируется, но SetScrollPos не даёт ни каких видимых эффектов, ползунок сколбара остаётся на месте, а раньше ползал. И SetScrollRange похоже, что не работает: при отключении ограничений в принимающей оконной процедуре скролинг пошёл за установленную границу.

Вернуться к началу