Я посмотрел на ваш код, и я считаю, что вызванная с помощью кнопки функция - это проблема
void CTestDlg::OnBnClickedButton1()
{
CAlarmClock clock;
REPEAT_PARMS rp;
ZeroMemory(&rp, sizeof(REPEAT_PARMS));
rp.bRepeatForever = TRUE;
rp.Type = Repeat_Interval;
rp.ss = 3;
clock.SetRepeatAlarm(0, 0, 0, rp, CallbackRtn);
}
Создает Будильник в стеке функций.
Поэтому этот объект CAlarmclock уничтожается в конце функции вместе с ее содержимым.
Чтобы он мог существовать достаточно долго, чтобы фактически сделать обратный вызов
вам нужно добавить его в качестве переменной-члена вашего диалогового класса, чтобы он существовал и вызывался до тех пор, пока диалог существует.
См. Пример кода на странице проекта кода CAlarmclock, чтобы узнать, как правильно использовать этот класс.