Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > хендл главного окна


Автор: decembrist 1.3.2005, 12:25
Как вызвать хендл главного окна (HWND hwnd)?

Автор: maxim1000 1.3.2005, 12:25
что есть главное окно?

Автор: decembrist 1.3.2005, 12:30
Если главное окно описано так
(не под апи)
Код

int main (int argc,char **argv)
{

...
return 0;
}

Добавлено @ 12:34
Дело в том что мне таймер нужно создать. А так как прога написана не под апи, то по хендлу и событию WM_TIMER не канает. Вот и не знаю как выкрутится. smile

Автор: maxim1000 1.3.2005, 12:53
ага...насколько я понял, пишется консольное приложение
я где-то встречал вариант с поиском окна, но мне он не очень нравится...
Цитата
А так как прога написана не под апи

что значит "не под API"? если программа пишется под Windows, то она уже под API
а для использования таймера есть два варианта:
1. использовать его без окна (тогда он будет вызывать процедуру вместо посылки сообщения)
2. создать окно специально для таймера (начиная с какой-то версии Windows есть даже такое понятие MessageWindow - окно, предназначенное специально для работы с сообщениями)

Автор: decembrist 1.3.2005, 13:28
Цитата
использовать его без окна (тогда он будет вызывать процедуру вместо посылки сообщения)

Правильно, я так и пытался сделать:

Код

int main (int argc,char **argv)
{
 if ((argc == GL_FALSE)||(argv == GL_FALSE))
 {
    auxQuit();
 }
 auxInitPosition(0, 0, 550, 550);//расположение окна 550 - 95mm
 auxInitDisplayMode(AUX_RGB|AUX_DOUBLE);
 
 if (auxInitWindow("Индикатор кругового обзора") == GL_FALSE)
 {
    auxQuit();
 }
 Init();
 auxIdleFunc(Draw);
auxReshapeFunc((AUXRESHAPEPROC)Reshape);
 auxMainLoop(Draw);
 return 0;
}

было так. Мне нужно переписать код так, чтоб ф-ция Draw работала по таймеру.
Я пробовал в main вызвать SetTimer(NULL, 0, 40, (TIMERPROC) MyTimerProc);
где в MyTimerProc запихнул Draw , но не сработало.
Как правильно оформить запись? smile

Автор: srd 1.3.2005, 13:30
HWND GetConsoleWindow(void) - функция есть в Windows 2000 и выше.
Либо, как говорит maxim1000, SetConsoleTitle + FindWindow.


Цитата(decembrist @ 1.3.2005, 19:30)
Если главное окно описано так
(не под апи)
Код

int main (int argc,char **argv)
{

...
return 0;
}

Это не главное окно, это функция main smile

Автор: maxim1000 1.3.2005, 13:31
есть еще вариант с Waitable Timer (о них можно почитать в MSDN)

Автор: decembrist 2.3.2005, 12:27
srd? сорри! smile Ваша правда. Так вот в ф-ции main, все таки, как мне вызвать событие WM_TIMER? smile

Автор: srd 2.3.2005, 13:36
SetTimer прекрасно работает, только что проверил:
Код

#include <windows.h>
#include <iostream>

void CALLBACK func(HWND, UINT, UINT_PTR, DWORD dwTime)
{
   std::cout << dwTime << '\n';
}

int main(void)
{
   const int id = 1;

   SetTimer(NULL, id, 100, func);

    // без цикла выборки сообщений таймер не работает.
   MSG msg;
   while (GetMessage(&msg, NULL, 0, 0))
   {
       TranslateMessage(&msg);
       DispatchMessage(&msg);
   }

   KillTimer(NULL, id);

   return 0;
}


Автор: decembrist 2.3.2005, 13:39
Спасибо, сейчас попробую у себя! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)