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

1 ... 68 69 70 [ 71 ] 72 73 74 ... 156


Загрузчик на основе GUI

Класс Download МОЖНО использовать в любой программе, в которой требуется зафузить файл из Интернета. Например, с помощью зафузчика можно Получать недельные биржевые сводки. Если добавить пользовательский интерфейс, его можно использовать как самостоятельную интернет-утилиту. Оставшаяся часть главы посвящена разработке законченного, основанного на GUI-интерфейсе зафузчика файлов WinDL, предназначенного для работы в системе Windows.

Приложение WinDL отображает диалоговое окно (рис. 5.1) для ввода URL-реса файла, загружаемого из Интернета. Окно также содержит индикатор Ь1полнения процесса (progress bar) для отображения состояния процесса за-ГРУзки и переключатель (check box), позволяющий установить режим полной Сгрузки (reload).

fpvi элемента профаммы представляют интерес. Во-первых, в нее включен кестко запрофаммированный URL-адрес. Он указывает на файл, который содержит бесплатный код к другой моей книге: С++: Tlie Complete Reference, 4th Edition ( С++: Полное руководство, 4-е издание ). Этот файл служит подходящим тестом для зафузчика. Естественно, вы можете выбрать собственный URL-адрес.

Далее, обратите внимание на функцию showprogress (). Указатель на эту функцию передается в параметре update функции downioado. Это значит, что она вызывается каждый раз при зафузке очередного буфера данных, функция showprogress () ВЫВОДИТ на экран число, отображающее процент выполненной зафузки.

Наконец, важно отметить, что профамма dltest принимает один аргумент командной строки. Если значение аргумента - reload , файл зафужается полностью, независимо от того, есть ли он на диске, или нет. Если аргумент огсутствует, файл (или его оставшаяся часть) зафужается, только когда на диске есть неполная копия файла.

При компиляции файла dltest.cpp не забудьте добавить библиотеку wininet.lib на этапе компоновки. Например, если вы используете компилятор Visual С++ в режиме командной строки, она должна выглядеть следующим образом:

с1 -GX dl.cpp dltest.cpp wininet.lib

Если вы используете IDE (Integrated Development Environment, Интефиро-ванная среда разработки) компилятора, не забудьте добавить wininet.lib для связывания.



JNlp: www.osbofne.cofTwproducls/0072226803/0

Enter URL

Download Progress f7 Reload

Рис. 5.1. Диалоговое окно загрузчика файлов из Интернета

Код программы WinDL

Приложение WinDL состоит из двух основных частей. Первая - это код для класса Download, описанного ранее. Вторая - код для реализации GUI-интерфейса, приведенный в листинге 5.4. Назовите этот файл windl.cpp.

Листинг 5.4. Утилита загрузки файлов из Интернета, использующая Си1-интер(

WinDL: утилита загрузки файлов из Интернета,

использукадая GUI-интерфейс.

#include <windows.h>

#include <COTnmctrl.h>

#include <cstring>

#include <cscdio>

#include windl.h

#include <process.h>

#include dl.h

const int URL BUF SIZE = 1024;

LRESULT CALLBACK WindowFimc(HWND, UINT, WPARAM, LPARAM); BOOL CALLBACK DialogFimc(HWND. UINT, WPARAM, LPARAM);

void showprogress(unsigned long total, unsigned long part); void resetprogress();

unsigned stdcall dlstart(void * reload);



szWinNemie[] = Dovmload ; имя класса окна

HINSTANCE hInst; дескриптор экземпляра

jjjjUD hvmd; дескриптор главного окна

JJJJHD hProgVftid; дескриптор индикатора (progress bar)

gNDLE hThrd =0; дескриптор потока unsigned long Tid; идентификатор (ID) потока

Счетчики процесса загрузки.

int percentdone =0;

int oldpercentdone = 0;

Небольшая структура для передачи информации в функцию dlstart(). struct Thrdlnfo {

char *url; указатель на строку с URL

int reload; флаг reload

HWND hPBStart; дескриптор кнопки Start

int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR IpszArgs, int nWinMode)

MSG msg; WNDCLASSEX wcl; INITCOMMONCONTROLSEX cc;

Определение класса окна. wcl.cbSize = sizeof(WNDCLASSEX);

wcl.hlnstance = hThisInst; дескриптор этого экземпляра

wcl.IpszClassName = szWinName; имя класса окна Wcl.lpfnWndProc = WindowFimc; функция обработки окна wcl.style =0; текущий стиль

wcl.hlcon = LoadIcon(NULL, IDI APPLICATION); большая пиктограмма Wcl.hlconSm = NULL; использует маленькую версию большой пиктограммы Wcl.hCursor = LoadCursor(NULL, IDC ARROW); стиль курсора



1 ... 68 69 70 [ 71 ] 72 73 74 ... 156

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