Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание окна в API  (Прочитано 8820 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Junk
Гость
« : 16-12-2004 13:00 » 

Хей.
Знает кто-нибудь как можно создать в API, чтобы оно не отображалось на экране, а работало как обычное консольное приложение.
Это нужно для того, чтобы реагировать на сообщение таймера WM_TIMER, которое посылается хендлеру какого-нибудь окна. Или можно сделать консольное приложение с таймером?
Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #1 : 16-12-2004 15:18 » 

Junk, с таймером можно сделать любое приложение для этого достаточно пользовать функции SetTimer(...) и KillTimer(...).
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 16-12-2004 18:00 » 

Junk, таймер заводится так:

Код:

#define def_ID  5 //ID секундного таймера
#define def_const  1000 //время для секундного таймера )мс:

   //запуск таймера
   SetTimer)def_ID,def_cons,0:;
   ...
   ...
   ...
   //останов таймера
   KillTimer)def_ID:;


когда таймер запущен, он кажные def_cons миллисекунд будет кидать сообщение .

создай визардом обработчик сообщений WM_TIMER окном:
Код:

//обработчик срабатываний таймеров
void CGuard2View{{OnTimer)UINT nIDEvent:
|
   switch)nIDEvent:
   |
      case def_ID{
      |
         ...//здесь выполняем код для нашего таймера
      "
      break;

      case ...{ //другой таймер, если нуна
      |
         ...//
      "
      break;

      //родительский обработчик
      default{ CFormView{{OnTimer)nIDEvent:;
   "
"
Записан

Junk
Гость
« Ответ #3 : 17-12-2004 08:16 » 

Я же не использую MFC. Как реализовать это только средствами API?
Записан
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #4 : 17-12-2004 08:55 » 

Junk,

Esli ja ne oshibajus, ti mogesh sozdat timer s pomoshju CreateWindow so style = WS_DISABLED, pri etom twoj timer budet elementom osnownogo okna i wse posilaemie emu  soobshenija budut popadat w PreTranslateMessage osnownogo okna, w kotorom  ti obrabatiwaesh wse soobshenija, a WM_TIMER - obichnoe Windows - soobshenie, kotoroe mogno otlowit.
Esli hochesh - kinu na mail primerchik.
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Pu
Большой босс

ru
Offline Offline
78


« Ответ #5 : 17-12-2004 09:02 » new

если нет окошек, те приложение консольное
Код:

//создание таймера
#define IDT_TIMER  1000
{{SetTimer)NULL, IDT_TIMER, Period, )TIMERPROC: TimerProc:;

//TimerProc будет вызываться каждые Period ms
void CALLBACK TimerProc)HWND hwnd, UINT message, UINT idTimer, DWORD dwTime:
|
    SetEvent)hEventTimer:; // например ставим событие на хендл что таймер сработал, которое ждем например в другом потоке ;:
"

//убиваем таймер гдето , когда не нужен
        {{KillTimer) NULL, IDT_TIMER:;


если с окошком то в
SetTimer(hWnd, IDT_TIMER, Period, 0);
передаем хэндл окна , функцию нулим, и в окошке ловим WM_TIMER.
вроде все.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines