|
Программирование >> Формирование пользовательского контейнера
hThrd = (HANDLE) j3eginthreadex(NULL, О, dlstart, (void *) &ti, 0, (unsigned *) &Tid); return 1; return 0; Показьшает степень выполнения в progress bar. Ввагаывается функцией download О . void showprogress(unsigned long total, unsigned long part) { percentdone = (part*100)/total; if(percentdone > oldpercentdone) { for(int i= oldpercentdone; i < percentdone; i++) { Сдвигает показания индикатора progress bar. SendMessage(hProgWnd, PHbCSTEPIT, 0, 0); oldpercentdone = percentdone; Переустанавливает счетчики выполнения процесса, void resetprogress() { percentdone = 0; oldpercentdone = 0; Потоковая функция (точка входа потока), начинающая загрузку. signed stdcall dlstart (void * param) { Thrdlnfo *tip = (Thrdlnfo *) param; Делает кнопку Start недоступной. EnableWindow (tip->hPBStart, 0) ; try { Листинг 5.5. Файл ресурса для загрузчика файлов из Интернета #include <windows.h> #include windl.h DLDB DIALOGEX 18, 18, 164, 100 CAPTION Download a file STYLE DS MODALFRAME WS POP WS CAPTION WS SYSMENU I WS VISIBLE PUSHBUTTON Start . IDD START, 42, 80, 30, 14 PUSHBUTTON Cancel , IDD START, 42, 80, 30, 14 CTEXT Download Progress , IDD TEXT2, 2. 40, 160, 12 CTEXT Enter URL , IDD TEXTl, 2, 16, 160, 12 EDITTEXT IDD EB1, 2, 1, 160, 12, ES LEFT WS CHILD WS VISIBLE I WS BORDER ES AUTOHSCROLL AUTOCHECKBOX Reload , IDD CB1, 62, 56, 36, 14 if(tip->reload == BST CHECKED) Dovmload::download(t ip->ur1. true. showprogress); else Download::download(tip->url, false, showprogress); } catch(DLExc exc) { MessageBox(hwnd, exc.geterr(), Download Error , MBjOK); Делает доступной кнопку Start. EnableWindow(tip->hPBStart, 1); CloseHandle(hThrd); закрывает дескриптор потока hThrd =0; делает дескриптор потока неактивным return 0; WinDL применяет файл ресурса, приведенный в листинге 5.5. Листинг 5.6. Заголовочный файл windl.h
Для компиляции профаммы WinDL следует создать проект, содержащий следующие файлы: dl.cpp windl.cpp windLrc Заголовочные файлы dl.h и windl.h также должны быть доступны. Не забудьте связать вашу профамму на этапе компоновки с библиотеками wininet.lib и comctl32.1ib (библиотека comctl32.1ib нужна для индикатора выполнения загрузки). И последнее, поскольку функция download о выполняется в собственном потоке, нужно на этапе компоновки подключить библиотеки поддержки многопоточности. Как работает программа WinDL? Профамма WinDL обеспечивает визуальный интерфейс для класса Download, который поддерживает пользовательский ввод и отображает процесс зафузки файла. WinDL сначала создает минимизированное (свернутое) главное окно, а затем отображает диалоговое окно зафузки. Таким образом, профамма WinDL - приложение с диалоговым окном, никогда не отображающее главное окно. Как уже упоминалось, в задачу книги не входит описание тех фраг-**ентов профаммы, которые используют базовые средства, общие для всех РОфамм, выполняющихся в системе Windows. Но те строки кода, которые косятся непосредственно к зафузчику, будут обсуждаться далее, дикция DialogFunc о обеспечивает взаимодействие пользователя с диалоговым окном. В ней объявлены две статические переменные. Первая - Массив с именем uri, который выводится в поле редактирования по умол- файлу ресурса и коду профаммы требуется заголовочный файл windl.h, Приведенный в листинге 5.6.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |