Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не работает Timer, не вижу ошибки 
V
    Опции темы
Kirow
Дата 27.5.2011, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 1.11.2007

Репутация: нет
Всего: нет



Писал прогу...вроде все правильно, но таймер не работает нивкакую...причины этого не вижу, т.к. в предыдущей проге все аналогично делал и работало.Единственное отличие в том что в этот раз у меня диалоговое окно.


Код

#include "resource.h "
#include "afxwin.h"
#include "afxcmn.h"
// ClockDialog dialog
class ClockDialog : public CDialog
{
    DECLARE_DYNAMIC(ClockDialog)
public:
    ClockDialog(CWnd* pParent = NULL);   // standard constructor
    virtual ~ClockDialog();
// Dialog Data
    enum { IDD = IDD_DIALOG1 };

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    DECLARE_MESSAGE_MAP()
public:
        CEdit TimeText;
    virtual BOOL OnInitDialog();
    afx_msg void OnTimer(UINT_PTR nIDEvent);
};


Код

// ClockDialog.cpp : implementation file
#include "stdafx.h"
#include <afxwin.h>
#include "ClockDialog.h"
#include "afxdialogex.h"
// ClockDialog dialog
IMPLEMENT_DYNAMIC(ClockDialog, CDialog)
ClockDialog::ClockDialog(CWnd* pParent /*=NULL*/)
    : CDialog(ClockDialog::IDD, pParent)
{
    
}
ClockDialog::~ClockDialog()
{
    
}
void ClockDialog::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_STATIC_T1, TimeText);
}

BEGIN_MESSAGE_MAP(ClockDialog, CDialog)
    ON_WM_TIMER()
END_MESSAGE_MAP()
// ClockDialog message handlers
BOOL ClockDialog::OnInitDialog()
{
    CDialog::OnInitDialog();
    SetTimer(1,1000,NULL);
    return TRUE;
}
void ClockDialog::OnTimer(UINT_PTR nIDEvent)
{
    CDialog::OnTimer(nIDEvent);
    CString strTime;
    CTime curtime = CTime::GetCurrentTime();
    strTime.Format("%d:%d:%d",curtime.GetHour(),curtime.GetMinute(),curtime.GetSecond());
    TimeText.SetWindowText(strTime);
    
}


Что бы я не писал в обработчике таймера - ничего не происходит...пришел к выводу что таймер как таковой и не запускается.Кто-то видит причину?


PM MAIL   Вверх
kurlyak
Дата 28.5.2011, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 7.11.2007

Репутация: 1
Всего: 3



А ты попробуй

Код

#define ID_TIMER1 1000
SetTimer(ID_TIMER1,1000,NULL);


Хотя мне кажеться это без разницы!

И еще попробуй закоментировать строку:

Код

void ClockDialog::OnTimer(UINT_PTR nIDEvent)
{
    //CDialog::OnTimer(nIDEvent);
    CString strTime;
    CTime curtime = CTime::GetCurrentTime();
    strTime.Format("%d:%d:%d",curtime.GetHour(),curtime.GetMinute(),curtime.GetSecond());
    TimeText.SetWindowText(strTime);
    
}


Это насколько Я себе представляю - вобще лишнее!

Это сообщение отредактировал(а) kurlyak - 28.5.2011, 21:35
PM MAIL   Вверх
Kirow
Дата 29.5.2011, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 1.11.2007

Репутация: нет
Всего: нет



пробовал и то и то...но на деле оказалось что то что  я тут выложил вполне рабочее...но на некотором этапе возникает какой-то конфликт с чем-то, что написано после инициализации таймера...буду искать.

ок...нашел ошибку в проге...таймер переставал работать из-за неправльного обработчика сообщения WM_PAINT, хотя у меня он и был пустой
Код

void ClockDialog::OnPaint()
{

}

но там не хватало строчки
Код

CDialog::OnPaint();


Ну собственно говоря это и был корень зловония...но я не ожидал что он может находится в том месте, поэтому лишний код убрал когда тут постил...оказалось не лишний.

Это сообщение отредактировал(а) Kirow - 29.5.2011, 02:49
PM MAIL   Вверх
Earnest
Дата 30.5.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Таймер имеет еще более низкий приоритет, чем Paint. А ты обработчик добавил, но оставил пустым. А должен был по меньшей мере валидировать регион. В результате программа твоя занималась исключительно тем, что заходила в OnPaint, а на таймер времени уже не оставлось.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.