Дело в том, что в функцию класса передается еще неявный параметр — указатель на this. Поэтому нужно либо объявить свою функцию как static или использовать глобальную
... << RSDN@Home 1.1 alpha 1 >>
\n Give me MSDN and I'll show you the world
Re[2]: SetTimer in ATL
От:
Аноним
Дата:
28.06.03 20:01
Оценка:
Здравствуйте, Begun Ulad, Вы писали:
BU>Здравствуйте, <Аноним>, Вы писали:
BU>Дело в том, что в функцию класса передается еще неявный параметр — указатель на this. Поэтому нужно либо объявить свою функцию как static или использовать глобальную
Спасибо, помогло, другой вопрос, а как сейчас получить доступ к свойствам и методам класса? Ведь указателя this в static-функциях нет.
Здравствуйте, <Аноним>, Вы писали:
А>Спасибо, помогло, другой вопрос, а как сейчас получить доступ к свойствам и методам класса? Ведь указателя this в static-функциях нет.
можно использовать CWindow::SetTimer() и обрабатывать WM_TIMER
... << RSDN@Home 1.1 alpha 1 >>
\n Give me MSDN and I'll show you the world
Re[4]: SetTimer in ATL
От:
Аноним
Дата:
29.06.03 06:30
Оценка:
Здравствуйте, Begun Ulad, Вы писали:
BU>Здравствуйте, <Аноним>, Вы писали:
А>>Спасибо, помогло, другой вопрос, а как сейчас получить доступ к свойствам и методам класса? Ведь указателя this в static-функциях нет.
BU>можно использовать CWindow::SetTimer() и обрабатывать WM_TIMER
У меня ActiveX компонента, у нее по-моему нет родителя CWindow
Re[5]: SetTimer in ATL
От:
Аноним
Дата:
29.06.03 06:40
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Begun Ulad, Вы писали:
BU>>Здравствуйте, <Аноним>, Вы писали:
А>>>Спасибо, помогло, другой вопрос, а как сейчас получить доступ к свойствам и методам класса? Ведь указателя this в static-функциях нет.
BU>>можно использовать CWindow::SetTimer() и обрабатывать WM_TIMER
А>У меня ActiveX компонента, у нее по-моему нет родителя CWindow
Опять я, пытаюсь заюзать CWindow::SetTimer(), выскакивает Assert, типа не IsWindow
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, Begun Ulad, Вы писали:
BU>>Здравствуйте, <Аноним>, Вы писали:
А>>>Спасибо, помогло, другой вопрос, а как сейчас получить доступ к свойствам и методам класса? Ведь указателя this в static-функциях нет.
BU>>можно использовать CWindow::SetTimer() и обрабатывать WM_TIMER
А>У меня ActiveX компонента, у нее по-моему нет родителя CWindow
можно попробовать так :
// header (HPP file)class CYourCtrlClass
{
// your code
//
// timer code struct TimerData
{
CYourCtrlClass* this_;
// another timer data
};
typedef std::map<UINT, TimerData*> TIMERS;
static TIMERS timers_;
static void CALLBACK TimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT nIDEvent, // timer identification
DWORD dwTime // system time
);
void startTimer();
void OnTimer(TimerData* pData);
// more code
};
// implementation (CPP file)
// static members
CYourCtrlClass::TIMERS CYourCtrlClass::timers_;
void CYourCtrlClass::TimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT nIDEvent, // timer identification
DWORD dwTime // system time
)
{
TimerData *ptd = timers_[nIDEvent];
ptd->this_->OnTimer(ptd);
}
// start codevoid CYourCtrlClass::startTimer()
{
TimerData *ptd = new TimerData();
// init TimerData
ptd->this_ = this;
UINT timerId = ::SetTimer(NULL, (UINT)ptd, 1000, &TimerProc);
timers_[timerId]=ptd;
}
// processing timer eventvoid CYourCtrlClass::OnTimer(...)
{
...
}