EDIT:Как проверить, находится ли полоса прокрутки элемента управления редактирования внизу?
Благодаря @immibis, теперь я могу перейти к нижней части управления успешно используя WM_VSCROLL
, но я все еще хочу знать, как вы можете проверить, если полоса прокрутки находится в нижней части.
У меня есть только для чтения управления редактирования:
HWND hMsgDisplay = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_READONLY | WS_VSCROLL, 10, 10, 664, 200, hWnd, (HMENU)IDC_MESSAGE_DISPLAY_EDIT, hInst, NULL);
И я хочу, чтобы перейти к нижней части его. Я пытался это:
SCROLLINFO sb;
ZeroMemory(&sb, sizeof(sb));
sb.cbSize = sizeof(SCROLLBARINFO);
sb.fMask = SIF_ALL;
GetScrollInfo(hMsgDisplay, SB_VERT, &sb);
while (abs(sb.nMax - sb.nPos) > 1) {
SendMessage(hMsgDisplay, EM_SCROLL, SB_LINEDOWN, NULL);
GetScrollInfo(hMsgDisplay, SB_VERT, &sb);
}
Он работал хорошо, когда есть только одна или две строки текста в элементе управления редактирования, но после того, что программа входит в бесконечный цикл и застревает. Я отладил его и выяснил, что даже когда полоса прокрутки серая (она есть, но ее нельзя прокручивать), sb.nMax
все равно дает мне ненулевое число, и сколько бы раз я не отправлял сообщение EM_SCROLL
, sb.nPos
остается 0. Как я могу обнаружить, что полоса прокрутки прокручена вниз?
MSDN говорит отправка EM_SCROLL эквивалентно отправке WM_VSCROLL и WM_VSCROLL имеет опцию SB_BOTTOM. Вы попробовали отправить это вместо этого, чтобы прокрутить вниз до конца? – immibis
В качестве альтернативы используйте [SetScrollPos() '] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb787597.aspx) или [' SetScrollInfo() '] (https: // msdn .microsoft.com/en-us/library/windows/desktop/bb787595.aspx) (поскольку вы уже знаете максимальную позицию из 'GetScrollInfo()'). –
Спасибо за предложение @immibis! Я просто попробовал, и это сработало. Извините, что не просмотрел его сначала, прежде чем публиковать этот вопрос ... Но даже если это разрешено, я все же хочу знать, как вы можете проверить, находится ли полоса прокрутки внизу. – Tyler