на основе пользовательского ввода прокручивается динамически с использованием функций Win32 - PullRequest
0 голосов
/ 07 августа 2011

Я пишу пример приложения, похожего на блокнот, используя функции C & Win32.Как только пользователь нажимает любую клавишу на клавиатуре, она отображается на выходе как «Key Pressed:», а затем переходит на следующую строку.Когда пользователь продолжит нажимать клавишу, он дойдет до конца страницы, но он испытывает трудности с динамической прокруткой вертикальной полосы.Я даже пытался установить диапазон полосы прокрутки динамически, используя SetScrollInfo в WM_CHAR, но все равно он не работает.Пожалуйста, предложите мне способ сделать это.Пример кода для вашей справки.

    case WM_CHAR:
        //////////////////////////////////////////////////////////////////////////
        hdc = GetDC( hwnd );    
        //////////////////////////////////////////////////////////////////////////
        GetTextMetrics( hdc, &tm );
        cyChar = tm.tmHeight + tm.tmExternalLeading;
        //////////////////////////////////////////////////////////////////////////
        si.cbSize = sizeof( si );
        si.fMask  = SIF_RANGE | SIF_PAGE;
        si.nMin   = 0;
        si.nMax   = iMaxLines;
        si.nPage  = cyClient / cyChar;
        SetScrollInfo( hwnd, SB_VERT, &si, TRUE );
        //////////////////////////////////////////////////////////////////////////
        wsprintf( szBuffer, TEXT("Key pressed %c, Pos: %d"), wParam, iMaxLines );
        TextOut( hdc, 0, cyChar * iMaxLines++, szBuffer, lstrlen( szBuffer ) );
        //////////////////////////////////////////////////////////////////////////
        ReleaseDC( hwnd, hdc );
        //////////////////////////////////////////////////////////////////////////

        break;

1 Ответ

2 голосов
/ 07 августа 2011

Вы нарушаете довольно простой шаблон кодирования в Windows: рисуйте только элементы в окне обработчика событий WM_PAINT. Все, что вы рисуете в другом месте, долго не выживет, следующий перекрас стирает это. Например, вызванный настройкой полосы прокрутки.

Упростите эту задачу кодирования с помощью списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...