Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скроллинг 
:(
    Опции темы
rold
Дата 25.10.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.10.2007

Репутация: нет
Всего: нет



помогите разобраться со сколлингом, пожалуйста. пытаюсь прокрутить изображение с тектом в окошке, но при перемещении движка оно начинает мерцать, "пытаться" уехать, но тем не менее остается на месте. в чем секрет?)
Код

//main файл
KDoc doc;
 
.......
 
switch(uMsg)
    {
    case WM_CREATE:
        hDC=GetDC(hWnd);
        doc.Initialize(&tm);
        ReleaseDC(hWnd,hDC);
        break;
 
    case WM_SIZE:
        hDC=GetDC(hWnd);
 
        cyClient=HIWORD(lParam);
        cxClient=LOWORD(lParam);
        doc.ScrollSettings(hWnd,cxClient,cyClient);
        ReleaseDC(hWnd,hDC);
        break;
 
    case WM_PAINT:
        hDC=BeginPaint(hWnd,&ps);
        GetClientRect(hWnd,&rect);
        hOld=SelectObject(hDC,GetStockObject(DC_PEN));
        for(i=0;i<=255;i++)
        {    
            SetDCPenColor(hDC,RGB(255-i,128,i));
            MoveToEx(hDC,0,0+i,NULL);
            LineTo(hDC,266,0+i);
        }
        SelectObject(hDC,hOld);
        SetBkMode(hDC,TRANSPARENT);
        TextOut(hDC,rect.left+50,rect.top+20,_T("My teXt"),strlen("My teXt"));
        EndPaint(hWnd,&ps);
        break;
 
    case WM_VSCROLL:
        switch(LOWORD(wParam)){
        case SB_LINEUP:
            yInc=-1;break;
        case SB_LINEDOWN:
            yInc=1;break;
        case SB_PAGEUP:
            yInc=-(int)doc.vsi.nPage;break;
        case SB_PAGEDOWN:
            yInc=(int)doc.vsi.nPage;break;
        case SB_THUMBTRACK:
            yInc=HIWORD(wParam)-doc.vsi.nPos;break;
        default: yInc=0;
        }
        doc.UpdateVscroll(hWnd,yInc);
        break;
 
 
    case WM_CLOSE:
        ......
 
    case WM_DESTROY:
                      .......
 


Код


//файл с классом
 
class KDoc{
private:
    int lines;        
public:
    void Initialize(LPTEXTMETRIC tm);
    void ScrollSettings(HWND hwnd,int width,int height);
    void UpdateVscroll(HWND hwnd,int yInc);
 
    //int cxChar;
    int yStep;
    int vertRange;
    SCROLLINFO vsi;
};
 
void KDoc::Initialize(LPTEXTMETRIC tm){
    ....
           yStep=10;
    vsi.nMin=vsi.nPos=0;
}
 
void KDoc::ScrollSettings(HWND hwnd,int width,int height){
    //lines=50;
 
    vsi.cbSize=sizeof(vsi);
    vsi.fMask=SIF_RANGE|SIF_PAGE|SIF_POS;
    vsi.nPage=height/yStep-1;
    vsi.nMax=1500-1;
    if(vsi.nPage>vsi.nMax)
        vsi.nPos=vsi.nMin;
    vertRange=vsi.nMax-vsi.nMin+1;
    SetScrollInfo(hwnd,SB_VERT,&vsi,TRUE);
}
 
void KDoc::UpdateVscroll(HWND hwnd,int yInc){
    yInc=min(yInc,vertRange-(int)vsi.nPage-vsi.nPos);
    yInc=max(yInc,vsi.nMin-vsi.nPos);
 
    if(yInc){
    {    ScrollWindow(hwnd,0,-yStep*yInc,NULL,NULL);
        vsi.nPos+=yInc;
        SetScrollInfo(hwnd,SB_VERT,&vsi,TRUE);
        InvalidateRect(hwnd,NULL,TRUE);
        UpdateWindow(hwnd);
    }
}


PM MAIL   Вверх
rold
Дата 26.10.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.10.2007

Репутация: нет
Всего: нет



неужель никто не знает? smile 

Это сообщение отредактировал(а) rold - 26.10.2007, 21:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0425 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.