Программирование >>  Формирование пользовательского контейнера 

1 ... 70 71 72 [ 73 ] 74 75 76 ... 156


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

Idefine

IDD START

Idefine

IDD CB1

#de£ine

IDD EB1

Idefine

IDD TEXT1

Idefine

IDD TEXT2

Для компиляции профаммы 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.



1 ... 70 71 72 [ 73 ] 74 75 76 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика