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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюки PBM_SETRANGE32 или мои? 
:(
    Опции темы
ILyAHA
Дата 7.9.2007, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гламурный хакер
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 30.3.2007
Где: Ярославская обл. г.Рыбинск

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



Привет всем.

В чем баг? Когда для прогресс бара посылаю сообщение PBM_SETRANGE прогоесс бар работает. но когда  посылаю сообщение PBM_SETRANGE32 при перерисовке прогресс бара начинаются глюки.

С прогресс баром работаю так:

Код

extern int WIDTH_OF_IMAGES;
extern HINSTANCE g_hInstance;


BOOL ConvertRawToBMP(HWND hwnd,LPTSTR pszRawFile,LPTSTR pszBMPFile)
{
    long FileLen=0;
    FILE *RawFileHandle=NULL;

    BITMAPFILEHEADER bmfh={0};
    BITMAPINFOHEADER bmih={0};
    RGBQUAD palette[256];
    DWORD bmWidth=0,bmHeight=0,rw=0;

    UCHAR buffer[4200]={0};
    HANDLE hFile;
    double bHeight;
//For progress bar
    HWND hwndPB;
    int cyVScroll;
    RECT rcClient;

    GetClientRect(hwnd, &rcClient); 
    cyVScroll = GetSystemMetrics(SM_CYVSCROLL); 
    hwndPB = CreateWindowEx(0, PROGRESS_CLASS,
             (LPSTR) NULL, WS_CHILD | WS_VISIBLE,
             rcClient.left, rcClient.bottom-cyVScroll,
             rcClient.right, cyVScroll, 
             hwnd, (HMENU) 0, g_hInstance, NULL); 

...//тут делаю свое...
//*** Open raw file for information
    RawFileHandle=fopen(pszRawFile,"rb");

    fseek(RawFileHandle, 0, SEEK_END);
    FileLen = ftell(RawFileHandle);
    fseek(RawFileHandle, 0, SEEK_SET);

    bmWidth=WIDTH_OF_IMAGES;
    bHeight=ceil((double)((float)FileLen / (float)bmWidth));
    bmHeight=(int)bHeight;

//***  Fill BITMAPFILEHEADER structure
    bmfh.bfType=0x4d42;        // 0x42 = "B" 0x4d = "M" 
    bmfh.bfSize=bmWidth*bmHeight+(256*sizeof(RGBQUAD))+sizeof(BITMAPINFOHEADER)+sizeof(BITMAPFILEHEADER)+
                bmWidth*bmHeight%4;
    bmfh.bfReserved1=0;
    bmfh.bfReserved1=0;
    bmfh.bfOffBits=(256*sizeof(RGBQUAD))+sizeof(BITMAPINFOHEADER)+sizeof(BITMAPFILEHEADER);

//***  Fill BITMAPFILEHEADER structure
    bmih.biSize=sizeof(BITMAPINFOHEADER);
    bmih.biWidth=bmWidth;
    bmih.biHeight=bmHeight;
    bmih.biPlanes=1;
    bmih.biBitCount=8;
    bmih.biCompression=BI_RGB;
    bmih.biSizeImage=0;
    bmih.biXPelsPerMeter=0;
    bmih.biYPelsPerMeter=0;
    bmih.biClrUsed=256;
    bmih.biClrImportant=0;

//  Fill palette
    for (int i=0; i<256; i++)
    {
        memset(&palette[i],i,3);
        palette[i].rgbReserved=0;
    }

//    Fill BMP file

    hFile=CreateFile(pszBMPFile,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
    WriteFile(hFile,&bmfh,sizeof(bmfh),&rw,NULL);
    WriteFile(hFile,&bmih,sizeof(bmih),&rw,NULL);
    WriteFile(hFile,&palette,sizeof(palette),&rw,NULL);

    size_t ss=0; 

    SendMessage(hwndPB, PBM_SETRANGE, 0,
                MAKELPARAM(0, FileLen/WIDTH_OF_IMAGES)); 
    SendMessage(hwndPB, PBM_SETSTEP, (WPARAM) 1, 0); 

    while( !feof( RawFileHandle ) )
    {
        memset(&buffer,0,bmWidth);
        ss=fread(buffer,sizeof(UCHAR),bmWidth,RawFileHandle);
        WriteFile(hFile,&buffer,bmWidth,&rw,NULL);
        SendMessage(hwndPB, PBM_STEPIT, 0, 0);
    }

    
    CloseHandle(hFile);
    fclose(RawFileHandle);
    DestroyWindow(hwndPB);

    return TRUE;
}


--------------------
<sсriрt>alert('xss')</sсriрt>
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.0370 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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