Прива народ. Я делаю прогу и хочу чтобы в ней отображалось время тоесть с 1 до .... я сделал так создаю поток который делает следущее void WINAPI times1() { HDC hdc = GetDC(hWnd); HFONT hFont=CreateFont(25,0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, VARIABLE_PITCH | FF_DONTCARE, "Arial"); HGDIOBJ hOld=SelectObject(hdc,hFont); SetBkMode(hdc,OPAQUE); SetBkColor(hdc,RGB(0,0,0)); SetTextColor(hdc,RGB(0,255,0)); int p=0; int g=0; clock_t end; char time[MAX_PATH]; for(;;) { end=clock(); g = end/CLOCKS_PER_SEC; wsprintf(time,"I?ioaaoaa a?aiy: %d ",g); TextOut(hdc,X-230,0,time,_tcslen(time)); ZeroMemory(time,MAX_PATH); Sleep(7); } } При нажатии на кнопку этот поток
начинает работать вот как это выглядит у меня case WM_COMMAND: if(wParam==IDC_CONNECT) { GetWindowText(hwndCombo1,name,MAX_PATH); if(!strcmp(name,"")) { MessageBox(hWnd,"Au ia aaaee naie eieoeaeeu.","Aaaaeoa naia Eiy e Oaieee?",MB_OK|MB_ICONSTOP); ::SendMessage(hwndCombo1,WM_LBUTTONDOWN,0,0); ::SendMessage(hwndCombo1,WM_LBUTTONUP,0,0); return 0; } DWORD IDThread3; //Вот от сюда я запускаю поток. HANDLE hThread3; hThread3 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) times1, //Запускаю функцию times1 NULL, 0, &IDThread3); } return 0; break; Так вот Дело в том что вот передо мной появилось окно требует
ввести мои параметры и нажать на кнопку но как токо я нажимаю на конопку то вижу что время идет не с нуля а с числа там 10-12 тоесть как токо я нажал на кнопку время начинается с того числа на которое я задержался вводя параметры. Тоесть моя прога както сама уже запускает этот поток хотя я еще не нажимал кнопку по сути такого быть не лолжно но это факт.
Доброе время суток, Buggy! Не знаю зачем так сложно реализовывать таймер (мож надо так), я бы посоветовал тебе использовать функцию GetTickCount(); Запоминай ее значение в отдельную переменную (begintime), а потом разность (float)GetTickCount() - (float)begintime; даст тебе требуемую величину!
Ответ отправлен: 28.11.2002, 12:39 Отправитель: PL Отвечает Switcher
Добрый день, Buggy! Во всем виновата функция clock(). Она используется для счета процессорного времени и начинает работать сразу при запуске программы.
Ответ отправлен: 28.11.2002, 17:00 Отправитель: Switcher
Вопрос № 396
Здравствуйте ув. эксперты! Как сделать чтобы при наведении, например, на кнопку курсор мыши становился другим (напр., IDC_WAIT), SetCursor смотрел, но ничего непонял?
Доброе время суток, Artem! SetCursor(LoadCursor(NULL,IDC_WAIT))
Ответ отправлен: 28.11.2002, 19:33 Отправитель: Dzik Отвечает Switcher
Здравствуйте, Artem! Все очень просто: Объявляем в начале где-нибудь HCURSOR cur; Потом в WM_CREATE или WM_INITDIALOG смотря что используешь cur=LoadCursor(NULL,MAKEINTRESOURCE(IDC_WAIT)); берем координаты кнопки GetWindowRect(GetDlgItem(hDlg,IDC_BUT),&rc) Потом используем WM_MOUSEMOVE: берем координаты курсора GetCursorPos(&pt); и проверяем попадает ли курсор на кнопку если попадает то устанавливаем курсор if (pt.x>rc.left) { SetClassLong(GetDlgItem(hDlg,IDC_BUT), GCL_HCURSOR,(LONG) cur); }
Ответ отправлен: 29.11.2002, 00:04 Отправитель: Switcher Отвечает Jadd
Добрый день, Artem! Пиши к примеру так: myButton.SetCursor( ::LoadCursor(NULL, IDC_APPSTARTING) ); Это из MSDN. Купи и читай, там много инфы или иди на сайт. Ответ отправлен: 29.11.2002, 03:13 Отправитель: Jadd
Вопрос № 397
ПРиветсствую Вас Эксперты. Не найдется ли в ваших кладях знаний ответы на следующие вопросы: 1. Как сделать так, чтобы кнопка при нажатии оставалась нажатой. 2. Можно ли использовать компонент DBEdit как обычный TEdit для введения фильтра базы данных. Спасибо
Добрый день, YAR! 1)Эти фокусы может SpeedButton. Ставишь GroupIndex отличным от нуля у группы кнопок и можно сделать эффект переключения. Еще одно свойство - Down надо ставить в true или false, если работаешь с одной кнобой и хочешь сделать то, что ты спрашиваешь. 2)Да, можно. DBEdit ничем не отличается от Edit. Посмотри исходники, у них общий "родственник", только у DBEdit есть все необходимые методы и свойства для работы с БД. Ответ отправлен: 29.11.2002, 02:13 Отправитель: Jadd
Вопрос № 398
Здравствуйте, эксперты. Спасибо всем, кто откликнулся на мой вопрос №394! Прграммка теперь работает замечательно. Но осталась еще одна проблема, надо бы подписаться и поставить ссылку на свой сайт, а как это сделать, незнаю. За ночь все свои умные книшки перечитал по С++, но оказалось что этой проблеме не уделяют никакого внимания :( Подскажите, пожалуйста, как в MFC организовать ссылочку? И еще, как узнать, сколько моя программа жрет ресурсов? Существуют ли для этого какие нибудь программы?
Здравствуйте, Дмитрий! Для открытия своего сайта используй ShellExecute. При этом задаешь lpOperation = open и lpFile = http://... (ссылка на твой сайт). Ответ отправлен: 29.11.2002, 10:01 Отправитель: Gibbel
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.