Цитата:
Сообщение от Sid
(Сообщение 31004)
Я знаю в чем разница. Вы я смотрю язвить мостак. По существу ничем не ответили человеку, троли на другом форуме тоже, если уж на то пошло.
|
По существу я написал о винапи, а если конкретно - стандартных контролах виндовса. В интернете валом информации как это сделать на С++, С и Delphi и т.д. Это будет не просто - но скорость работы и размер скомпилированого приложения радует.
Посмотрите другие созданные темы пользователя Visible. Человек учится работать в билдере...и это печально. Единственно адекватный способ сделать процесс использования такого приложения проще - использовать винапи. Конкретно - не надо будет качать и таскать борландовские библиотеки( встроенные контролы).
Цитата:
Сообщение от Sid
(Сообщение 31004)
прогресс загрузки это событийный процесс
|
Процесс загрузки - такой каким его напишет программист. Если в qt используется событийная модель и обертка вокруг процесса загрузки, то это не значит, что так везде.
зы линк на попытки человека сделать в билдере http://www.programmersforum.ru/showthread.php?t=187852
ззы мне удобнее использовать wget для закачки файлов - существует и для виндовса. Показывает прогрессбар. Если целью автора ставится изучение с++ как такового, то все же я бы советовал прочитать книги или пройти онлайн курсы в интернете.
Код не мой, собрал - работает (gcc -mwindows -s main.cpp -Wall -O3 -o main.exe 10кб)
ззы
Код:
#include <windows.h>
#include <commctrl.h>
#define PBS_MARQUEE 0x08
#define PBS_SMOOTH 1
#define PBS_SMOOTHREVERSE 0x10
#define COLOR_3DFACE 15
#define PBM_SETMARQUEE (WM_USER + 10)
LRESULT CALLBACK Func(HWND, UINT, WPARAM, LPARAM);
INT registerWindow(PCSTR , WNDPROC , HBRUSH );
HINSTANCE hInstanceProgram;
HWND hWndProgressBar, hWndMain;
INT WINAPI
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszArgument, INT nFunsterStil)
{
MSG message;
hInstanceProgram = hInstance;
if (registerWindow("MyClass", Func,
GetSysColorBrush(COLOR_3DFACE)))
return 0;
hWndMain = CreateWindowEx(0, "MyClass",
"Progress Bar", WS_CAPTION | WS_SYSMENU
| WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
ShowWindow(hWndMain, nFunsterStil);
while (GetMessage(&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam;
}
INT registerWindow(PCSTR lpszClassName, WNDPROC lpfnWndProc,
HBRUSH hbrBackground)
{
WNDCLASSEX wndClassEx;
ZeroMemory(&wndClassEx, sizeof(WNDCLASS));
wndClassEx.hInstance = hInstanceProgram;
wndClassEx.lpszClassName = lpszClassName;
wndClassEx.lpfnWndProc = lpfnWndProc;
wndClassEx.style = CS_DBLCLKS;
wndClassEx.cbSize = sizeof(WNDCLASSEX);
wndClassEx.hIcon = NULL;
wndClassEx.hIconSm = NULL;
wndClassEx.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClassEx.lpszMenuName = NULL;
wndClassEx.cbClsExtra = 0;
wndClassEx.cbWndExtra = 0;
wndClassEx.hbrBackground = hbrBackground;
if (RegisterClassEx(&wndClassEx))
return 0;
return 1;
}
LRESULT CALLBACK Func(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
hWndProgressBar = CreateWindowEx(0, PROGRESS_CLASS,
"", WS_CHILD | WS_VISIBLE | PBS_MARQUEE |PBS_SMOOTHREVERSE, 148, 8, 160, 16, hWnd, NULL,
hInstanceProgram, NULL);
SetTimer(hWnd, 1, 100, NULL);
SendMessage(hWndProgressBar, PBM_SETMARQUEE, TRUE, 100);
break;
case WM_DESTROY:
KillTimer(hWnd, 1);
PostQuitMessage(0);
break;
case WM_TIMER:
SendMessage(hWndProgressBar, PBM_STEPIT, 0, 0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
|