Здравствуйте Constructor, Вы писали:
C>Здравствуйте Joker3D, Вы писали:
JD>>Здравствуйте Constructor, Вы писали:
C>>>Здравствуйте Flea, Вы писали:
F>>>>Здравствуйте Constructor, Вы писали:
C>>>>>Здравствуйте!
C>>>>>Функция SetTimer требует указать хэндл окна, сообщения OnTimer шлются тоже окну.
C>>>>>А как быть, если у класса окна нет, а хожется получать собщения через заданные промежутки времени?
F>>>>Пиши 0 вместо указателя на окно
C>>>Вообще-то, я использую CWnd::SetTimer. Мой класс наследован от CWnd. Окно создавать (т.е., вызвать Create как обычно делается) для него я не могу. Вываливается на ASSERT, что мой класс не окно.
C>>>Следуя Вашему совету, решил написать ::SetTimer(0, 1, 100, ). А что писать в 4-й параметр? NULL теперь туда писать нельзя, а то будет посылаться сообщение WM_TIMER, окна ведь нет. Пишу ::SetTimer(0, 1, 100, TimerProc1), где TIMERPROC TimerProc1(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime); Так не хочет компилироваться.
( Как вызывать ::SetTimer?
JD>>напиши попобробнее... почему это ты не можешь создать окно? что за ассерт, где???
C>
C>C>class COutControlCtrl : public COleControl
C>{
C>// ...
C>}
C>
C>Окно не могу из-за специфического использования этого класса. Теоретически я могу вызвать Create (она объявлена еще в CWnd), но мне это не нужно. А вылетало на ASSERT( IsWindow() ); (примерно так, точный текст не помню), потому что я окно не создавал. Этот ASSERT где-то в исходниках CWnd. Экземпляр класса оператормо new создавал, а окно для этого класса не создавал, поэтому-то и возник данный вопрос.
не понимаю, зачем наследоваться от окна если его (окно) не создавать??? (возможно, тут ошибка в дизайне)
ну да ладно,
1. можно создать внутри твоего класса экземпляр окна CMyWnd wnd; со ссылкой на себя,
потом создать само окно wnd.Create(..).
и у него в обработчике ON_TIMER дергать какой-нибудь свой метод...
2. статическую функцию :
static TIMERPROC MyTimer(...) и в ней делать то что надо..