15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


CWnd::SetTimer, CWnd::KillTimer

Darius Thabit -- darius@world.std.com
Monday, April 08, 1996


VC++ 1.52, Win 3.1

   I'm getting a failure code from CWnd::KillTimer when I pass back the 
value returned by CWnd::SetTimer.  SetTimer is called in an OnInitDialog, 
and KillTimer in the destructor for the dialog.  Any ideas?  I've verified 
in the debugger that the value doesn't change in between.

   Incidentally, the docs for CWnd::KillTimer say that the value expected in 
nIDEvent should be the value returned by the earlier call to CWnd::SetTimer. 
But the SDK docs say that if the hwnd parameter to ::SetTimer was not null, 
the value passed to ::KillTimer should be the original value _passed_ to 
::SetTimer, i.e. the requested timer ID (in that case the ::SetTimer return 
code is just a status indicator).  It seems from afxwin2.inl that 
CWnd::SetTimer (and CWnd::KillTimer) are passing valid window handles 
(CWnd::m_hWnd) to the SDK functions, so shouldn't the value passed to 
CWnd::KillTimer be instead the requested ID passed to CWnd::SetTimer (and 
_not_ its return value)?  (_Boy_ this is wordy.)

   Now in my case I get back the same value from SetTimer that I pass in 
(namely 1), so the above discrepancy doesn't explain my problem :(




Martin J. Mahoney -- mjm@mindspring.com
Wednesday, April 10, 1996

[Moderator's note: There were 10 responses.  8 were basically the
same as this first one.  A couple were way off.]

Darius Thabit wrote:
> 
> VC++ 1.52, Win 3.1
> 
>    I'm getting a failure code from CWnd::KillTimer when I pass back the
> value returned by CWnd::SetTimer.  SetTimer is called in an OnInitDialog,
> and KillTimer in the destructor for the dialog.  Any ideas?  I've verified
> in the debugger that the value doesn't change in between.
> ...

I don't know if this is your problem or not but OnInitdialog is called after
the Windows window has been created but before it is displayed. The destructor
is called after the Windows window has been destroyed. If you move your 
KillTimer into your EndDialog routine, which is called before the Windows 
window is destroyed that might solve your problem.

Martin J. Mahoney




| Вернуться в корень Архива |