Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MFC. Таймер, Только начинаю осваивать 
V
    Опции темы
Kirow
  Дата 7.3.2011, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В общем начали в универе преподавать MFC и один из законспектированных примеров никак не могу довести до ума.
Код

//App.cpp
#include <afxwin.h>
#include "App.h"

BOOL CApp::InitInstance()
{
    m_pMainWnd = new CMainWin;
    m_pMainWnd -> ShowWindow(m_nCmdShow);
    m_pMainWnd ->UpdateWindow();
    return TRUE;
}

CMainWin::CMainWin()
{
    Create(NULL,"Окно");
    CWnd::SetTimer(1,5000,NULL);
}
void CMainWin::OnTimer(UINT_PTR nIDEvent)
{
    char s[250];
    CTime curtime = CTime::GetCurrentTime();
    struct tm* newtime;
    newtime = curtime.GetLocalTm(newtime);  //????????????????
    wsprintf(s,asctime(newtime));
    s[strlen(s)-1]='\0';
    SetWindowText(s);
    CClientDC dc(this);
    dc.TextOut(100,100,s,strlen(s));
}
CApp App;
BEGIN_MESSAGE_MAP(CMainWin,CFrameWnd)
    ON_WM_TIMER()
END_MESSAGE_MAP();

Код

//App.h
class CApp: public CWinApp
{public:
        BOOL InitInstance();
};

class CMainWin:public CFrameWnd
{public:
    CMainWin();
    void OnTimer(UINT_PTR nIDEvent);
    DECLARE_MESSAGE_MAP()
};


На компиляцию сего кода выдает Warning про не инициализированную переменную newtime.Ну и во время выполнения программы выдает ошибки на эту же тему с частотой заданной в таймере.
До VS2005 (использую VS2010),  newtime = curtime.GetLocalTm(newtime) можно было записать curtime.GetLocalTm(NULL)  (хотя я не уверен исчезла ли бы ошибка).
Вот вырезка с MSDNa по использованию GetLocalTm:
Код

CTime t( 1999, 3, 19, 22, 15, 0 );   // 10:15PM March 19, 1999
struct tm* osTime;   // A pointer to a structure containing 
                     // time elements.
osTime = t.GetLocalTm( osTime );

Отличий я что-то не заметил...В общем подскажите если можете.(по идее прога должна выводить текст с информацией про время в окне)

PM MAIL   Вверх
alexvs11
Дата 7.3.2011, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


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

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



Цитата(Kirow @  7.3.2011,  18:11 Найти цитируемый пост)
    struct tm* newtime;
    newtime = curtime.GetLocalTm(newtime);  //????????????????

ты пишешь на ++, поэтому можно писать 
tm* newtime;
вообще странно, в примере ошибка, дб:

Код

CTime curtime = CTime::GetCurrentTime();
tm newtime;
curtime.GetLocalTm( &newtime );  //????????????????
wsprintf( s,asctime( &newtime ) );


PM MAIL   Вверх
Kirow
Дата 7.3.2011, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо.Заменил на:
Код

CTime curtime = CTime::GetCurrentTime();
tm newtime;
wsprintf(s,asctime(curtime.GetLocalTm(&newtime)));

Стало работать.Но тогда не понятен пример с MSDNa, там ошибка или у меня руки кривые?
PM MAIL   Вверх
alexvs11
Дата 7.3.2011, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


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

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



Цитата(Kirow @  7.3.2011,  19:12 Найти цитируемый пост)
Стало работать.Но тогда не понятен пример с MSDNa, там ошибка или у меня руки кривые? 

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

Добавлено через 1 минуту и 15 секунд
прочел, тамже есть комментарий

Цитата

Invalid Example!
The example is incorrect.... par for the course on MSDN i know. If you read the documentation it is actually correct, just not the example.

// Example for CTime::GetLocalTm
CTime t( 1999, 3, 19, 22, 15, 0 );   // 10:15PM March 19, 1999
struct tm osTime;    //  a buffer that will receive the time data
t.GetLocalTm( &osTime );
ATLASSERT( osTime.tm_mon == 2 ); // Note zero-based month!



PM MAIL   Вверх
Kirow
Дата 7.3.2011, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


 




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


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

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